unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Re: [PATCH] gnu packages: Clean up synopses and descriptions.
  2015-07-16 11:17 [PATCH] gnu packages: Clean up synopses and descriptions Alex Kost
@ 2015-07-16  9:40 ` Eric Bavier
  2015-07-16 15:55   ` Alex Kost
  2015-07-16 11:52 ` Mathieu Lirzin
  1 sibling, 1 reply; 49+ messages in thread
From: Eric Bavier @ 2015-07-16  9:40 UTC (permalink / raw)
  To: Alex Kost; +Cc: guix-devel

On Thu, 16 Jul 2015 14:17:22 +0300
Alex Kost <alezost@gmail.com> wrote:

> --- a/gnu/packages/base.scm
> +++ b/gnu/packages/base.scm
> @@ -58,7 +58,7 @@
>              (sha256
>               (base32
> "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
> (build-system gnu-build-system)
> -   (synopsis "Hello, GNU world: An example GNU package")
> +   (synopsis "Example GNU package")

I have not looked over then entire patch, but this one caught my eye.
We need to make sure that any changes you make here will not be
expediently overwritten by an invocation of `make sync-descriptions`.
I believe this has happened in the past already.

`~Eric

^ permalink raw reply	[flat|nested] 49+ messages in thread

* [PATCH] gnu packages: Clean up synopses and descriptions.
@ 2015-07-16 11:17 Alex Kost
  2015-07-16  9:40 ` Eric Bavier
  2015-07-16 11:52 ` Mathieu Lirzin
  0 siblings, 2 replies; 49+ messages in thread
From: Alex Kost @ 2015-07-16 11:17 UTC (permalink / raw)
  To: guix-devel

[-- Attachment #1: Type: text/plain, Size: 64 bytes --]

Please pay attention to the commit message.  Is it acceptable?


[-- Attachment #2: 0001-gnu-packages-Clean-up-synopses-and-descriptions.patch --]
[-- Type: text/x-patch, Size: 133485 bytes --]

From ccd85cd8fc1b4c71a1e1fe02ad06f0a5413517e3 Mon Sep 17 00:00:00 2001
From: Alex Kost <alezost@gmail.com>
Date: Thu, 16 Jul 2015 12:14:13 +0300
Subject: [PATCH] gnu packages: Clean up synopses and descriptions.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* gnu/packages/aarddict.scm, gnu/packages/admin.scm, gnu/packages/algebra.scm,
  gnu/packages/audio.scm, gnu/packages/backup.scm, gnu/packages/base.scm,
  gnu/packages/bioinformatics.scm, gnu/packages/bittorrent.scm,
  gnu/packages/calendar.scm, gnu/packages/cdrom.scm, gnu/packages/code.scm,
  gnu/packages/compression.scm, gnu/packages/curl.scm,
  gnu/packages/databases.scm, gnu/packages/enchant.scm,
  gnu/packages/engineering.scm, gnu/packages/file.scm,
  gnu/packages/firmware.scm, gnu/packages/flashing-tools.scm,
  gnu/packages/fonts.scm, gnu/packages/fontutils.scm,
  gnu/packages/freedesktop.scm, gnu/packages/games.scm, gnu/packages/gd.scm,
  gnu/packages/gl.scm, gnu/packages/glib.scm, gnu/packages/gnome.scm,
  gnu/packages/gnupg.scm, gnu/packages/gnuzilla.scm, gnu/packages/gsasl.scm,
  gnu/packages/gstreamer.scm, gnu/packages/gtk.scm, gnu/packages/guile.scm,
  gnu/packages/haskell.scm, gnu/packages/image.scm, gnu/packages/kde.scm,
  gnu/packages/language.scm, gnu/packages/lesstif.scm,
  gnu/packages/libdaemon.scm, gnu/packages/libphidget.scm,
  gnu/packages/libreoffice.scm, gnu/packages/linux.scm, gnu/packages/llvm.scm,
  gnu/packages/mail.scm, gnu/packages/maths.scm, gnu/packages/mcrypt.scm,
  gnu/packages/messaging.scm, gnu/packages/mit-krb5.scm, gnu/packages/mp3.scm,
  gnu/packages/ncdu.scm, gnu/packages/networking.scm, gnu/packages/ntp.scm,
  gnu/packages/ocaml.scm, gnu/packages/openbox.scm, gnu/packages/pdf.scm,
  gnu/packages/perl.scm, gnu/packages/popt.scm, gnu/packages/pretty-print.scm,
  gnu/packages/pulseaudio.scm, gnu/packages/python.scm,
  gnu/packages/rdesktop.scm, gnu/packages/rdf.scm, gnu/packages/ruby.scm,
  gnu/packages/sdl.scm, gnu/packages/slang.scm, gnu/packages/slim.scm,
  gnu/packages/telephony.scm, gnu/packages/tls.scm, gnu/packages/tmux.scm,
  gnu/packages/tre.scm, gnu/packages/unrtf.scm,
  gnu/packages/version-control.scm, gnu/packages/video.scm,
  gnu/packages/vpn.scm, gnu/packages/web.scm, gnu/packages/wget.scm,
  gnu/packages/wordnet.scm, gnu/packages/xdisorg.scm, gnu/packages/xfce.scm,
  gnu/packages/xiph.scm, gnu/packages/xml.scm: Fix typos.  Trim long lines.
  Add missing periods in the end of sentences.  Use double spaces between
  sentences.  Remove trailing whitespaces.  Organize lists in descriptions in
  the same manner, using "•" as an item marker.  Reword some descriptions to
  avoid lines beginning with "(" because such lines break font-lock
  highlighting in Emacs.  Adjust some synopses and descriptions according to
  'guix lint'.
---
 gnu/packages/aarddict.scm        |  17 ++++---
 gnu/packages/admin.scm           |  14 +++---
 gnu/packages/algebra.scm         |   2 +-
 gnu/packages/audio.scm           |   4 +-
 gnu/packages/backup.scm          |   6 +--
 gnu/packages/base.scm            |   4 +-
 gnu/packages/bioinformatics.scm  |   6 +--
 gnu/packages/bittorrent.scm      |   2 +-
 gnu/packages/calendar.scm        |   2 +-
 gnu/packages/cdrom.scm           |   6 +--
 gnu/packages/code.scm            |   2 +-
 gnu/packages/compression.scm     |   4 +-
 gnu/packages/curl.scm            |  10 ++--
 gnu/packages/databases.scm       |   8 +--
 gnu/packages/emacs.scm           |   8 +--
 gnu/packages/enchant.scm         |   2 +-
 gnu/packages/engineering.scm     |  25 +++++++---
 gnu/packages/file.scm            |   4 +-
 gnu/packages/firmware.scm        |   2 +-
 gnu/packages/flashing-tools.scm  |   5 +-
 gnu/packages/fonts.scm           |  15 +++---
 gnu/packages/fontutils.scm       |  27 +++++++---
 gnu/packages/freedesktop.scm     |   2 +-
 gnu/packages/games.scm           |  17 ++++---
 gnu/packages/gd.scm              |   2 +-
 gnu/packages/gl.scm              |   4 +-
 gnu/packages/glib.scm            |  15 +++---
 gnu/packages/gnome.scm           |  38 +++++++-------
 gnu/packages/gnupg.scm           |  28 +++++------
 gnu/packages/gnuzilla.scm        |   4 +-
 gnu/packages/gsasl.scm           |   2 +-
 gnu/packages/gstreamer.scm       |   9 ++--
 gnu/packages/gtk.scm             |   2 +-
 gnu/packages/guile.scm           |  18 ++++---
 gnu/packages/haskell.scm         |   8 +--
 gnu/packages/image.scm           |  17 ++++---
 gnu/packages/kde.scm             |  32 +++++++-----
 gnu/packages/language.scm        |   4 +-
 gnu/packages/lesstif.scm         |   2 +-
 gnu/packages/libdaemon.scm       |  10 ++--
 gnu/packages/libphidget.scm      |   2 +-
 gnu/packages/libreoffice.scm     |   2 +-
 gnu/packages/linux.scm           |   8 +--
 gnu/packages/llvm.scm            |  12 ++---
 gnu/packages/mail.scm            |   4 +-
 gnu/packages/maths.scm           |  14 +++---
 gnu/packages/mcrypt.scm          |   2 +-
 gnu/packages/messaging.scm       |  21 ++++----
 gnu/packages/mit-krb5.scm        |   5 +-
 gnu/packages/mp3.scm             |  14 +++---
 gnu/packages/ncdu.scm            |   2 +-
 gnu/packages/networking.scm      |   2 +-
 gnu/packages/ntp.scm             |   4 +-
 gnu/packages/ocaml.scm           |   4 +-
 gnu/packages/openbox.scm         |   2 +-
 gnu/packages/pdf.scm             |   6 +--
 gnu/packages/perl.scm            | 104 +++++++++++++++++++--------------------
 gnu/packages/popt.scm            |  12 ++---
 gnu/packages/pretty-print.scm    |   2 +-
 gnu/packages/pulseaudio.scm      |  13 ++---
 gnu/packages/python.scm          |  43 +++++++++-------
 gnu/packages/rdesktop.scm        |   2 +-
 gnu/packages/rdf.scm             |   2 +-
 gnu/packages/ruby.scm            |   4 +-
 gnu/packages/sdl.scm             |  12 ++---
 gnu/packages/slang.scm           |   6 +--
 gnu/packages/slim.scm            |   2 +-
 gnu/packages/smalltalk.scm       |   8 +--
 gnu/packages/telephony.scm       |  24 ++++-----
 gnu/packages/tls.scm             |   2 +-
 gnu/packages/tmux.scm            |   2 +-
 gnu/packages/tre.scm             |   4 +-
 gnu/packages/unrtf.scm           |   2 +-
 gnu/packages/version-control.scm |  40 ++++++++-------
 gnu/packages/video.scm           |   4 +-
 gnu/packages/vpn.scm             |   2 +-
 gnu/packages/web.scm             |  46 ++++++++---------
 gnu/packages/wget.scm            |   2 +-
 gnu/packages/wordnet.scm         |   6 +--
 gnu/packages/xdisorg.scm         |   2 +-
 gnu/packages/xfce.scm            |   4 +-
 gnu/packages/xiph.scm            |  77 ++++++++++++++++++-----------
 gnu/packages/xml.scm             |  13 +++--
 83 files changed, 509 insertions(+), 424 deletions(-)

diff --git a/gnu/packages/aarddict.scm b/gnu/packages/aarddict.scm
index 76c7aa4..2e0b516 100644
--- a/gnu/packages/aarddict.scm
+++ b/gnu/packages/aarddict.scm
@@ -59,12 +59,17 @@
     (synopsis
      "Dictionary program and offline Wikipedia reader")
     (description
-     "Aard Dictionary is a free, fast, easy to use word lookup program that
-looks up words fast even with huge dictionaries like English Wikipedia;
-looks up words in multiple dictionaries in multiple languages without
+     "Aard Dictionary is a free, fast, easy to use word lookup program that:
+
+  • looks up words fast even with huge dictionaries like English Wikipedia;
+
+  • looks up words in multiple dictionaries in multiple languages without
 switching;
-works great as offline Wikipedia reader;
-is keyboard navigation friendly;
-has efficient, highly compressed dictionary data storage format with
+
+  • works great as offline Wikipedia reader;
+
+  • is keyboard navigation friendly;
+
+  • has efficient, highly compressed dictionary data storage format with
 ability to verify data integrity built-in.")
     (license gpl3)))
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index 5b56599..a4d3f6f 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -317,7 +317,7 @@ allow automatic login and starting any app.")
     (description
      "This package provides the /etc/services, /etc/protocols, and /etc/rpc
 files, which contain information about the IANA-assigned port, protocol, and
-ONC RPC numbers")
+ONC RPC numbers.")
     (home-page "http://packages.debian.org/sid/netbase")
     (license license:gpl2)))
 
@@ -765,11 +765,11 @@ commands and their arguments.")
     (home-page "http://w1.fi/wpa_supplicant/")
     (synopsis "Connecting to WPA and WPA2-protected wireless networks")
     (description
-     "wpa_supplicant is a WPA Supplicant with support for WPA and WPA2 (IEEE
-802.11i / RSN).  Supplicant is the IEEE 802.1X/WPA component that is used in
-the client stations.  It implements key negotiation with a WPA Authenticator
-and it controls the roaming and IEEE 802.11 authentication/association of the
-WLAN driver.
+     "WPA Supplicant with support for WPA and WPA2 (IEEE 802.11i / RSN).
+Supplicant is the IEEE 802.1X/WPA component that is used in the client
+stations.  It implements key negotiation with a WPA Authenticator and it
+controls the roaming and IEEE 802.11 authentication/association of the WLAN
+driver.
 
 This package provides the 'wpa_supplicant' daemon and the 'wpa_cli' command.")
 
@@ -953,7 +953,7 @@ system is under heavy load.")
                                            (assoc-ref %build-inputs "popt")))
        #:tests? #f))                    ;no 'check' target
     (home-page "http://detox.sourceforge.net")
-    (synopsis "Clean up filenames")
+    (synopsis "Clean up file names")
     (description
      "Detox is a program that renames files to make them easier to work with
 under Unix and related operating systems.  Spaces and various other unsafe
diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm
index e47c405..95fa57f 100644
--- a/gnu/packages/algebra.scm
+++ b/gnu/packages/algebra.scm
@@ -56,7 +56,7 @@ arbitrary precision real (mpfr) or complex (mpc) numbers, without control
 on the rounding.  For the time being, only the few functions needed to
 implement the floating point approach to complex multiplication are
 implemented.  On the other hand, these comprise asymptotically fast
-multiplication routines such as Toom–Cook and the FFT. ")
+multiplication routines such as Toom–Cook and the FFT.")
    (license lgpl2.1+)
    (home-page "http://mpfrcx.multiprecision.org/")))
 
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index ff6fb46..b5087cf 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -124,7 +124,7 @@ Filter) modules follow the convention of 1V / Octave.")
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (home-page "http://aubio.org/")
-    (synopsis "A library for audio labelling")
+    (synopsis "Library for audio labelling")
     (description
      "aubio is a tool designed for the extraction of annotations from audio
 signals.  Its features include segmenting a sound file before each of its
@@ -447,7 +447,7 @@ ALSA PCM devices.")
     (description
      "FluidSynth is a real-time software synthesizer based on the SoundFont 2
 specifications.  FluidSynth reads and handles MIDI events from the MIDI input
-device.  It is the software analogue of a MIDI synthesizer. FluidSynth can
+device.  It is the software analogue of a MIDI synthesizer.  FluidSynth can
 also play midifiles using a Soundfont.")
     (license license:gpl2+)))
 
diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm
index 516712b..ae8d473 100644
--- a/gnu/packages/backup.scm
+++ b/gnu/packages/backup.scm
@@ -237,14 +237,14 @@ random access nor for in-place modification.")
                     (setenv "HOME" (getcwd))
                     (substitute* "testsuite/rdup/rdup.rdup-up-t-with-file.exp"
                       (("/bin/cat") (which "cat"))))
-                  
+
                   %standard-phases))))
     (home-page "http://archive.miek.nl/projects/rdup/index.html")
     (synopsis "Provide a list of files to backup")
     (description
      "Rdup is a utility inspired by rsync and the plan9 way of doing backups.
 Rdup itself does not backup anything, it only print a list of absolute
-filenames to standard output.  Auxiliary scripts are needed that act on this
+file names to standard output.  Auxiliary scripts are needed that act on this
 list and implement the backup strategy.")
     (license license:gpl3+)))
 
@@ -314,5 +314,5 @@ modification times, extended attributes, acls, and resource forks.  Also,
 rdiff-backup can operate in a bandwidth efficient manner over a pipe, like
 rsync.  Thus you can use rdiff-backup and ssh to securely back a hard drive up
 to a remote location, and only the differences will be transmitted.  Finally,
-rdiff-backup is easy to use and settings have sensical defaults.")
+rdiff-backup is easy to use and settings have sensible defaults.")
     (license license:gpl2+)))
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index 31331a1..d60cfe4 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -58,7 +58,7 @@
             (sha256
              (base32 "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
    (build-system gnu-build-system)
-   (synopsis "Hello, GNU world: An example GNU package")
+   (synopsis "Example GNU package")
    (description
     "GNU Hello prints the message \"Hello, world!\" and then exits.  It
 serves as an example of standard GNU coding practices.  As such, it supports
@@ -193,7 +193,7 @@ differences.")
    (description
     "GNU Diffutils is a package containing tools for finding the
 differences between files.  The \"diff\" command is used to show how two files
-differ, while \"cmp\" shows the offsets and line numbers where they differ. 
+differ, while \"cmp\" shows the offsets and line numbers where they differ.
 \"diff3\" allows you to compare three files.  Finally, \"sdiff\" offers an
 interactive means to merge two files.")
    (license gpl3+)
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index a28832d..6d6c154 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -222,7 +222,7 @@ BED, GFF/GTF, VCF.")
     (home-page "https://pythonhosted.org/pybedtools/")
     (synopsis "Python wrapper for BEDtools programs")
     (description
-     "pybedtools is a Python wrapper for Aaron Quinlan's BEDtools programs,
+     "PyBEDTools is a Python wrapper for Aaron Quinlan's BEDtools programs,
 which are widely used for genomic interval manipulation or \"genome algebra\".
 pybedtools extends BEDTools by offering feature-level manipulations from with
 Python.")
@@ -547,8 +547,8 @@ and more accurate.  BWA-MEM also has better performance than BWA-backtrack for
     (home-page "http://bitbucket.org/james_taylor/bx-python/")
     (synopsis "Tools for manipulating biological data")
     (description
-     "bx-python provides tools for manipulating biological data, particularly
-multiple sequence alignments.")
+     "This package provides tools for manipulating biological data,
+particularly multiple sequence alignments.")
     (license license:expat)))
 
 (define-public clipper
diff --git a/gnu/packages/bittorrent.scm b/gnu/packages/bittorrent.scm
index f63ed59..47256a4 100644
--- a/gnu/packages/bittorrent.scm
+++ b/gnu/packages/bittorrent.scm
@@ -83,7 +83,7 @@
     (description
      "Transmission is a BitTorrent client that comes with graphical,
 textual, and Web user interfaces.  Transmission also has a daemon for
-unattended operationg.  It supports local peer discovery, full encryption,
+unattended operations.  It supports local peer discovery, full encryption,
 DHT, µTP, PEX and Magnet Links.")
 
     ;; COPYING reads:
diff --git a/gnu/packages/calendar.scm b/gnu/packages/calendar.scm
index 7e87fbb..6c825c9 100644
--- a/gnu/packages/calendar.scm
+++ b/gnu/packages/calendar.scm
@@ -45,7 +45,7 @@
     (inputs
      `(("icu4c" ,icu4c)))
     (home-page "https://libical.github.io/libical/")
-    (synopsis "iCalendar protocols and data formats implementation")
+    (synopsis "Implementation of iCalendar protocols and data formats")
     (description
      "Libical is an implementation of the iCalendar protocols and protocol
 data units.")
diff --git a/gnu/packages/cdrom.scm b/gnu/packages/cdrom.scm
index 8ecc909..0c28581 100644
--- a/gnu/packages/cdrom.scm
+++ b/gnu/packages/cdrom.scm
@@ -58,11 +58,11 @@
      "Libcddb is a C library to access data on a CDDB server (freedb.org).  It
 allows you to:
 
- 1. search the database for possible CD matches;
+  • search the database for possible CD matches;
 
- 2. retrieve detailed information about a specific CD;
+  • retrieve detailed information about a specific CD;
 
- 3. submit new CD entries to the database.
+  • submit new CD entries to the database.
 
 Libcddb supports both the custom CDDB protocol and tunnelling the query and
 read operations over plain HTTP.  It is also possible to use an HTTP proxy
diff --git a/gnu/packages/code.scm b/gnu/packages/code.scm
index 38f1438..e346f7e 100644
--- a/gnu/packages/code.scm
+++ b/gnu/packages/code.scm
@@ -60,7 +60,7 @@
     (description
      "GNU cflow analyzes C source files and produces a graph charting the
 control flow of the program.  It can output the graph in several styles and
-in either the POSIX format or in an extended GNU format. cflow also includes
+in either the POSIX format or in an extended GNU format.  cflow also includes
 a major mode for Emacs for examining the flowcharts that it produces.")
     (license license:gpl3+)))
 
diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm
index 84bc929..287ae25 100644
--- a/gnu/packages/compression.scm
+++ b/gnu/packages/compression.scm
@@ -264,7 +264,7 @@ than gzip and 15 % smaller output than bzip2.")
     (arguments '(#:configure-flags '("--enable-shared")))
     (home-page "http://www.oberhumer.com/opensource/lzo")
     (synopsis
-     "Data compresion library suitable for real-time data de-/compression")
+     "Data compression library suitable for real-time data de-/compression")
     (description
      "LZO is a data compression library which is suitable for data
 de-/compression in real-time.  This means it favours speed over
@@ -348,7 +348,7 @@ archiving.  Lzip is a clean implementation of the LZMA algorithm.")
     (description
      "GNU sharutils is a package for creating and manipulating shell
 archives that can be readily emailed.  A shell archive is a file that can be
-processed by a Bourne-type shell to unpack the original collection of files. 
+processed by a Bourne-type shell to unpack the original collection of files.
 This package is mostly for compatibility and historical interest.")
     (license license:gpl3+)))
 
diff --git a/gnu/packages/curl.scm b/gnu/packages/curl.scm
index f5cb503..201bdf8 100644
--- a/gnu/packages/curl.scm
+++ b/gnu/packages/curl.scm
@@ -102,10 +102,10 @@
     "curl is a command line tool for transferring data with URL syntax,
 supporting DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP,
 LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet and TFTP.
-curl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading,
-HTTP form based upload, proxies, cookies, user+password authentication
-(Basic, Digest, NTLM, Negotiate, kerberos...), file transfer resume,
-proxy tunneling, and so on")
+curl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP
+form based upload, proxies, cookies, file transfer resume, user+password
+authentication (Basic, Digest, NTLM, Negotiate, kerberos...), proxy
+tunneling, and so on.")
    (license (license:non-copyleft "file://COPYING"
-                       "See COPYING in the distribution."))
+                                  "See COPYING in the distribution."))
    (home-page "http://curl.haxx.se/")))
diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index 7b1b654..17f23dc 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -578,7 +578,7 @@ columns, primary keys, unique constraints and relationships.")
        ("postgresql" ,postgresql)))
     (home-page "http://search.cpan.org/dist/DBD-Pg")
     (synopsis "DBI PostgreSQL interface")
-    (description "")
+    (description "DBD::Pg is a Perl DBI driver for PostgreSQL.")
     (license (package-license perl))))
 
 (define-public perl-dbd-sqlite
@@ -633,7 +633,7 @@ While based on the concepts used by DBIx::Abstract, the concepts used have
 been modified to make the SQL easier to generate from Perl data structures.
 The underlying idea is for this module to do what you mean, based on the data
 structures you provide it, so that you don't have to modify your code every
-time your data changes")
+time your data changes.")
     (license (package-license perl))))
 
 (define-public perl-sql-splitstatement
@@ -688,7 +688,7 @@ valid SQL query.")
    (version "2.3.2")
    (source (origin
             (method url-fetch)
-            (uri 
+            (uri
              (string-append
               "ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-" version ".tar.gz"))
             (sha256
@@ -698,7 +698,7 @@ valid SQL query.")
    (description "Unixodbc is a library providing an API with which to access
 data sources.  Data sources include SQL Servers and any software with an ODBC
 Driver.")
-   (license lgpl2.1+) 
+   (license lgpl2.1+)
    ;; COPYING contains copy of lgpl2.1 - but copyright notices just say "LGPL"
    (home-page "http://www.unixodbc.org")))
 
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index f00e15c..e020f72 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -126,8 +126,8 @@ languages.")
   ;; need to byte-compile .el files.
   (package (inherit emacs)
     (name "emacs-no-x")
-    (synopsis "The extensible, customizable, self-documenting text
-editor (console only)")
+    (synopsis
+     "The extensible, customizable text editor (console only)")
     (build-system gnu-build-system)
     (inputs (fold alist-delete
                   (package-inputs emacs)
@@ -140,8 +140,8 @@ editor (console only)")
 (define-public emacs-no-x-toolkit
   (package (inherit emacs)
     (name "emacs-no-x-toolkit")
-    (synopsis "The extensible, customizable, self-documenting text
-editor (without an X toolkit)" )
+    (synopsis
+     "The extensible, customizable text editor (without an X toolkit)")
     (build-system gnu-build-system)
     (inputs (append `(("inotify-tools" ,inotify-tools))
                     (alist-delete "gtk+" (package-inputs emacs))))
diff --git a/gnu/packages/enchant.scm b/gnu/packages/enchant.scm
index c9e49d9..8b2796d 100644
--- a/gnu/packages/enchant.scm
+++ b/gnu/packages/enchant.scm
@@ -56,6 +56,6 @@ the dlopen() system call.
 Enchant steps in to provide uniformity and conformity on top of these libraries,
 and implement certain features that may be lacking in any individual provider
 library.  Everything should \"just work\" for any and every definition of \"just
-working.\"")
+working\".")
     (home-page "http://www.abisource.com/projects/enchant")
     (license lgpl2.1+)))
diff --git a/gnu/packages/engineering.scm b/gnu/packages/engineering.scm
index b0e37f7..1450c7a 100644
--- a/gnu/packages/engineering.scm
+++ b/gnu/packages/engineering.scm
@@ -131,14 +131,25 @@ plans and designs.")
     (home-page "http://geda-project.org/")
     (synopsis "Schematic capture, netlister, symbols, symbol checker, and utils")
     (description
-     "gaf stands for “gschem and friends”.  It is a subset of the entire tool
+     "GaF stands for “gschem and friends”.  It is a subset of the entire tool
 suite grouped together under the gEDA name.  gEDA/gaf is a collection of tools
-which currently includes: gschem, a schematic capture program; gnetlist, a
-netlist generation program; gsymcheck, a syntax checker for schematic symbols;
-gattrib, a spreadsheet programm that manipulates the properties of symbols of
-a schematic; libgeda, libraries for gschem gnetlist and gsymcheck; gsch2pcb, a
-tool to forward annotation from your schematic to layout using PCB; some minor
-utilities.")
+which currently includes:
+
+  • gschem: schematic capture program;
+
+  • gnetlist: netlist generation program;
+
+  • gsymcheck: syntax checker for schematic symbols;
+
+  • gattrib: spreadsheet program that manipulates the properties of
+symbols of a schematic;
+
+  • libgeda: libraries for gschem gnetlist and gsymcheck;
+
+  • gsch2pcb: tool to forward annotation from your schematic to layout
+using PCB;
+
+  • some minor utilities.")
     (license license:gpl2+)))
 
 (define-public pcb
diff --git a/gnu/packages/file.scm b/gnu/packages/file.scm
index 161df54..d38bf25 100644
--- a/gnu/packages/file.scm
+++ b/gnu/packages/file.scm
@@ -41,10 +41,10 @@
    ;; itself.
    (self-native-input? #t)
 
-   (synopsis "File type guesser")
+   (synopsis "Determine file type")
    (description
     "The file command is a file type guesser, a command-line tool that tells
-you in words what kind of data a file contains.  It does not rely on filename
+you in words what kind of data a file contains.  It does not rely on file name
 extensions to tell you the type of a file, but looks at the actual contents
 of the file.")
    (license bsd-2)
diff --git a/gnu/packages/firmware.scm b/gnu/packages/firmware.scm
index 156f334..bbd8368 100644
--- a/gnu/packages/firmware.scm
+++ b/gnu/packages/firmware.scm
@@ -78,6 +78,6 @@
     (synopsis "Firmware for the Atheros AR7010 and AR9271 USB 802.11n NICs")
     (description
      "This is the firmware for the Qualcomm Atheros AR7010 and AR9271 USB
-802.11n NICs (aka. Wi-Fi USB dongles.)  It is used by the ath9k driver of
+802.11n NICs (aka Wi-Fi USB dongles).  It is used by the ath9k driver of
 Linux-libre.")
     (license (non-copyleft "http://directory.fsf.org/wiki/License:ClearBSD"))))
diff --git a/gnu/packages/flashing-tools.scm b/gnu/packages/flashing-tools.scm
index 648430a..dafe204 100644
--- a/gnu/packages/flashing-tools.scm
+++ b/gnu/packages/flashing-tools.scm
@@ -124,6 +124,7 @@ technique (ISP).")
     (home-page "http://dfu-programmer.github.io/")
     (synopsis "Device firmware update programmer for Atmel chips")
     (description
-     "Dfu-programmer is a multi-platform command-line programmer for Atmel
-(8051, AVR, XMEGA & AVR32) chips with a USB bootloader supporting ISP")
+     "Dfu-programmer is a multi-platform command-line programmer for
+Atmel (8051, AVR, XMEGA & AVR32) chips with a USB bootloader supporting
+ISP.")
     (license gpl2+)))
diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm
index 40b1722..aeb8bf4 100644
--- a/gnu/packages/fonts.scm
+++ b/gnu/packages/fonts.scm
@@ -257,14 +257,14 @@ Arial, Times New Roman, and Courier New.
 
 There are three sets:
 
-- Sans (a substitute for Arial, Albany, Helvetica, Nimbus Sans L, and
-Bitstream Vera Sans);
+  • Sans: a substitute for Arial, Albany, Helvetica, Nimbus Sans L, and
+Bitstream Vera Sans;
 
-- Serif (a substitute for Times New Roman, Thorndale, Nimbus Roman, and
-Bitstream Vera Serif);
+  • Serif: a substitute for Times New Roman, Thorndale, Nimbus Roman, and
+Bitstream Vera Serif;
 
-- Mono (a substitute for Courier New, Cumberland, Courier, Nimbus Mono L,
-and Bitstream Vera Sans Mono).
+  • Mono: a substitute for Courier New, Cumberland, Courier, Nimbus Mono L,
+and Bitstream Vera Sans Mono.
 
 The Liberation Fonts are sponsored by Red Hat.")
     (license license:silofl1.1)))
@@ -356,8 +356,7 @@ seven weights: ExtraLight, Light, Normal, Regular, Medium, Bold, and Heavy.
 And in several OpenType/CFF-based deployment configurations to accommodate
 various system requirements or limitations.  As the name suggests, Pan-CJK
 fonts are intended to support the characters necessary to render or display
-text in Simplified Chinese, Traditional Chinese, Japanese, and Korean.
-")
+text in Simplified Chinese, Traditional Chinese, Japanese, and Korean.")
     (license license:asl2.0)))
 
 (define-public font-wqy-zenhei
diff --git a/gnu/packages/fontutils.scm b/gnu/packages/fontutils.scm
index c04f24b..f939f01 100644
--- a/gnu/packages/fontutils.scm
+++ b/gnu/packages/fontutils.scm
@@ -94,14 +94,25 @@ anti-aliased glyph bitmap generation with 256 gray levels.")
                              "/share/fonts"))))
    (synopsis "Library for configuring and customizing font access")
    (description
-    "Fontconfig can discover new fonts when installed automatically;
-perform font name substitution, so that appropriate alternative fonts can
-be selected if fonts are missing;
-identify the set of fonts required to completely cover a set of languages;
-have GUI configuration tools built as it uses an XML-based configuration file;
-efficiently and quickly find needed fonts among the set of installed fonts;
-be used in concert with the X Render Extension and FreeType to implement
-high quality, anti-aliased and subpixel rendered text on a display.")
+    "Fontconfig can:
+
+  • discover new fonts when installed automatically;
+
+  • perform font name substitution, so that appropriate alternative
+fonts can be selected if fonts are missing;
+
+  • identify the set of fonts required to completely cover a set of
+languages;
+
+  • have GUI configuration tools built as it uses an XML-based
+configuration file;
+
+  • efficiently and quickly find needed fonts among the set of installed
+fonts;
+
+  • be used in concert with the X Render Extension and FreeType to
+implement high quality, anti-aliased and subpixel rendered text on a
+display.")
    ; The exact license is more X11-style than BSD-style.
    (license (license:non-copyleft "file://COPYING"
                        "See COPYING in the distribution."))
diff --git a/gnu/packages/freedesktop.scm b/gnu/packages/freedesktop.scm
index 5cdb456..2e283ff 100644
--- a/gnu/packages/freedesktop.scm
+++ b/gnu/packages/freedesktop.scm
@@ -227,7 +227,7 @@ of a the system to know what users are logged in, and where.")
     (synopsis "Implementations of freedesktop.org standards in Python")
     (description
      "PyXDG is a collection of implementations of freedesktop.org standards in
-Python")
+Python.")
     (license license:lgpl2.0)))
 
 (define-public python2-pyxdg
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 8f495f7..4b88af1 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -781,7 +781,7 @@ reference interpreter, using Glk API.")
     (synopsis "Z-machine interpreter")
     (description
      "Fizmo is a console-based Z-machine interpreter.  It is used to play
-interactive ficiton, also known as textadventures, which were implemented
+interactive fiction, also known as text adventures, which were implemented
 either by Infocom or created using the Inform compiler.")
     (license license:bsd-3)))
 
@@ -853,13 +853,14 @@ multi-system game/emulator system.")
     (build-system gnu-build-system)
     (inputs `(("readline" ,readline)))
     (synopsis "Play the game of Go")
-    (description "GNU Go is a program that plays the game of Go, in which
-players place stones on a grid to form territory or capture other stones.
-While it can be played directly from the terminal, rendered in ASCII
-characters, it is also possible to play GNU Go with 3rd party graphical
-interfaces or even in Emacs.  It supports the standard game storage format
-(SGF, Smart Game Format) and inter-process communication format (GMP, Go
-Modem Protocol).")
+    (description
+     "GNU Go is a program that plays the game of Go, in which players
+place stones on a grid to form territory or capture other stones.  While
+it can be played directly from the terminal, rendered in ASCII characters,
+it is also possible to play GNU Go with 3rd party graphical interfaces or
+even in Emacs.  It supports the standard game storage format (SGF, Smart
+Game Format) and inter-process communication format (GMP, Go Modem
+Protocol).")
     (home-page "http://www.gnu.org/software/gnugo/")
     (license license:gpl3+)))
 
diff --git a/gnu/packages/gd.scm b/gnu/packages/gd.scm
index 725a8e7..55caac9 100644
--- a/gnu/packages/gd.scm
+++ b/gnu/packages/gd.scm
@@ -138,7 +138,7 @@ you can create PNG images on the fly or modify existing files.")
      `(("perl-gd" ,perl-gd)
        ("perl-image-magick" ,perl-image-magick)))
     (home-page "http://search.cpan.org/dist/GD-SecurityImage")
-    (synopsis "Security image generator.")
+    (synopsis "Security image generator")
     (description "This module provides a basic interface to create
 security (captcha) images.  The final output is the actual graphic data, the
 mime type of the graphic, and the created random string.  The module also has
diff --git a/gnu/packages/gl.scm b/gnu/packages/gl.scm
index 9bb1134..386eeb2 100644
--- a/gnu/packages/gl.scm
+++ b/gnu/packages/gl.scm
@@ -130,7 +130,7 @@ the X-Consortium license.")
     (description
      "FTGL is a font rendering library for OpenGL applications.  Supported
 rendering modes are: Bitmaps, Anti-aliased pixmaps, Texture maps, Outlines,
-Polygon meshes, and Extruded polygon meshes")
+Polygon meshes, and Extruded polygon meshes.")
     (license l:x11)))
 
 (define-public s2tc
@@ -484,7 +484,7 @@ OpenGL graphics API.")
     (inputs
      `(("mesa" ,mesa)))
     (home-page "http://github.com/anholt/libepoxy/")
-    (synopsis "A library for handling OpenGL function pointer management")
+    (synopsis "Library for handling OpenGL function pointer management")
     (description
      "A library for handling OpenGL function pointer management.")
     (license l:x11)))
diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm
index 88c61b6..f115069 100644
--- a/gnu/packages/glib.scm
+++ b/gnu/packages/glib.scm
@@ -285,7 +285,7 @@ bindings to call into the C library.")
                      (substitute* "intltool-update.in"
                        (("`file") (string-append "`" file "/bin/file")))))
                  %standard-phases)))
-    (home-page "https://launchpad.net/intltool/+download")
+    (home-page "https://launchpad.net/intltool")
     (synopsis "Tools to centralise translations of different file formats")
     (description
      "Intltool is a set of tools to centralise translations of many different
@@ -293,14 +293,15 @@ file formats using GNU gettext-compatible PO files.
 
 The intltool collection can be used to do these things:
 
-    Extract translatable strings from various source files (.xml.in,
-    glade, .desktop.in, .server.in, .oaf.in).
+  • Extract translatable strings from various source files (.xml.in,
+glade, .desktop.in, .server.in, .oaf.in).
 
-    Collect the extracted strings together with messages from traditional
-    source files (.c, .h) in po/$(PACKAGE).pot.
+  • Collect the extracted strings together with messages from
+traditional source files (.c, .h) in po/$(PACKAGE).pot.
 
-    Merge back the translations from .po files into .xml, .desktop and
-    oaf files.  This merge step will happen at build resp. installation time.")
+  • Merge back the translations from .po files into .xml, .desktop and
+.oaf files.  This merge step will happen at build resp. installation
+time.")
     (license license:gpl2+)))
 
 (define itstool
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 879c27e..83fe187 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -499,14 +499,14 @@ GNOME and KDE desktops to the icon names proposed in the specification.")
      "This package contains a few command line utilities for working with
 desktop entries:
 
-desktop-file-validate: validates a desktop file and prints warnings/errors
-                       about desktop entry specification violations.
+  • desktop-file-validate: validates a desktop file and prints
+warnings/errors about desktop entry specification violations.
 
-desktop-file-install: installs a desktop file to the applications directory,
-                      optionally munging it a bit in transit.
+  • desktop-file-install: installs a desktop file to the applications
+directory,optionally munging it a bit in transit.
 
-update-desktop-database: updates the database containing a cache of MIME types
-                         handled by desktop files.")
+  • update-desktop-database: updates the database containing a cache of
+MIME types handled by desktop files.")
     (license license:gpl2+)))
 
 (define-public gnome-icon-theme
@@ -666,7 +666,7 @@ some form of information without getting in the user's way.")
 every application the chance to assume its own extensibility.  It also has a
 set of features including, but not limited to: multiple extension points; on
 demand (lazy) programming language support for C, Python and JS; simplicity of
-the API")
+the API.")
     (license license:lgpl2.0+)))
 
 (define-public gtkglext
@@ -1211,7 +1211,8 @@ creating interactive structured graphics.")
     (home-page "https://developer.gnome.org/libgnomeui/")
     (synopsis "Additional widgets for applications")
     (description "The libgnomeui library provides additional widgets for
-applications.  Many of the widgets from libgnomeui have already been ported to GTK+.")
+applications.  Many of the widgets from libgnomeui have already been
+ported to GTK+.")
     (license license:lgpl2.0+)))
 
 (define-public libglade
@@ -1652,8 +1653,8 @@ libraries written in C.")
     (synopsis "Virtual Terminal Emulator")
     (description
      "VTE is a library (libvte) implementing a terminal emulator widget for
-GTK+, and a minimal sample application (vte) using that.  Vte is mainly used in
-gnome-terminal, but can also be used to embed a console/terminal in games,
+GTK+, and a minimal sample application (vte) using that.  Vte is mainly used
+in gnome-terminal, but can also be used to embed a console/terminal in games,
 editors, IDEs, etc.")
     (license license:lgpl2.1+)))
 
@@ -1754,11 +1755,12 @@ configuration storage systems.")
      `(("glib" ,glib)))                         ;according to json-glib-1.0.pc
     (home-page "https://wiki.gnome.org/Projects/JsonGlib")
     (synopsis "Compiler for the GObject type system")
-    (description "JSON-GLib is a C library based on GLib providing
-serialization and deserialization support for the JavaScript Object Notation
-(JSON) format described by RFC 4627.  It provides parser and generator
-GObject classes and various wrappers for the complex data types employed by
-JSON, such as arrays and objects.")
+    (description
+     "JSON-GLib is a C library based on GLib providing serialization and
+deserialization support for the JavaScript Object Notation (JSON) format
+described by RFC 4627.  It provides parser and generator GObject classes and
+various wrappers for the complex data types employed by JSON, such as arrays
+and objects.")
     (license license:lgpl2.1+)))
 
 (define-public libxklavier
@@ -1796,8 +1798,8 @@ JSON, such as arrays and objects.")
     (synopsis "High-level API for X Keyboard Extension")
     (description
      "LibXklavier is a library providing high-level API for X Keyboard
-Extension known as XKB.  This library is indended to support XFree86 and other
-commercial X servers. It is useful for creating XKB-related software (layout
+Extension known as XKB.  This library is intended to support XFree86 and other
+commercial X servers.  It is useful for creating XKB-related software (layout
 indicators etc).")
     (license license:lgpl2.0+)))
 
@@ -2212,7 +2214,7 @@ output devices.")
 information.  The primary goal of the Geoclue project is to make creating
 location-aware applications as simple as possible, while the secondary goal is
 to ensure that no application can access location information without explicit
-permission from user. ")
+permission from user.")
     (license license:gpl2+)))
 
 (define-public geocode-glib
diff --git a/gnu/packages/gnupg.scm b/gnu/packages/gnupg.scm
index 8aea3da..59545d9 100644
--- a/gnu/packages/gnupg.scm
+++ b/gnu/packages/gnupg.scm
@@ -440,33 +440,33 @@ PGP keysigning parties.")
     "Signing-party is a collection for all kinds of PGP/GnuPG related things,
 including tools for signing keys, keyring analysis, and party preparation.
 
- * caff: CA - Fire and Forget signs and mails a key
+  • caff: CA - Fire and Forget signs and mails a key
 
- * pgp-clean: removes all non-self signatures from key
+  • pgp-clean: removes all non-self signatures from key
 
- * pgp-fixkey: removes broken packets from keys
+  • pgp-fixkey: removes broken packets from keys
 
- * gpg-mailkeys: simply mail out a signed key to its owner
+  • gpg-mailkeys: simply mail out a signed key to its owner
 
- * gpg-key2ps: generate PostScript file with fingerprint paper strips
+  • gpg-key2ps: generate PostScript file with fingerprint paper strips
 
- * gpgdir: recursive directory encryption tool
+  • gpgdir: recursive directory encryption tool
 
- * gpglist: show who signed which of your UIDs
+  • gpglist: show who signed which of your UIDs
 
- * gpgsigs: annotates list of GnuPG keys with already done signatures
+  • gpgsigs: annotates list of GnuPG keys with already done signatures
 
- * gpgparticipants: create list of party participants for the organiser
+  • gpgparticipants: create list of party participants for the organiser
 
- * gpgwrap: a passphrase wrapper
+  • gpgwrap: a passphrase wrapper
 
- * keyanalyze: minimum signing distance (MSD) analysis on keyrings
+  • keyanalyze: minimum signing distance (MSD) analysis on keyrings
 
- * keylookup: ncurses wrapper around gpg --search
+  • keylookup: ncurses wrapper around gpg --search
 
- * sig2dot: converts a list of GnuPG signatures to a .dot file
+  • sig2dot: converts a list of GnuPG signatures to a .dot file
 
- * springgraph: creates a graph from a .dot file")
+  • springgraph: creates a graph from a .dot file")
    ;; gpl2+ for almost all programs, except for keyanalyze: gpl2
    ;; and caff and gpgsigs: bsd-3, see
    ;; http://packages.debian.org/changelogs/pool/main/s/signing-party/current/copyright
diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm
index 8be3d48..ddca5c7 100644
--- a/gnu/packages/gnuzilla.scm
+++ b/gnu/packages/gnuzilla.scm
@@ -88,8 +88,8 @@
     (home-page
      "https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey")
     (synopsis "Mozilla javascript engine")
-    (description "SpiderMonkey is Mozilla's JavaScript engine written
-in C/C++.")
+    (description
+     "SpiderMonkey is Mozilla's JavaScript engine written in C/C++.")
     (license license:mpl2.0))) ; and others for some files
 
 (define-public nspr
diff --git a/gnu/packages/gsasl.scm b/gnu/packages/gsasl.scm
index 3caeb1a..ce39aed 100644
--- a/gnu/packages/gsasl.scm
+++ b/gnu/packages/gsasl.scm
@@ -41,7 +41,7 @@
    (build-system gnu-build-system)
    (synopsis "Library that implements NTLM authentication")
    (description
-    "Libntlm is a library that implements NTLM authentication")
+    "Libntlm is a library that implements NTLM authentication.")
    (license license:lgpl2.1+)
    (home-page "http://www.nongnu.org/libntlm/")))
 
diff --git a/gnu/packages/gstreamer.scm b/gnu/packages/gstreamer.scm
index d7296e5..717388b 100644
--- a/gnu/packages/gstreamer.scm
+++ b/gnu/packages/gstreamer.scm
@@ -118,8 +118,8 @@ arrays of data.")
     (description
      "GStreamer is a library for constructing graphs of media-handling
 components.  The applications it supports range from simple Ogg/Vorbis
-playback, audio/video streaming to complex audio (mixing) and video
- (non-linear editing) processing.
+playback, audio/video streaming to complex audio mixing and video
+non-linear editing.
 
 Applications can take advantage of advances in codec and filter technology
 transparently.  Developers can add new codecs and filters by writing a
@@ -190,7 +190,7 @@ for the GStreamer multimedia library.")
     (source
      (origin
       (method url-fetch)
-      (uri (string-append 
+      (uri (string-append
             "http://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-"
             version ".tar.xz"))
       (sha256
@@ -275,8 +275,7 @@ developers consider to have good quality code and correct functionality.")
        ("pkg-config" ,pkg-config)
        ("python-wrapper" ,python-wrapper)))
     (home-page "http://gstreamer.freedesktop.org/")
-    (synopsis
-     "GStreamer plugins from the \"ugly\" set.")
+    (synopsis "GStreamer plugins from the \"ugly\" set")
     (description "GStreamer Ugly Plug-ins.  This set contains those plug-ins
 which the developers consider to have good quality code but that might pose
 distribution problems in some jurisdictions, e.g. due to patent threats.")
diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm
index f518992..d812af0 100644
--- a/gnu/packages/gtk.scm
+++ b/gnu/packages/gtk.scm
@@ -131,7 +131,7 @@ The cairo API provides operations similar to the drawing operators of
 PostScript and PDF.  Operations in cairo including stroking and filling cubic
 Bézier splines, transforming and compositing translucent images, and
 antialiased text rendering.  All drawing operations can be transformed by any
-affine transformation (scale, rotation, shear, etc.)")
+affine transformation (scale, rotation, shear, etc.).")
    (license license:lgpl2.1) ; or Mozilla Public License 1.1
    (home-page "http://cairographics.org/")))
 
diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm
index d8c1a8c..d507273 100644
--- a/gnu/packages/guile.scm
+++ b/gnu/packages/guile.scm
@@ -388,11 +388,15 @@ for Guile\".")
     (synopsis "JSON module for Guile")
     (description
      "Guile-json supports parsing and building JSON documents according to the
-http:://json.org specification.  These are the main features:
-- Strictly complies to http://json.org specification.
-- Build JSON documents programmatically via macros.
-- Unicode support for strings.
-- Allows JSON pretty printing.")
+http://json.org specification.  These are the main features:
+
+  • Strictly complies to http://json.org specification.
+
+  • Build JSON documents programmatically via macros.
+
+  • Unicode support for strings.
+
+  • Allows JSON pretty printing.")
     (license lgpl3+)))
 
 (define-public guile-minikanren
@@ -457,14 +461,14 @@ http:://json.org specification.  These are the main features:
     (inputs
      `(("guile" ,guile-2.0)))
     (home-page "https://github.com/ijp/minikanren")
-    (synopsis "miniKanren declarative logic system, packaged for Guile")
+    (synopsis "MiniKanren declarative logic system, packaged for Guile")
     (description
      "MiniKanren is a relational programming extension to the Scheme
 programming Language, written as a smaller version of Kanren suitable for
 pedagogical purposes.  It is featured in the book, The Reasoned Schemer,
 written by Dan Friedman, William Byrd, and Oleg Kiselyov.
 
-This is Ian Price's r6rs packaged version of miniKranen, which deviates
+This is Ian Price's r6rs packaged version of miniKanren, which deviates
 slightly from miniKanren mainline.
 
 See http://minikanren.org/ for more on miniKanren generally.")
diff --git a/gnu/packages/haskell.scm b/gnu/packages/haskell.scm
index 75bbb24..39664c3 100644
--- a/gnu/packages/haskell.scm
+++ b/gnu/packages/haskell.scm
@@ -712,7 +712,7 @@ and high speed.")
         (base32
          "0xa3j0gwr6k5vizxybnzk5fgb3pppgspi6mysnp2gwjp2dbrxkzr"))))
     (build-system haskell-build-system)
-    (inputs 
+    (inputs
      `(("ghc-quickcheck" ,ghc-quickcheck)))
     (home-page "http://hackage.haskell.org/package/split")
     (synopsis
@@ -769,7 +769,7 @@ is also parametric in the input stream type.")
         (base32
          "01hc71k1z9m0g0dv4zsvq5d2dvbgyc5p01hryw5c53792yi2fm25"))))
     (build-system haskell-build-system)
-    (inputs 
+    (inputs
      `(("ghc-quickcheck" ,ghc-quickcheck)))
     ;; these inputs are necessary to use this library
     (propagated-inputs
@@ -837,8 +837,8 @@ mutable and immutable), with a powerful loop optimisation framework.")
      `(("ghc-parsec" ,ghc-parsec)))
     (home-page
      "https://github.com/haskell/network-uri")
-    (synopsis "Labrary for URI manipulation")
-    (description "This package provides an URI manipulation inteface.  In
+    (synopsis "Library for URI manipulation")
+    (description "This package provides an URI manipulation interface.  In
 'network-2.6' the 'Network.URI' module was split off from the 'network'
 package into this package.")
     (license bsd-3)))
diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm
index 30f3800..f7a1692 100644
--- a/gnu/packages/image.scm
+++ b/gnu/packages/image.scm
@@ -180,9 +180,12 @@ collection of tools for doing simple manipulations of TIFF images.")
     (synopsis "Library for reading images in the Microsoft WMF format")
     (description
       "libwmf is a library for reading vector images in Microsoft's native
-Windows Metafile Format (WMF) and for either (a) displaying them in, e.g., an X
-window; or (b) converting them to more standard/free file formats such as, e.g.,
-the W3C's XML-based Scaleable Vector Graphic (SVG) format.")
+Windows Metafile Format (WMF) and for either:
+
+  • displaying them in, e.g., an X window;
+
+  • converting them to more standard/free file formats such as, e.g., the
+W3C's XML-based Scaleable Vector Graphic (SVG) format.")
     (home-page "http://wvware.sourceforge.net/libwmf.html")
 
     ;; 'COPYING' is the GPLv2, but file headers say LGPLv2.0+.
@@ -264,10 +267,10 @@ arithmetic ops.")
     (build-system gnu-build-system)
     (synopsis "Decoder of the JBIG2 image compression format")
     (description
-      "JBIG2 is designed for lossy or lossless encoding of 'bilevel'
-(1-bit monochrome) images at moderately high resolution, and in
-particular scanned paper documents.  In this domain it is very
-efficient, offering compression ratios on the order of 100:1.
+      "JBIG2 is designed for lossy or lossless encoding of 'bilevel' (1-bit
+monochrome) images at moderately high resolution, and in particular scanned
+paper documents.  In this domain it is very efficient, offering compression
+ratios on the order of 100:1.
 
 This is a decoder only implementation, and currently is in the alpha
 stage, meaning it doesn't completely work yet.  However, it is
diff --git a/gnu/packages/kde.scm b/gnu/packages/kde.scm
index 1409e7c..336abf4 100644
--- a/gnu/packages/kde.scm
+++ b/gnu/packages/kde.scm
@@ -85,7 +85,7 @@
      `(#:tests? #f)) ; no test target
     (home-page "http://phonon.kde.org/")
     (synopsis "Qt 4 multimedia API")
-    (description "KDE desktop environment")
+    (description "Qt 4 multimedia API.")
     (license lgpl2.1+)))
 
 (define-public qjson
@@ -196,16 +196,24 @@ with KDE's Plasma Desktop, a platform plugin exists in kdebase.")
     (synopsis "Desktop search daemon")
     (description "Strigi is a desktop search daemon with the following
 main features:
-very fast crawling;
-very small memory footprint;
-no hammering of the system;
-pluggable backend, currently clucene and hyperestraier, sqlite3 and xapian
-are in the works;
-communication between daemon and search program over an abstract interface,
-currently a simple socket;
-simple interface for implementing plugins for extracting information;
-calculation of sha1 for every file crawled
-(allows fast finding of duplicates).")
+
+  • very fast crawling;
+
+  • very small memory footprint;
+
+  • no hammering of the system;
+
+  • pluggable backend, currently clucene and hyperestraier, sqlite3 and
+xapian are in the works;
+
+  • communication between daemon and search program over an abstract
+interface,currently a simple socket;
+
+  • simple interface for implementing plugins for extracting
+information;
+
+  • calculation of sha1 for every file crawled (allows fast finding of
+duplicates).")
     (license lgpl2.0+)))
 
 (define-public oxygen-icons
@@ -225,5 +233,5 @@ calculation of sha1 for every file crawled
      `(#:tests? #f)) ; no test target
     (home-page "http://www.kde.org/")
     (synopsis "Oxygen icon theme for the KDE desktop")
-    (description "KDE desktop environment")
+    (description "Oxygen icon theme for KDE desktop environment.")
     (license lgpl3+)))
diff --git a/gnu/packages/language.scm b/gnu/packages/language.scm
index f2f1fbc..b0fa7aa 100644
--- a/gnu/packages/language.scm
+++ b/gnu/packages/language.scm
@@ -372,7 +372,7 @@ stemmer at http://snowball.sourceforge.net.")
        ("perl-text-unidecode" ,perl-text-unidecode)
        ("perl-namespace-clean" ,perl-namespace-clean)))
     (home-page "http://search.cpan.org/dist/String-ToIdentifier-EN")
-    (synopsis "Convert strings to english program identifiers")
+    (synopsis "Convert strings to English program identifiers")
     (description "This module provides a utility method, \"to_identifier\" for
 converting an arbitrary string into a readable representation using the ASCII
 subset of \"\\w\" for use as an identifier in a computer program.  The intent
@@ -395,6 +395,6 @@ string can be easily inferred by a human just by reading the identifier.")
     (build-system perl-build-system)
     (home-page "http://search.cpan.org/dist/Text-German")
     (synopsis "German grundform reduction")
-    (description "This module is a rather incomplete implementaion of work
+    (description "This module is a rather incomplete implementation of work
 done by Gudrun Putze-Meier.")
     (license (package-license perl))))
diff --git a/gnu/packages/lesstif.scm b/gnu/packages/lesstif.scm
index d2ad120..6326cd3 100644
--- a/gnu/packages/lesstif.scm
+++ b/gnu/packages/lesstif.scm
@@ -45,5 +45,5 @@
         ("libxt" ,libxt)))
     (home-page "http://lesstif.sourceforge.net/")
     (synopsis "Clone of the Motif toolkit for the X window system")
-    (description "Clone of the Motif toolkit for the X window system")
+    (description "Clone of the Motif toolkit for the X window system.")
     (license license:gpl2+))) ; some files are lgpl2.1+ or x11
diff --git a/gnu/packages/libdaemon.scm b/gnu/packages/libdaemon.scm
index 81cf6e5..0b343f7 100644
--- a/gnu/packages/libdaemon.scm
+++ b/gnu/packages/libdaemon.scm
@@ -55,18 +55,18 @@
 daemons.  It consists of the following parts:
 
   • A wrapper around fork() which does the correct daemonization procedure of
-    a process
+a process.
 
   • A wrapper around syslog() for simpler and compatible log output to Syslog
-    or STDERR
+or STDERR.
 
-  • An API for writing PID files
+  • An API for writing PID files.
 
   • An API for serializing UNIX signals into a pipe for usage with select() or
-    poll()
+poll().
 
   • An API for running subprocesses with STDOUT and STDERR redirected to
-    syslog.
+syslog.
 
 APIs like these are used in most daemon software available.  It is not that
 simple to get it done right and code duplication is not a goal.")
diff --git a/gnu/packages/libphidget.scm b/gnu/packages/libphidget.scm
index 0eaf55d..b62b11c 100644
--- a/gnu/packages/libphidget.scm
+++ b/gnu/packages/libphidget.scm
@@ -40,4 +40,4 @@
    (home-page "http://www.phidgets.com/")
    (license lgpl3+)
    (synopsis "C library to manipulate Phidgets")
-   (description synopsis)))
+   (description "Libphidget is a C library to manipulate Phidgets.")))
diff --git a/gnu/packages/libreoffice.scm b/gnu/packages/libreoffice.scm
index e105209..da7e275 100644
--- a/gnu/packages/libreoffice.scm
+++ b/gnu/packages/libreoffice.scm
@@ -657,7 +657,7 @@ patterns, which are pre-processed by a perl script.")
     (synopsis "Thesaurus")
     (description "MyThes is a simple thesaurus that uses a structured text
 data file and an index file with binary search to look up words and phrases
-and to return information on pronunciations, meaningss and synonyms.")
+and to return information on pronunciations, meanings and synonyms.")
     (license (non-copyleft "file://COPYING"
                            "See COPYING in the distribution."))))
 
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 5763439..68c601b 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -356,7 +356,7 @@ It has been modified to remove all non-free binary blobs.")
      "A *Free* project to implement OSF's RFC 86.0.
 Pluggable authentication modules are small shared object files that can
 be used through the PAM API to perform tasks, like authenticating a user
-at login.  Local and dynamic reconfiguration are its key features")
+at login.  Local and dynamic reconfiguration are its key features.")
     (license bsd-3)))
 
 
@@ -1940,10 +1940,10 @@ thanks to the use of namespaces.")
        #:phases (alist-delete 'configure %standard-phases)
        #:tests? #f))  ; no test suite
     (home-page "http://sourceforge.net/projects/hdparm/")
-    (synopsis "tune hard disk parameters for high performance")
+    (synopsis "Tune hard disk parameters for high performance")
     (description
      "Get/set device parameters for Linux SATA/IDE drives.  It's primary use
-is for enabling irq-unmasking and IDE multiplemode.")
+is for enabling irq-unmasking and IDE multiple-mode.")
     (license (non-copyleft "file://LICENSE.TXT"))))
 
 (define-public acpid
@@ -2046,7 +2046,7 @@ also contains the libsysfs library.")
     (home-page "https://www.kernel.org/pub/linux/utils/kernel/cpufreq/")
     (synopsis "Utilities to get and set CPU frequency on Linux")
     (description
-     "The cpufrequtils suite contains utilities to retreive CPU frequency
+     "The cpufrequtils suite contains utilities to retrieve CPU frequency
 information, and set the CPU frequency if supported, using the cpufreq
 capabilities of the Linux kernel.")
     (license gpl2)))
diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm
index 897eab3..9e06a64 100644
--- a/gnu/packages/llvm.scm
+++ b/gnu/packages/llvm.scm
@@ -70,12 +70,12 @@
     (home-page "http://www.llvm.org")
     (synopsis "Optimizing compiler infrastructure")
     (description
-     "LLVM is a compiler infrastructure designed for compile-time, link-time, runtime,
-and idle-time optimization of programs from arbitrary programming languages.
-It currently supports compilation of C and C++ programs, using front-ends
-derived from GCC 4.0.1.  A new front-end for the C family of languages is in
-development.  The compiler infrastructure includes mirror sets of programming
-tools as well as libraries with equivalent functionality.")
+     "LLVM is a compiler infrastructure designed for compile-time, link-time,
+runtime, and idle-time optimization of programs from arbitrary programming
+languages.  It currently supports compilation of C and C++ programs, using
+front-ends derived from GCC 4.0.1.  A new front-end for the C family of
+languages is in development.  The compiler infrastructure includes mirror sets
+of programming tools as well as libraries with equivalent functionality.")
     (license ncsa)))
 
 (define (clang-from-llvm llvm hash)
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index f8eba5c..ee5ee38 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -831,8 +831,8 @@ message.  Headers are decoded from MIME encoding.")
      `(("perl-capture-tiny" ,perl-capture-tiny)))
     (home-page "http://search.cpan.org/dist/Email-MIME-ContentType")
     (synopsis "Parse MIME Content-Type headers")
-    (description "Email::MIME::ContentType parses a MIME Content-Type
-header.")
+    (description
+     "Email::MIME::ContentType parses a MIME Content-Type header.")
     (license (package-license perl))))
 
 (define-public perl-email-mime-encodings
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 7eb2f5a..61dcb4a 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -90,10 +90,10 @@
    (synopsis "Conversion between thousands of scales")
    (description
     "GNU Units converts numeric quantities between units of measure.  It
-can handle scale changes through adaptive usage of standard scale prefixes
-(micro-, kilo-, etc.).  It can also handle nonlinear conversions such as
-Fahrenheit to Celsius.  Its interpreter is powerful enough to be used
-effectively as a scientific calculator.")
+can handle scale changes through adaptive usage of standard scale
+prefixes (micro-, kilo-, etc.).  It can also handle nonlinear
+conversions such as Fahrenheit to Celsius.  Its interpreter is powerful
+enough to be used effectively as a scientific calculator.")
    (license license:gpl3+)
    (home-page "http://www.gnu.org/software/units/")))
 
@@ -1381,7 +1381,7 @@ to BMP, JPEG or PNG image formats.")
     (description "Maxima is a system for the manipulation of symbolic and
 numerical expressions.  It yields high precision numeric results by using
 exact fractions, arbitrary precision integers, and variable precision floating
-point numbers")
+point numbers.")
     ;; Some files are lgpl2.1+. Some are gpl2+.  Some explicitly state gpl1+.
     ;; Others simply say "GNU General Public License" without stating a
     ;; version (which implicitly means gpl1+).
@@ -1528,7 +1528,7 @@ constant parts of it.")
      "OpenLibm is an effort to have a high quality, portable, standalone C
 mathematical library (libm).  It can be used standalone in applications and
 programming language implementations.  The project was born out of a need to
-have a good libm for the Julia programming langage that worked consistently
+have a good libm for the Julia programming language that worked consistently
 across compilers and operating systems, and in 32-bit and 64-bit
 environments.")
     ;; See LICENSE.md for details.
@@ -1846,7 +1846,7 @@ specifications.")
     (home-page "http://lpsolve.sourceforge.net/")
     (synopsis "Mixed integer linear programming (MILP) solver")
     (description
-     "lp_solve is a mixed integer linear programming solver based on the
+     "This is a mixed integer linear programming solver based on the
 revised simplex and the branch-and-bound methods.")
     (license license:lgpl2.1+)))
 
diff --git a/gnu/packages/mcrypt.scm b/gnu/packages/mcrypt.scm
index ad67302..71cbfd1 100644
--- a/gnu/packages/mcrypt.scm
+++ b/gnu/packages/mcrypt.scm
@@ -107,5 +107,5 @@ Algorithms currently supplied are:
 CRC-32, CRC-32B, ALDER-32, MD-2, MD-4, MD-5, RIPEMD-128, RIPEMD-160,
 RIPEMD-256, RIPEMD-320, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, HAVAL-128,
 HAVAL-160, HAVAL-192, HAVAL-256, TIGER, TIGER-128, TIGER-160, GOST, WHIRLPOOL,
-SNEFRU-128, SNEFRU-256")
+SNEFRU-128, SNEFRU-256.")
     (license gpl2+)))
diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm
index 8470d13..19b1860 100644
--- a/gnu/packages/messaging.scm
+++ b/gnu/packages/messaging.scm
@@ -61,15 +61,18 @@
     (description
      "OTR allows you to have private conversations over instant messaging by
 providing:
-* Encryption: No one else can read your instant messages.
-* Authentication: You are assured the correspondent is who you think it is.
-* Deniability: The messages you send do not have digital signatures that are
-  checkable by a third party.  Anyone can forge messages after a conversation
-  to make them look like they came from you.  However, during a conversation,
-  your correspondent is assured the messages he sees are authentic and
-  unmodified.
-* Perfect forward secrecy: If you lose control of your private keys, no
-  previous conversation is compromised.")
+
+  • Encryption: No one else can read your instant messages.
+
+  • Authentication: You are assured the correspondent is who you think it is.
+
+  • Deniability: The messages you send do not have digital signatures that are
+checkable by a third party.  Anyone can forge messages after a conversation to
+make them look like they came from you.  However, during a conversation, your
+correspondent is assured the messages he sees are authentic and unmodified.
+
+  • Perfect forward secrecy: If you lose control of your private keys, no
+previous conversation is compromised.")
     (home-page "https://otr.cypherpunks.ca/")
     (license (list lgpl2.1 gpl2))))
 
diff --git a/gnu/packages/mit-krb5.scm b/gnu/packages/mit-krb5.scm
index 716d95b..b79d4d3 100644
--- a/gnu/packages/mit-krb5.scm
+++ b/gnu/packages/mit-krb5.scm
@@ -81,7 +81,8 @@
     (description
      "Massachusetts Institute of Technology implementation of Kerberos.
 Kerberos is a network authentication protocol designed to provide strong
-authentication for client/server applications by using secret-key cryptography.")
+authentication for client/server applications by using secret-key
+cryptography.")
     (license (non-copyleft "file://NOTICE"
-                        "See NOTICE in the distribution."))
+                           "See NOTICE in the distribution."))
     (home-page "http://web.mit.edu/kerberos/")))
diff --git a/gnu/packages/mp3.scm b/gnu/packages/mp3.scm
index c7efbae..163e075 100644
--- a/gnu/packages/mp3.scm
+++ b/gnu/packages/mp3.scm
@@ -90,7 +90,7 @@ This package contains the library.")
    (synopsis "Library for reading ID3 tags")
    (description
     "Libid3tag is a library for reading ID3 tags, both ID3v1 and the various
-versions of ID3v2")
+versions of ID3v2.")
    (license license:gpl2+)
    (home-page "http://www.underbit.com/products/mad/")))
 
@@ -212,7 +212,7 @@ Speex, WavPack TrueAudio, WAV, AIFF, MP4 and ASF files.")
     (synopsis "MP3 technical info viewer and ID3 1.x tag editor")
     (description
      "MP3Info is a little utility used to read and modify the ID3 tags of MP3
-files.  MP3Info can also display various techincal aspects of an MP3 file
+files.  MP3Info can also display various technical aspects of an MP3 file
 including playing time, bit-rate, sampling frequency and other attributes in a
 pre-defined or user-specifiable output format.")
     (license license:gpl2+)))
@@ -234,7 +234,7 @@ pre-defined or user-specifiable output format.")
              ("libmad" ,libmad)
              ("libogg" ,libogg)
              ("libltdl" ,libltdl)
-             ("libvorbid" ,libvorbis)
+             ("libvorbis" ,libvorbis)
              ("pcre" ,pcre)))
    (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -242,7 +242,7 @@ pre-defined or user-specifiable output format.")
    (description
     "Mp3splt is a utility to split mp3 and ogg vorbis files selecting a begin
 and an end time position, without decoding.  For splitting an album, one may
-select split points and filenames manually or obtain them automatically from
+select split points and file names manually or obtain them automatically from
 CDDB (internet or a local file) or from .cue files.  The tool also supports
 automatic silence split, that can be used also to adjust cddb/cue splitpoints.
 
@@ -264,11 +264,11 @@ This package contains the library.")
               "106dnka56prlc9nsfh300f8841am2lmkwlzgl9lkr25mgnc35wwh"))))
    (build-system gnu-build-system)
    (inputs `(("libmp3splt" ,libmp3splt)))
-   (synopsis "Utiliy for splitting mp3 and ogg vorbis files")
+   (synopsis "Utility for splitting mp3 and ogg vorbis files")
    (description
     "Mp3splt is a utility to split mp3 and ogg vorbis files selecting a begin
 and an end time position, without decoding.  For splitting an album, one may
-select split points and filenames manually or obtain them automatically from
+select split points and file names manually or obtain them automatically from
 CDDB (internet or a local file) or from .cue files.  The tool also supports
 automatic silence split, that can be used also to adjust cddb/cue splitpoints.
 
@@ -444,5 +444,5 @@ format.")
     (synopsis "Audio player for Musepack-formatted files")
     (description
      "Mpc123 is a command-line player for files in the Musepack audio
-compression format (.mpc files.)")
+compression format (.mpc files).")
     (license license:gpl2+)))
diff --git a/gnu/packages/ncdu.scm b/gnu/packages/ncdu.scm
index 7052567..6c3d617 100644
--- a/gnu/packages/ncdu.scm
+++ b/gnu/packages/ncdu.scm
@@ -40,7 +40,7 @@
    (build-system gnu-build-system)
    (synopsis "Ncurses based disk usage analyzer")
    (description "A disk usage analyzer with an ncurses interface, aimed to be
-run on a remote server where you don't have an entire gaphical setup, but have
+run on a remote server where you don't have an entire graphical setup, but have
 to do with a simple SSH connection. ncdu aims to be fast, simple and easy to
 use, and should be able to run in any minimal POSIX-like environment with
 ncurses installed.")
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index 7bd81e6..717e624 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -80,7 +80,7 @@ socat can be used, for instance, as TCP port forwarder, as a shell interface
 to UNIX sockets, IPv6 relay, for redirecting TCP oriented programs to a serial
 line, to logically connect serial lines on different computers, or to
 establish a relatively secure environment (su and chroot) for running client
-or server shell scripts with network connections. ")
+or server shell scripts with network connections.")
     (license license:gpl2)))
 
 (define-public zeromq
diff --git a/gnu/packages/ntp.scm b/gnu/packages/ntp.scm
index e2b43e9..a53d98e 100644
--- a/gnu/packages/ntp.scm
+++ b/gnu/packages/ntp.scm
@@ -38,7 +38,7 @@
    (version "4.2.8p3")
    (source (origin
 	    (method url-fetch)
-	    (uri (string-append 
+	    (uri (string-append
                   "http://archive.ntp.org/ntp4/ntp-"
                   (version-major+minor version)
                   "/ntp-" version ".tar.gz"))
@@ -78,7 +78,7 @@
                        (("test-decodenetnum\\$\\(EXEEXT\\) ") ""))
                      #t)))))
    (build-system gnu-build-system)
-   (synopsis "Real time clock synchonization system")
+   (synopsis "Real time clock synchronization system")
    (description "NTP is a system designed to synchronize the clocks of
 computers over a network.")
    (license (l:x11-style
diff --git a/gnu/packages/ocaml.scm b/gnu/packages/ocaml.scm
index d283acd..6907b1a 100644
--- a/gnu/packages/ocaml.scm
+++ b/gnu/packages/ocaml.scm
@@ -380,8 +380,8 @@ It is developed using Objective Caml and Camlp5.")
                       (zero? (apply system* "make" "install-doc"
                                     make-flags)))))))
     (home-page "http://proofgeneral.inf.ed.ac.uk/")
-    (description "Generic front-end for proof assistants based on Emacs")
-    (synopsis
+    (synopsis "Generic front-end for proof assistants based on Emacs")
+    (description
      "Proof General is a major mode to turn Emacs into an interactive proof
 assistant to write formal mathematical proofs using a variety of theorem
 provers.")
diff --git a/gnu/packages/openbox.scm b/gnu/packages/openbox.scm
index 07cc8f8..9dd756d 100644
--- a/gnu/packages/openbox.scm
+++ b/gnu/packages/openbox.scm
@@ -55,7 +55,7 @@
     (synopsis "Box style window manager")
     (description
      "Openbox is a highly configurable, next generation window manager with
-extensive standars support.  The *box visual style is well known for its
+extensive standards support.  The *box visual style is well known for its
 minimalistic appearance.  Openbox uses the *box visual style, while providing
 a greater number of options for theme developers than previous *box
 implementations.")
diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm
index 5412813..bbd1f66 100644
--- a/gnu/packages/pdf.scm
+++ b/gnu/packages/pdf.scm
@@ -148,7 +148,7 @@
         %standard-phases)))
    (synopsis "Viewer for PDF files based on the Motif toolkit")
    (description
-    "Xpdf is a viewer for Portable Document Format (PDF) files")
+    "Xpdf is a viewer for Portable Document Format (PDF) files.")
    (license license:gpl3) ; or gpl2, but not gpl2+
    (home-page "http://www.foolabs.com/xpdf/")))
 
@@ -424,8 +424,8 @@ but also provides support for other operations such as searching and
 listing the table of contents and hyperlinks.
 
 The library ships with a rudimentary X11 viewer, and a set of command
-line tools for batch rendering (pdfdraw), examining the file structure
-(pdfshow), and rewriting files (pdfclean).")
+line tools for batch rendering (pdfdraw), rewriting files (pdfclean),
+and examining the file structure (pdfshow).")
     (license license:agpl3+)))
 
 (define-public qpdf
diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index 3d28455..c4c83dc 100644
--- a/gnu/packages/perl.scm
+++ b/gnu/packages/perl.scm
@@ -181,11 +181,11 @@ configuration files and parsing command line arguments.")
   (package
     (name "perl-archive-zip")
     (version "1.30")
-    (source 
+    (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "mirror://cpan/authors/id/A/AD/ADAMK/Archive-Zip-" 
+             "mirror://cpan/authors/id/A/AD/ADAMK/Archive-Zip-"
              version ".tar.gz"))
        (sha256
         (base32
@@ -420,8 +420,8 @@ library assert.h.")
      `(("perl-carp-assert" ,perl-carp-assert)))
     (home-page "http://search.cpan.org/dist/Carp-Assert-More")
     (synopsis "Convenience wrappers around Carp::Assert")
-    (description "Carp::Assert::More is a set of handy assertion functions for
-Perl.")
+    (description
+     "Carp::Assert::More is a set of handy assertion functions for Perl.")
     (license artistic2.0)))
 
 (define-public perl-carp-clan
@@ -607,7 +607,7 @@ the Class::C3 method resolution order.")
     (description "Class::Data::Inheritable is for creating accessor/mutators
 to class data.  That is, if you want to store something about your class as a
 whole (instead of about a single object).  This data is then inherited by your
-subclasses and can be overriden.")
+subclasses and can be overridden.")
     (license (package-license perl))))
 
 (define-public perl-class-date
@@ -663,8 +663,8 @@ type for perl.")
     (build-system perl-build-system)
     (home-page "http://search.cpan.org/dist/Class-Inspector")
     (synopsis "Get information about a class and its structure")
-    (description "Class::Inspector allows you to get information about a
-loaded class.")
+    (description
+     "Class::Inspector allows you to get information about a loaded class.")
     (license (package-license perl))))
 
 (define-public perl-class-load
@@ -717,7 +717,7 @@ names, not Class::Name.  For that, this module provides \"load_class
     (home-page "http://search.cpan.org/dist/Class-Load-XS")
     (synopsis "XS implementation of parts of Class::Load")
     (description "This module provides an XS implementation for portions of
-Class::Load")
+Class::Load.")
     (license artistic2.0)))
 
 (define-public perl-class-methodmaker
@@ -758,11 +758,11 @@ write accessor methods for your objects that perform standard tasks.")
        ("perl-test-requires" ,perl-test-requires)))
     (home-page "http://search.cpan.org/dist/Class-Method-Modifiers")
     (synopsis "Moose-like method modifiers")
-    (description "Class::Method::Modifiers provides three modifiers: before,
-around, and after.  before and after are run just before and after the method
-they modify, but can not really affect that original method.  around is run in
-place of the original method, with a hook to easily call that original
-method.")
+    (description "Class::Method::Modifiers provides three modifiers: 'before',
+'around', and 'after'.  'before' and 'after' are run just before and after the
+method they modify, but can not really affect that original method.  'around'
+is run in place of the original method, with a hook to easily call that
+original method.")
     (license (package-license perl))))
 
 (define-public perl-class-singleton
@@ -781,7 +781,7 @@ method.")
     (home-page "http://search.cpan.org/dist/Class-Singleton")
     (synopsis "Implementation of a singleton class for Perl")
     (description "This module implements a Singleton class from which other
-classes can be derived. By itself, the Class::Singleton module does very
+classes can be derived.  By itself, the Class::Singleton module does very
 little other than manage the instantiation of a single object.")
     (license (package-license perl))))
 
@@ -1014,8 +1014,8 @@ CPAN::Meta object are present.")
      `(("perl-common-sense" ,perl-common-sense)))
     (home-page "http://search.cpan.org/dist/Cpanel-JSON-XS")
     (synopsis "JSON::XS for Cpanel")
-    (description "This module converts Perl data structures to JSON and vice
-versa.")
+    (description
+     "This module converts Perl data structures to JSON and vice versa.")
     (license (package-license perl))))
 
 (define-public perl-crypt-randpasswd
@@ -1037,7 +1037,7 @@ versa.")
 to generate random passwords, constructed from words, letters, or characters.
 This code is a Perl implementation of the Automated Password Generator
 standard, like the program described in \"A Random Word Generator For
-Pronounceable Passwords\". This code is a re-engineering of the program
+Pronounceable Passwords\".  This code is a re-engineering of the program
 contained in Appendix A of FIPS Publication 181, \"Standard for Automated
 Password Generator\".")
     (license (package-license perl))))
@@ -1202,7 +1202,7 @@ necessary later on.")
     (home-page "http://search.cpan.org/dist/Data-Tumbler")
     (synopsis "Dynamic generation of nested combinations of variants")
     (description "Data::Tumbler - Dynamic generation of nested combinations of
-variants")
+variants.")
     (license (package-license perl))))
 
 (define-public perl-data-visitor
@@ -1401,7 +1401,7 @@ or \"every day\".  You can also create more complicated recurrences, such as
        ("perl-datetime-format-strptime" ,perl-datetime-format-strptime)
        ("perl-params-validate" ,perl-params-validate)))
     (home-page "http://search.cpan.org/dist/DateTime-Format-Builder")
-    (synopsis "Create DateTime parser classes and objects.")
+    (synopsis "Create DateTime parser classes and objects")
     (description "DateTime::Format::Builder creates DateTime parsers.  Many
 string formats of dates and times are simple and just require a basic regular
 expression to extract the relevant information.  Builder provides a simple way
@@ -1868,8 +1868,8 @@ modules separately and deal with them after the module is done installing.")
     (build-system perl-build-system)
     (home-page "http://search.cpan.org/dist/Error")
     (synopsis "OO-ish Error/Exception handling for Perl")
-    (description "The Error package provides two interfaces. Firstly Error
-provides a procedural interface to exception handling. Secondly Error is a
+    (description "The Error package provides two interfaces.  Firstly Error
+provides a procedural interface to exception handling.  Secondly Error is a
 base class for errors/exceptions that can either be thrown, for subsequent
 catch, or can simply be recorded.")
     (license (package-license perl))))
@@ -1988,8 +1988,8 @@ only about 40% as many lines of code and with zero non-core dependencies.")
      `(("perl-extutils-config" ,perl-extutils-config)))
     (home-page "http://search.cpan.org/dist/ExtUtils-InstallPaths")
     (synopsis "Build.PL install path logic made easy")
-    (description "This module tries to make install path resolution as easy as
-possible.")
+    (description
+     "This module tries to make install path resolution as easy as possible.")
     (license (package-license perl))))
 
 (define-public perl-extutils-config
@@ -2147,7 +2147,7 @@ in various parts of the CPAN ecosystem.")
     (home-page "http://search.cpan.org/dist/File-HomeDir")
     (synopsis "Find your home and other directories on any platform")
     (description "File::HomeDir is a module for locating the directories that
-are \"owned\" by a user (typicaly your user) and to solve the various issues
+are \"owned\" by a user (typically your user) and to solve the various issues
 that arise trying to find them consistently across a wide variety of
 platforms.")
     (license (package-license perl))))
@@ -2199,7 +2199,7 @@ matching a regular expression.")
     (description "File::Remove::remove removes files and directories.  It acts
 like /bin/rm, for the most part.  Although \"unlink\" can be given a list of
 files, it will not remove directories; this module remedies that.  It also
-accepts wildcards, * and ?, as arguments for filenames.")
+accepts wildcards, * and ?, as arguments for file names.")
     (license (package-license perl))))
 
 (define-public perl-file-sharedir
@@ -2266,7 +2266,7 @@ allows you to locate these files after installation.")
     (synopsis "Reading/Writing/Modifying of complete files")
     (description "File::Slurp provides subroutines to read or write entire
 files with a simple call.  It also has a subroutine for reading the list of
-filenames in a directory.")
+file names in a directory.")
     (license (package-license perl))))
 
 (define-public perl-file-temp
@@ -2463,7 +2463,7 @@ inc directory within a distribution and are used by Makefile.PL or Build.PL.")
     (synopsis "Utilities for interactive I/O")
     (description "This module provides three utility subroutines that make it
 easier to develop interactive applications: is_interactive(), interactive(),
-and busy()")
+and busy().")
     (license (package-license perl))))
 
 (define-public perl-io-string
@@ -2548,10 +2548,10 @@ pseudo ttys.")
                      ;; it, so disable it.
                      (delete-file "t/win32_compile.t"))))))
     (home-page "http://search.cpan.org/dist/IPC-Run")
-    (synopsis "system() and background procs w/ piping, redirs, ptys")
+    (synopsis "Run system() and background procs w/ piping, redirs, ptys")
     (description "IPC::Run allows you run and interact with child processes
-using files, pipes, and pseudo-ttys. Both system()-style and scripted usages
-are supported and may be mixed. Likewise, functional and OO API styles are
+using files, pipes, and pseudo-ttys.  Both system()-style and scripted usages
+are supported and may be mixed.  Likewise, functional and OO API styles are
 both supported and may be mixed.")
     (license (package-license perl))))
 
@@ -2567,7 +2567,7 @@ both supported and may be mixed.")
                (base32
                 "0r9m8q78bg7yycpixd7738jm40yz71p2q7inm766kzsw3g6c709x"))))
     (build-system perl-build-system)
-    (synopsis "Run a subprocess with input/ouput redirection")
+    (synopsis "Run a subprocess with input/output redirection")
     (description
      "The IPC::Run3 module allows you to run a subprocess and redirect stdin,
 stdout, and/or stderr to files and perl data structures.  It aims to satisfy
@@ -2691,8 +2691,8 @@ either uses the first module it finds or throws an error.")
        ("perl-types-serialiser" ,perl-types-serialiser)))
     (home-page "http://search.cpan.org/dist/JSON-XS")
     (synopsis "JSON serialising/deserialising for Perl")
-    (description "This module converts Perl data structures to JSON and vice
-versa.")
+    (description
+     "This module converts Perl data structures to JSON and vice versa.")
     (license (package-license perl))))
 
 (define-public perl-list-allutils
@@ -3391,8 +3391,8 @@ accessor, while set methods are prefixed with \"_set_\".")
     (home-page "http://search.cpan.org/dist/MooseX-StrictConstructor")
     (synopsis "Strict object constructors for Moose")
     (description "Simply loading this module makes your constructors
-\"strict\". If your constructor is called with an attribute init argument that
-your class does not declare, then it calls Moose->throw_error(). ")
+\"strict\".  If your constructor is called with an attribute init argument
+that your class does not declare, then it calls Moose->throw_error().")
     (license artistic2.0)))
 
 (define-public perl-moosex-traits-pluggable
@@ -3420,7 +3420,7 @@ your class does not declare, then it calls Moose->throw_error(). ")
      "http://search.cpan.org/dist/MooseX-Traits-Pluggable")
     (synopsis "Trait loading and resolution for Moose")
     (description "Adds support on top of MooseX::Traits for class precedence
-search for traits and some extra attributes")
+search for traits and some extra attributes.")
     (license (package-license perl))))
 
 (define-public perl-moosex-types
@@ -3870,8 +3870,8 @@ function call parameters to an arbitrary level of specificity.")
     (build-system perl-build-system)
     (home-page "http://search.cpan.org/dist/PAR-Dist")
     (synopsis "Create and manipulate PAR distributions")
-    (description "PAR::Dist is a toolkit to create and manipulate PAR
-distributions.")
+    (description
+     "PAR::Dist is a toolkit to create and manipulate PAR distributions.")
     (license (package-license perl))))
 
 (define-public perl-parent
@@ -4144,7 +4144,7 @@ of Perl objects without duplicates for scalars and references.")
     (home-page "http://search.cpan.org/dist/Set-Scalar")
     (synopsis "Set operations for Perl")
     (description "The first priority of Set::Scalar is to be a convenient
-interface to sets (as in: unordered colletions of Perl scalars.)  While not
+interface to sets (as in: unordered collections of Perl scalars).  While not
 designed to be slow or big, neither has it been designed to be fast or
 compact.")
     (license (package-license perl))))
@@ -4249,7 +4249,7 @@ CamelCase and back again.")
     (home-page "http://search.cpan.org/dist/String-RewritePrefix")
     (synopsis "Rewrite strings based on a set of known prefixes")
     (description "This module allows you to rewrite strings based on a set of
-known pprefixes.")
+known prefixes.")
     (license (package-license perl))))
 
 (define-public perl-sub-exporter
@@ -4581,7 +4581,7 @@ stuff has been done, and maybe an estimate at how long remains.")
     (synopsis "Progress meter if run interactively")
     (description "Term::ProgressBar is a wonderful module for showing progress
 bars on the terminal.  This module acts very much like that module when it is
-run interactively. However, when it is not run interactively (for example, as
+run interactively.  However, when it is not run interactively (for example, as
 a cron job) then it does not show the progress bar.")
     (license (package-license perl))))
 
@@ -4705,7 +4705,7 @@ called as methods, which usually isn't want you want.")
     (description
      "Test::Deep compares two structures by going through each level, ensuring
 that the values match, that arrays and hashes have the same elements and that
-references are blessed into the correct class. It also handles circular data
+references are blessed into the correct class.  It also handles circular data
 structures without getting caught in an infinite loop.")
     (home-page (string-append "http://search.cpan.org/~rjbs/"
                               "Test-Deep-" version))
@@ -4730,7 +4730,7 @@ structures without getting caught in an infinite loop.")
     (home-page "http://search.cpan.org/dist/Test-Differences")
     (synopsis "Test strings and data structures and show differences")
     (description "This module exports three test functions and four diff-style
-functions")
+functions.")
     ;; See LICENSE section of Test/Differences.pm, which reads "... GNU public
     ;; license, any version, ..."
     (license gpl3+)))
@@ -4850,7 +4850,7 @@ automatically aggregated and output to STDOUT.")
     (home-page "http://search.cpan.org/dist/Test-LeakTrace")
     (synopsis "Traces memory leaks in Perl")
     (description "Test::LeakTrace provides several functions that trace memory
-leaks. This module scans arenas, the memory allocation system, so it can
+leaks.  This module scans arenas, the memory allocation system, so it can
 detect any leaked SVs in given blocks.")
     (license (package-license perl))))
 
@@ -4967,7 +4967,7 @@ bit more fine-grained control over test suites.")
     (description
      "This modules causes any warnings during testing to be captured and
 stored.  It automatically adds an extra test that will run when your script
-ends to check that there were no warnings.  If there were any warings, the
+ends to check that there were no warnings.  If there were any warnings, the
 test will fail and output diagnostics of where, when and what the warning was,
 including a stack trace of what was going on when it occurred.")
     (home-page (string-append "http://search.cpan.org/~adamk/"
@@ -5294,8 +5294,8 @@ generation of tests in nested combinations of contexts.")
      `(("perl-test-base" ,perl-test-base)))
     (home-page "http://search.cpan.org/dist/Test-YAML")
     (synopsis "Testing module for YAML implementations")
-    (description "Test::YAML is a subclass of Test::Base with YAML specific
-support.")
+    (description
+     "Test::YAML is a subclass of Test::Base with YAML specific support.")
     (license (package-license perl))))
 
 (define-public perl-text-aligner
@@ -5502,9 +5502,9 @@ as exceptions to standard program flow.")
   (home-page "http://search.cpan.org/dist/Tie-IxHash")
   (synopsis "Ordered associative arrays for Perl")
   (description "This Perl module implements Perl hashes that preserve the
-order in which the hash elements were added. The order is not affected when
-values corresponding to existing keys in the IxHash are changed. The elements
-can also be set to any arbitrary supplied order. The familiar perl array
+order in which the hash elements were added.  The order is not affected when
+values corresponding to existing keys in the IxHash are changed.  The elements
+can also be set to any arbitrary supplied order.  The familiar perl array
 operations can also be performed on the IxHash.")
   (license (package-license perl))))
 
@@ -5593,7 +5593,7 @@ duration strings like \"2 minutes\" and \"3 seconds\" to seconds.")
     (description "This module provides functions that are the inverse of
 built-in perl functions localtime() and gmtime().  They accept a date as a
 six-element array, and return the corresponding time(2) value in seconds since
-the system epoch")
+the system epoch.")
     (license (package-license perl))))
 
 (define-public perl-timedate
@@ -5762,7 +5762,7 @@ UNIVERSAL::can() as a function, which it is not.")
     (home-page "http://search.cpan.org/dist/UNIVERSAL-isa")
     (synopsis "UNIVERSAL::isa() reimplementation")
     (description "This module attempts to recover from people calling
-UNIVERSAL::isa as a function")
+UNIVERSAL::isa as a function.")
     (license (package-license perl))))
 
 (define-public perl-variable-magic
diff --git a/gnu/packages/popt.scm b/gnu/packages/popt.scm
index 7739c7a..d0c2304 100644
--- a/gnu/packages/popt.scm
+++ b/gnu/packages/popt.scm
@@ -78,13 +78,13 @@ line syntax.")
      "This is the popt(3) command line option parsing library.  While it is
 similar to getopt(3), it contains a number of enhancements, including:
 
-  - popt is fully reentrant;
+  • popt is fully reentrant;
 
-  - popt can parse arbitrary argv[] style arrays while getopt(3) makes this
-    quite difficult;
+  • popt can parse arbitrary argv[] style arrays while getopt(3) makes this
+quite difficult;
 
-  - popt allows users to alias command line arguments;
+  • popt allows users to alias command line arguments;
 
-  - popt provides convience functions for parsing strings into argv[] style
-    arrays.")
+  • popt provides convience functions for parsing strings into argv[] style
+arrays.")
     (license x11)))
diff --git a/gnu/packages/pretty-print.scm b/gnu/packages/pretty-print.scm
index 81b6537..7c0f50d 100644
--- a/gnu/packages/pretty-print.scm
+++ b/gnu/packages/pretty-print.scm
@@ -136,7 +136,7 @@ indentation counting, function and file indices and more.")
     (synopsis "Generating PostScript, including pretty-printing")
     (description
      "GNU Enscript is a program to convert ASCII text files to PostScript,
-HTML or RTF formats, to be stored in files or sent immediately to a printer. 
+HTML or RTF formats, to be stored in files or sent immediately to a printer.
 It also includes the capability to perform syntax highlighting for several
 different programming languages.")
     (license gpl3+)))
diff --git a/gnu/packages/pulseaudio.scm b/gnu/packages/pulseaudio.scm
index c7c5611..6eb16de 100644
--- a/gnu/packages/pulseaudio.scm
+++ b/gnu/packages/pulseaudio.scm
@@ -106,7 +106,7 @@ SRC provides a small set of converters to allow quality to be traded off
 against computation cost.  The current best converter provides a
 signal-to-noise ratio of 145dB with -3dB passband extending from DC to 96% of
 the theoretical best bandwidth for a given pair of input and output sample
-rates. ")
+rates.")
     (license l:gpl2+)))
 
 (define pulseaudio
@@ -173,11 +173,12 @@ rates. ")
     (home-page "http://www.pulseaudio.org/")
     (synopsis "Sound server")
     (description
-     "PulseAudio is a sound server.  It is basically a proxy for your sound applications.
-It allows you to do advanced operations on your sound data as it passes
-between your application and your hardware.  Things like transferring the
-audio to a different machine, changing the sample format or channel count and
-mixing several sounds into one are easily achieved using a sound server. ")
+     "PulseAudio is a sound server.  It is basically a proxy for your sound
+applications.  It allows you to do advanced operations on your sound data as
+it passes between your application and your hardware.  Things like
+transferring the audio to a different machine, changing the sample format or
+channel count and mixing several sounds into one are easily achieved using a
+sound server.")
 
     ;; PulseAudio is LGPLv2+, but some of the optional dependencies (GNU dbm,
     ;; FFTW, etc.) are GPL'd, so the result is effectively GPLv2+.  See
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index 5dcaba0..fbe323f 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -295,10 +295,12 @@ using Python 2.4 or higher and provides access to the Olson timezone database.")
      "Tools for internationalizing Python applications")
     (description
      "Babel is composed of two major parts:
-- tools to build and work with gettext message catalogs
-- a Python interface to the CLDR (Common Locale Data Repository), providing
+
+  • tools to build and work with gettext message catalogs;
+
+  • a Python interface to the CLDR (Common Locale Data Repository), providing
 access to various locale display names, localized number and date formatting,
-etc. ")
+etc.")
     (license bsd-3)))
 
 (define-public python2-babel
@@ -443,12 +445,18 @@ have been used.")
     (description
      "Setuptools is a fully-featured, stable library designed to facilitate
 packaging Python projects, where packaging includes:
-Python package and module definitions,
-distribution package metadata,
-test hooks,
-project installation,
-platform-specific details,
-Python 3 support.")
+
+  • Python package and module definitions,
+
+  • distribution package metadata,
+
+  • test hooks,
+
+  • project installation,
+
+  • platform-specific details,
+
+  • Python 3 support.")
     (license psfl)))
 
 (define-public python2-setuptools
@@ -628,7 +636,7 @@ datetime module, available in Python 2.3+.")
     (synopsis
      "Parse human-readable date/time text")
     (description
-     "Parse human-readable date/time text")
+     "Parse human-readable date/time text.")
     (license asl2.0)))
 
 (define-public python-pandas
@@ -808,7 +816,7 @@ Database API 2.0T.")
      "Mechanize implements stateful programmatic web browsing in Python,
 after Andy Lester’s Perl module WWW::Mechanize.")
     (license (non-copyleft "file://COPYING"
-                        "See COPYING in the distribution."))))
+                           "See COPYING in the distribution."))))
 
 
 (define-public python-simplejson
@@ -828,8 +836,9 @@ after Andy Lester’s Perl module WWW::Mechanize.")
     (synopsis
      "Json library for Python")
     (description
-     "JSON (JavaScript Object Notation) is a subset of JavaScript syntax
- (ECMA-262 3rd edition) used as a lightweight data interchange format.
+     "JSON (JavaScript Object Notation) is a subset of JavaScript
+syntax (ECMA-262 3rd edition) used as a lightweight data interchange
+format.
 
 Simplejson exposes an API familiar to users of the standard library marshal
 and pickle modules.  It is the externally maintained version of the json
@@ -1524,7 +1533,7 @@ executed.")
      "Python test discovery for unittest")
     (description
      "Discover provides test discovery for unittest, a feature that has been
-backported from Python 2.7 for Python 2.4+")
+backported from Python 2.7 for Python 2.4+.")
     (license bsd-3)))
 
 (define-public python2-discover
@@ -2147,7 +2156,7 @@ mining and data analysis.")
     (home-page "http://scikit-image.org/")
     (synopsis "Image processing in Python")
     (description
-     "scikit-image is a collection of algorithms for image processing.")
+     "Scikit-image is a collection of algorithms for image processing.")
     (license bsd-3)))
 
 (define-public python2-scikit-image
@@ -2318,7 +2327,7 @@ include_dirs = ~a/include
     (home-page "http://www.numpy.org/")
     (synopsis "Fundamental package for scientific computing with Python")
     (description "NumPy is the fundamental package for scientific computing
-with Python. It contains among other things: a powerful N-dimensional array
+with Python.  It contains among other things: a powerful N-dimensional array
 object, sophisticated (broadcasting) functions, tools for integrating C/C++
 and Fortran code, useful linear algebra, Fourier transform, and random number
 capabilities.")
@@ -3356,7 +3365,7 @@ features useful for text console applications.")
      `(("python" ,python)
        ("dbus-glib" ,dbus-glib)))
     (synopsis "Python bindings for D-bus")
-    (description "python-dbus provides bindings for libdbus, the reference
+    (description "Python-dbus provides bindings for libdbus, the reference
 implementation of D-Bus.")
     (home-page "http://www.freedesktop.org/wiki/Software/DBusBindings/")
     (license license:expat)))
diff --git a/gnu/packages/rdesktop.scm b/gnu/packages/rdesktop.scm
index 4ce3373..39a45c5 100644
--- a/gnu/packages/rdesktop.scm
+++ b/gnu/packages/rdesktop.scm
@@ -54,6 +54,6 @@
     (synopsis "Client for Windows Terminal Services")
     (description
      "rdesktop is a client for Microsoft's Windows Remote Desktop Services,
-capable of natively speaking Remote Desktop Protocol (RDP.)  It allows users
+capable of natively speaking Remote Desktop Protocol (RDP).  It allows users
 to remotely control a user's Windows desktop.")
     (license license:gpl3+)))
diff --git a/gnu/packages/rdf.scm b/gnu/packages/rdf.scm
index ce6b215..13ffa2a 100644
--- a/gnu/packages/rdf.scm
+++ b/gnu/packages/rdf.scm
@@ -162,7 +162,7 @@ Java Lucene text search engine API to C++.")
      "LRDF is a library to make it easy to manipulate RDF files describing
 LADSPA plugins.  It can also be used for general RDF manipulation.  It can
 read RDF/XLM and N3 files and export N3 files, and it also has a light
-taxonomic inference capablility.")
+taxonomic inference capability.")
     (license gpl2)))
 
 (define-public rasqal
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index bb7d865..a481365 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -195,7 +195,7 @@ announcement.")
                       ;; dependencies are not available right now.
                       (delete-file "tasks/cucumber.rake"))))))
     (synopsis "Building and packaging helper for Ruby native extensions")
-    (description "Rake-compiler proivides a framework for building and
+    (description "Rake-compiler provides a framework for building and
 packaging native C and Java extensions in Ruby.")
     (home-page "https://github.com/rake-compiler/rake-compiler")
     (license license:expat)))
@@ -316,7 +316,7 @@ standard diff-like tool.")
     (propagated-inputs
      `(("ruby-rspec-support" ,ruby-rspec-support)
        ("ruby-diff-lcs" ,ruby-diff-lcs-for-rspec)))
-    (synopsis "RSpec expecations library")
+    (synopsis "RSpec expectations library")
     (description "Rspec-expectations provides a simple API to express expected
 outcomes of a code example.")
     (home-page "https://github.com/rspec/rspec-expectations")
diff --git a/gnu/packages/sdl.scm b/gnu/packages/sdl.scm
index 50fe010..847cc00 100644
--- a/gnu/packages/sdl.scm
+++ b/gnu/packages/sdl.scm
@@ -232,8 +232,8 @@ MIDI, Ogg Vorbis, and MP3.")
     (source (origin
               (method url-fetch)
               (uri
-               (string-append "http://www.libsdl.org/projects/SDL_net/release/SDL_net-"
-                              version ".tar.gz"))
+               (string-append "http://www.libsdl.org/projects/SDL_net/release"
+                              "/SDL_net-" version ".tar.gz"))
               (sha256
                (base32
                 "1d5c9xqlf4s1c01gzv6cxmg0r621pq9kfgxcg3197xw4p25pljjz"))))
@@ -241,8 +241,8 @@ MIDI, Ogg Vorbis, and MP3.")
     (propagated-inputs `(("sdl" ,sdl)))
     (native-inputs `(("pkg-config" ,pkg-config)))
     (synopsis "SDL networking library")
-    (description "SDL_net is a small, cross-platform networking library for
-SDL.")
+    (description
+     "SDL_net is a small, cross-platform networking library for SDL.")
     (home-page "http://www.libsdl.org/projects/SDL_net/")
     (license zlib)))
 
@@ -253,8 +253,8 @@ SDL.")
     (source (origin
              (method url-fetch)
              (uri
-              (string-append "http://www.libsdl.org/projects/SDL_ttf/release/SDL_ttf-"
-                             version ".tar.gz"))
+              (string-append "http://www.libsdl.org/projects/SDL_ttf/release"
+                             "/SDL_ttf-" version ".tar.gz"))
              (sha256
               (base32
                "1dydxd4f5kb1288i5n5568kdk2q7f8mqjr7i7sd33nplxjaxhk3j"))))
diff --git a/gnu/packages/slang.scm b/gnu/packages/slang.scm
index 577d7af..16054f2 100644
--- a/gnu/packages/slang.scm
+++ b/gnu/packages/slang.scm
@@ -61,11 +61,11 @@
     (synopsis "Library for interactive applications and extensibility")
     (description
      "S-Lang is a multi-platform programmer's library designed to allow a
-developer to create robust multi-platform software. It provides facilities
+developer to create robust multi-platform software.  It provides facilities
 required by interactive applications such as display/screen management,
-keyboard input, keymaps, and so on. The most exciting feature of the library
+keyboard input, keymaps, and so on.  The most exciting feature of the library
 is the slang interpreter that may be easily embedded into a program to make it
-extensible. While the emphasis has always been on the embedded nature of the
+extensible.  While the emphasis has always been on the embedded nature of the
 interpreter, it may also be used in a stand-alone fashion through the use of
 slsh, which is part of the S-Lang distribution.")
     (license license:gpl2+)))
diff --git a/gnu/packages/slim.scm b/gnu/packages/slim.scm
index c163f4f..8e25a5a 100644
--- a/gnu/packages/slim.scm
+++ b/gnu/packages/slim.scm
@@ -91,5 +91,5 @@ Features included: PNG and XFT support for alpha transparency and antialiased
 fonts, External themes support, Configurable runtime options: X server --
 login / shutdown / reboot commands, Single (GDM-like) or double (XDM-like)
 input control, Can load predefined user at startup, Configurable welcome /
-shutdown messages, Random theme selection")
+shutdown messages, Random theme selection.")
     (license l:gpl2)))
diff --git a/gnu/packages/smalltalk.scm b/gnu/packages/smalltalk.scm
index c9d733d..81b3c18 100644
--- a/gnu/packages/smalltalk.scm
+++ b/gnu/packages/smalltalk.scm
@@ -47,9 +47,9 @@
                        (("@LIBC_SO_DIR@")  (string-append libc "/lib")))))
                 %standard-phases)))
     (home-page "https://www.gnu.org/software/smalltalk/")
-    (synopsis "Smalltalk environment")
+    (synopsis "Implementation of Smalltalk language")
     (description
-     "GNU Smalltalk is a free implementation of the Smalltalk language.  It
-implements the ANSI standard for the language and also includes extra classes
-such as ones for networking and GUI programming.")
+     "GNU Smalltalk is a free implementation of the Smalltalk-80 language.
+It implements the ANSI standard for the language and also includes extra
+classes such as ones for networking and GUI programming.")
     (license gpl2+)))
diff --git a/gnu/packages/telephony.scm b/gnu/packages/telephony.scm
index 8f3d597..858d7ef 100644
--- a/gnu/packages/telephony.scm
+++ b/gnu/packages/telephony.scm
@@ -124,7 +124,7 @@ to initiate and control SIP sessions.")
    (version "4.1.0")
    (source (origin
             (method url-fetch)
-            (uri (string-append 
+            (uri (string-append
                   "http://download.savannah.gnu.org/releases/exosip/libeXosip2-"
                   version ".tar.gz"))
             (sha256 (base32
@@ -133,11 +133,11 @@ to initiate and control SIP sessions.")
    (inputs `(("osip" ,osip)))
    (synopsis "Sip abstraction library")
    (description "EXosip is a library that hides the complexity of using the
-SIP protocol for mutlimedia session establishement.  This protocol is mainly to
+SIP protocol for multimedia session establishment.  This protocol is mainly to
 be used by VoIP telephony applications (endpoints or conference server) but
-might be also usefull for any application that wish to establish sessions like
+might be also useful for any application that wish to establish sessions like
 multiplayer games.")
-   (license gpl2+) 
+   (license gpl2+)
    ;; (plus OpenSSL linking exception)
    ;; http://git.savannah.gnu.org/cgit/exosip.git/plain/LICENSE.OpenSSL
     (home-page "http://savannah.nongnu.org/projects/exosip")))
@@ -153,23 +153,23 @@ multiplayer games.")
             (sha256 (base32
                      "0117c5iid1vrwl7sl3pys2jlinpmx2vfp8wcdwk93m7cc6k9793b"))))
    (build-system gnu-build-system)
-   ;; The configure.ac uses pkg-config but in a kludgy way which breaks when 
+   ;; The configure.ac uses pkg-config but in a kludgy way which breaks when
    ;; cross-compiling.  Among other issues there the program name "pkg-config"
    ;; is hard coded instead of respecting the PKG_CONFIG environment variable.
-   ;; Fortunately we can avoid the use of pkg-config and set the dependency 
-   ;; flags ourselves. 
-   (arguments `(#:configure-flags 
+   ;; Fortunately we can avoid the use of pkg-config and set the dependency
+   ;; flags ourselves.
+   (arguments `(#:configure-flags
                 `("--without-pkg-config"
-                  ,(string-append "UCOMMON_CFLAGS=-I" 
+                  ,(string-append "UCOMMON_CFLAGS=-I"
                                   (assoc-ref %build-inputs "ucommon") "/include")
                   "UCOMMON_LIBS=-lusecure -lucommon -lrt -ldl -lpthread"
-                  ,(string-append "LIBOSIP2_CFLAGS=-I" 
+                  ,(string-append "LIBOSIP2_CFLAGS=-I"
                                   (assoc-ref %build-inputs "osip") "/include")
                   "LIBOSIP2_LIBS=-losipparser2 -losip2"
-                  ,(string-append "--sysconfdir=" (assoc-ref %outputs "out") 
+                  ,(string-append "--sysconfdir=" (assoc-ref %outputs "out")
                                   "/etc")
                   "EXOSIP2_LIBS=-leXosip2"
-                  ,(string-append "EXOSIP2_CFLAGS=-I" 
+                  ,(string-append "EXOSIP2_CFLAGS=-I"
                                   (assoc-ref %build-inputs "exosip")
                                   "/include"))))
    (inputs `(("ucommon" ,ucommon)
diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm
index 3d0000e..68771c7 100644
--- a/gnu/packages/tls.scm
+++ b/gnu/packages/tls.scm
@@ -226,7 +226,7 @@ required structures.")
            (files '("etc/ssl/certs/ca-certificates.crt")))))
    (synopsis "SSL/TLS implementation")
    (description
-    "OpenSSL is an implementation of SSL/TLS")
+    "OpenSSL is an implementation of SSL/TLS.")
    (license license:openssl)
    (home-page "http://www.openssl.org/")))
 
diff --git a/gnu/packages/tmux.scm b/gnu/packages/tmux.scm
index 9cb35bb..a5c0bb2 100644
--- a/gnu/packages/tmux.scm
+++ b/gnu/packages/tmux.scm
@@ -46,6 +46,6 @@
     (description
      "tmux is a terminal multiplexer: it enables a number of terminals (or
 windows), each running a separate program, to be created, accessed, and
-controlled from a single screen. tmux may be detached from a screen and
+controlled from a single screen.  tmux may be detached from a screen and
 continue running in the background, then later reattached.")
     (license isc)))
diff --git a/gnu/packages/tre.scm b/gnu/packages/tre.scm
index 1a1aa02..721a350 100644
--- a/gnu/packages/tre.scm
+++ b/gnu/packages/tre.scm
@@ -31,7 +31,7 @@
     (source
       (origin
         (method url-fetch)
-        (uri       
+        (uri
           (string-append "http://laurikari.net/tre/" name "-" version
                          ".tar.bz2"))
         (sha256
@@ -52,6 +52,6 @@
     (synopsis "Approximate regex matching library and agrep utility")
     (description "Superset of the POSIX regex API, enabling approximate
 matching.  Also ships a version of the agrep utility which behaves similar to
-grep but features ineaxct matching.")
+grep but features inexact matching.")
     (home-page "http://laurikari.net/tre")
     (license bsd-2)))
diff --git a/gnu/packages/unrtf.scm b/gnu/packages/unrtf.scm
index 6c578ce..162dec7 100644
--- a/gnu/packages/unrtf.scm
+++ b/gnu/packages/unrtf.scm
@@ -64,7 +64,7 @@
     (home-page "http://www.gnu.org/software/unrtf")
     (synopsis "Convert Rich Text Format documents to other formats")
     (description
-     "GNU UnRTF converts text documents from RTF to HTML, LaTeX, or troff. 
+     "GNU UnRTF converts text documents from RTF to HTML, LaTeX, or troff.
 It supports changes in font characteristics, underlines and strikethroughs,
 superscripts and subscripts, and more.")
     (license gpl2+)))
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index e3498ee..8dc454d 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -563,19 +563,25 @@ and offers an easy and intuitive interface.")
     (synopsis "HTTP and WebDAV client library")
     (description "Neon is an HTTP and WebDAV client library, with a
 C interface.  Features:
-High-level wrappers for common HTTP and WebDAV operations (GET, MOVE,
-DELETE, etc.);
-low-level interface to the HTTP request/response engine, allowing the use
-of arbitrary HTTP methods, headers, etc.;
-authentication support including Basic and Digest support, along with
-GSSAPI-based Negotiate on Unix, and SSPI-based Negotiate/NTLM on Win32;
-SSL/TLS support using OpenSSL or GnuTLS, exposing an abstraction layer for
+
+  • High-level wrappers for common HTTP and WebDAV operations (GET,
+MOVE, DELETE, etc.).
+
+  • Low-level interface to the HTTP request/response engine, allowing the use
+of arbitrary HTTP methods, headers, etc.
+
+  • Authentication support including Basic and Digest support, along with
+GSSAPI-based Negotiate on Unix, and SSPI-based Negotiate/NTLM on Win32.
+
+  • SSL/TLS support using OpenSSL or GnuTLS, exposing an abstraction layer for
 verifying server certificates, handling client certificates, and examining
-certificate properties, smartcard-based client certificates are also
-supported via a PKCS#11 wrapper interface;
-abstract interface to parsing XML using libxml2 or expat, and wrappers for
-simplifying handling XML HTTP response bodies;
-WebDAV metadata support, wrappers for PROPFIND and PROPPATCH to simplify
+certificate properties, smartcard-based client certificates are also supported
+via a PKCS#11 wrapper interface.
+
+  • Abstract interface to parsing XML using libxml2 or expat, and wrappers for
+simplifying handling XML HTTP response bodies.
+
+  • WebDAV metadata support, wrappers for PROPFIND and PROPPATCH to simplify
 property manipulation.")
     (license gpl2+))) ; for documentation and tests; source under lgpl2.0+
 
@@ -791,7 +797,7 @@ code control system SCCS.  This allows old code still under that system to be
 accessed and migrated on modern systems.")
     (license gpl3+)))
 
-;; This package can unfortunately work only in -TEST mode, since Aegis 
+;; This package can unfortunately work only in -TEST mode, since Aegis
 ;; requires that it is installed setuid root.
 (define-public aegis
   (package
@@ -799,7 +805,7 @@ accessed and migrated on modern systems.")
     (version "4.24")
     (source (origin
               (method url-fetch)
-              (uri (string-append "mirror://sourceforge/aegis/aegis-" 
+              (uri (string-append "mirror://sourceforge/aegis/aegis-"
                                   version ".tar.gz"))
               (sha256
                (base32
@@ -822,17 +828,17 @@ accessed and migrated on modern systems.")
        ("groff" ,groff)
        ("perl" ,perl)
        ;; Various tests require the following:
-       ("cvs" ,cvs) 
+       ("cvs" ,cvs)
        ("flex" ,flex)
        ("cook" ,cook)
        ("subversion" ,subversion)
        ("rcs" ,rcs)
        ("ed" ,ed)))
     (arguments
-     `(#:configure-flags (list "--with-no-aegis-configured" 
+     `(#:configure-flags (list "--with-no-aegis-configured"
                                "--sharedstatedir=/var/com/aegis")
        #:parallel-build? #f ; There are some nasty racy rules in the Makefile.
-       #:phases 
+       #:phases
         (alist-cons-before
          'configure 'pre-conf
          (lambda _
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index 9472b4e..f748528 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -296,8 +296,8 @@ canvas operations.")
     (build-system gnu-build-system)
     (home-page "http://www.videolan.org/developers/libdca.html")
     (synopsis "DTS Coherent Acoustics decoder")
-    (description "libdca is a library for decoding DTS Coherent Acoustics
-streams.")
+    (description
+     "libdca is a library for decoding DTS Coherent Acoustics streams.")
     (license license:gpl2+)))
 
 (define-public libdv
diff --git a/gnu/packages/vpn.scm b/gnu/packages/vpn.scm
index e4f0528..d866214 100644
--- a/gnu/packages/vpn.scm
+++ b/gnu/packages/vpn.scm
@@ -153,5 +153,5 @@ and probably others.")
 for creating secure point-to-point or site-to-site connections in routed or
 bridged configurations and remote access facilities.  It uses a custom
 security protocol that utilizes SSL/TLS for key exchange.  It is capable of
-traversing network address translators (NATs) and firewalls. ")
+traversing network address translators (NATs) and firewalls.")
     (license license:gpl2)))
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 99a176f..e0d5716 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -364,7 +364,7 @@ files, checks if a given domain is a public suffix, provides immediate cookie
 domain verification, finds the longest public part of a given domain, finds
 the shortest private part of a given domain, works with international
 domains (UTF-8 and IDNA2008 Punycode), is thread-safe, and handles IDNA2008
-UTS#46")
+UTS#46.")
     (license l:x11)))
 
 (define-public tidy
@@ -432,7 +432,7 @@ used to validate and fix HTML data.")
     ;; All of the below are used to generate the documentation
     ;; (Should they be propagated inputs of asciidoc ??)
     (native-inputs `(("asciidoc" ,asciidoc)
-                     ("libxml2" ,libxml2) 
+                     ("libxml2" ,libxml2)
                      ("docbook-xml" ,docbook-xml)
                      ("docbook-xsl" ,docbook-xsl)
                      ("libxslt" ,libxslt)))
@@ -919,8 +919,8 @@ when the dispatch type is first seen in your application.")
      ("perl-try-tiny" ,perl-try-tiny)))
   (home-page "http://search.cpan.org/dist/Catalyst-Model-DBIC-Schema")
   (synopsis "DBIx::Class::Schema Model Class")
-  (description "This is a Catalyst Model for DBIx::Class::Schema-based
-Models.")
+  (description
+   "This is a Catalyst Model for DBIx::Class::Schema-based Models.")
   (license (package-license perl))))
 
 (define-public perl-catalyst-plugin-accesslog
@@ -978,7 +978,7 @@ for you.  It will work even with Catalyst debug logging turned off.")
     (home-page "http://search.cpan.org/dist/Catalyst-Plugin-Authentication")
     (synopsis "Infrastructure plugin for the Catalyst authentication framework")
     (description "The authentication plugin provides generic user support for
-Catalyst apps. It is the basis for both authentication (checking the user is
+Catalyst apps.  It is the basis for both authentication (checking the user is
 who they claim to be), and authorization (allowing the user to do what the
 system authorises them to do).")
     (license (package-license perl))))
@@ -1032,8 +1032,8 @@ authorization for Catalyst based on Catalyst::Plugin::Authentication.")
        ("perl-http-date" ,perl-http-date)))
     (home-page "http://search.cpan.org/dist/Catalyst-Plugin-Captcha")
     (synopsis "Captchas for Catalyst")
-    (description "This plugin creates and validates Captcha images for
-Catalyst.")
+    (description
+     "This plugin creates and validates Captcha images for Catalyst.")
     (license (package-license perl))))
 
 (define-public perl-catalyst-plugin-configloader
@@ -1147,7 +1147,7 @@ cookie mechanism.")
        ("perl-path-class" ,perl-path-class)))
     (home-page
      "http://search.cpan.org/dist/Catalyst-Plugin-Session-Store-FastMmap")
-    (synopsis "FastMmap session storage backend.")
+    (synopsis "FastMmap session storage backend")
     (description "Catalyst::Plugin::Session::Store::FastMmap is a fast session
 storage plugin for Catalyst that uses an mmap'ed file to act as a shared
 memory interprocess cache.  It is based on Cache::FastMmap.")
@@ -1326,7 +1326,7 @@ replaced with the contents of the X-Request-Base header.")
     (synopsis "Download data in many formats")
     (description "The purpose of this module is to provide a method for
 downloading data into many supportable formats.  For example, downloading a
-table based report in a variety of formats (CSV, HTML, etc.). ")
+table based report in a variety of formats (CSV, HTML, etc.).")
     (license (package-license perl))))
 
 (define-public perl-catalyst-view-json
@@ -1376,8 +1376,8 @@ stash data in JSON format.")
      ("perl-template-toolkit" ,perl-template-toolkit)))
   (home-page "http://search.cpan.org/dist/Catalyst-View-TT")
   (synopsis "Template View Class")
-  (description "This module is a Catalyst view class for the Template
-Toolkit.")
+  (description
+   "This module is a Catalyst view class for the Template Toolkit.")
   (license (package-license perl))))
 
 (define-public perl-catalystx-component-traits
@@ -1566,13 +1566,13 @@ for files and urls.")
     (synopsis "Perl locale encoding determination")
     (description
      "The POSIX locale system is used to specify both the language
-conventions requested by the user and the preferred character set to consume
-and output.  The Encode::Locale module looks up the charset and encoding
-(called a CODESET in the locale jargon) and arranges for the Encode module
-to know this encoding under the name \"locale\".  It means bytes obtained
-from the environment can be converted to Unicode strings by calling
-Encode::encode(locale => $bytes) and converted back again with
-Encode::decode(locale => $string).")
+conventions requested by the user and the preferred character set to
+consume and output.  The Encode::Locale module looks up the charset and
+encoding (called a CODESET in the locale jargon) and arranges for the
+Encode module to know this encoding under the name \"locale\".  It means
+bytes obtained from the environment can be converted to Unicode strings
+by calling Encode::encode(locale => $bytes) and converted back again
+with Encode::decode(locale => $string).")
     (home-page "http://search.cpan.org/~gaas/Encode-Locale/")))
 
 (define-public perl-file-listing
@@ -1944,8 +1944,8 @@ supported.")
     (build-system perl-build-system)
     (home-page "http://search.cpan.org/dist/HTTP-Parser-XS")
     (synopsis "Fast HTTP request parser")
-    (description "HTTP::Parser::XS is a fast, primitive HTTP request/response
-parser.")
+    (description
+     "HTTP::Parser::XS is a fast, primitive HTTP request/response parser.")
     (license (package-license perl))))
 
 (define-public perl-http-request-ascgi
@@ -2297,7 +2297,7 @@ or to multiple server ports.")
      `(("perl-io-socket-ssl" ,perl-io-socket-ssl)))
     (home-page "http://search.cpan.org/dist/Net-SMTP-SSL")
     (synopsis "SSL support for Net::SMTP")
-    (description "SSL support for Net::SMTP")
+    (description "SSL support for Net::SMTP.")
     (license (package-license perl))))
 
 (define-public perl-plack
@@ -2406,8 +2406,8 @@ can say what method it actually meant.")
     (home-page
      "http://search.cpan.org/dist/Plack-Middleware-RemoveRedundantBody")
     (synopsis "Plack::Middleware which removes body for HTTP response")
-    (description "This module removes the body in an HTTP response if it's not
-required.")
+    (description
+     "This module removes the body in an HTTP response if it's not required.")
     (license (package-license perl))))
 
 (define-public perl-plack-middleware-reverseproxy
diff --git a/gnu/packages/wget.scm b/gnu/packages/wget.scm
index d1413a7..f4ccb66 100644
--- a/gnu/packages/wget.scm
+++ b/gnu/packages/wget.scm
@@ -56,7 +56,7 @@
     (synopsis "Non-interactive command-line utility for downloading files")
     (description
      "GNU Wget is a non-interactive tool for fetching files using the HTTP,
-HTTPS and FTP protocols.  It can resume interrupted downloads, use filename
+HTTPS and FTP protocols.  It can resume interrupted downloads, use file name
 wild cards, supports proxies and cookies, and it can convert absolute links
 in downloaded documents to relative links.")
     (license gpl3+))) ; some files are under GPLv2+
diff --git a/gnu/packages/wordnet.scm b/gnu/packages/wordnet.scm
index 58831c4..1823a62 100644
--- a/gnu/packages/wordnet.scm
+++ b/gnu/packages/wordnet.scm
@@ -79,9 +79,9 @@
     (synopsis "Lexical database for the English language")
     (description
      "WordNet® is a large lexical database of English.  Nouns, verbs,
-adjectives and adverbs are grouped into sets of cognitive synonyms
-(synsets), each expressing a distinct concept.  Synsets are interlinked by
-means of conceptual-semantic and lexical relations.  The resulting network of
+adjectives and adverbs are grouped into sets of cognitive synonyms (synsets),
+each expressing a distinct concept.  Synsets are interlinked by means of
+conceptual-semantic and lexical relations.  The resulting network of
 meaningfully related words and concepts can be navigated with the browser.
 WordNet is also freely and publicly available for download.  WordNet's
 structure makes it a useful tool for computational linguistics and natural
diff --git a/gnu/packages/xdisorg.scm b/gnu/packages/xdisorg.scm
index f928aa1..1ed33e1 100644
--- a/gnu/packages/xdisorg.scm
+++ b/gnu/packages/xdisorg.scm
@@ -279,7 +279,7 @@ System style license, and has no special dependencies.")
      "Wmctrl allows to interact with an X window manager that is compatible
 with the EWMH/NetWM specification.  It can query the window manager for
 information, and request for certain window management actions (resize and
-move windows, switch between desktops, etc.)")
+move windows, switch between desktops, etc.).")
     (license license:gpl2+)))
 
 (define-public scrot
diff --git a/gnu/packages/xfce.scm b/gnu/packages/xfce.scm
index 8189418..5c8b3a6 100644
--- a/gnu/packages/xfce.scm
+++ b/gnu/packages/xfce.scm
@@ -157,7 +157,7 @@ storage system.")
     (synopsis "Widgets library for Xfce")
     (description
      "Libxfce4ui is the replacement of the old libxfcegui4 library.  It is used
-to share commonly used Xfce widgets amoung the Xfce applications.")
+to share commonly used Xfce widgets among the Xfce applications.")
     (license lgpl2.0+)))
 
 (define-public exo
@@ -497,7 +497,7 @@ fast.")
      "Thunar-volman is an extension for the Thunar File Manager, which enables
 automatic management of removable drives and media.  For example, if
 thunar-volman is installed and configured properly, and you plug in your
-digitcal camera, it will automatically spawn your preferred photo application
+digital camera, it will automatically spawn your preferred photo application
 and import the new pictures from your camera.")
     (license gpl2+)))
 
diff --git a/gnu/packages/xiph.scm b/gnu/packages/xiph.scm
index a1a3f3f..913a05d 100644
--- a/gnu/packages/xiph.scm
+++ b/gnu/packages/xiph.scm
@@ -171,23 +171,40 @@ stereo encoding, and voice activity detection.")
      "Libao is a cross-platform audio library that allows programs to
 output audio using a simple API on a wide variety of platforms.
 It currently supports:
-Null output (handy for testing without a sound device),
-WAV files,
-AU files,
-RAW files,
-OSS (Open Sound System, used on Linux and FreeBSD),
-ALSA (Advanced Linux Sound Architecture),
-aRts (Analog RealTime Synth, used by KDE),
-PulseAudio (next generation GNOME sound server),
-esd (EsounD or Enlightened Sound Daemon),
-Mac OS X,
-Windows (98 and later),
-AIX,
-Sun/NetBSD/OpenBSD,
-IRIX,
-NAS (Network Audio Server),
-RoarAudio (Modern, multi-OS, networked Sound System),
-OpenBSD's sndio.")
+
+  • Null output (handy for testing without a sound device),
+
+  • WAV files,
+
+  • AU files,
+
+  • RAW files,
+
+  • OSS (Open Sound System, used on Linux and FreeBSD),
+
+  • ALSA (Advanced Linux Sound Architecture),
+
+  • aRts (Analog RealTime Synth, used by KDE),
+
+  • PulseAudio (next generation GNOME sound server),
+
+  • esd (EsounD or Enlightened Sound Daemon),
+
+  • Mac OS X,
+
+  • Windows (98 and later),
+
+  • AIX,
+
+  • Sun/NetBSD/OpenBSD,
+
+  • IRIX,
+
+  • NAS (Network Audio Server),
+
+  • RoarAudio (Modern, multi-OS, networked Sound System),
+
+  • OpenBSD's sndio.")
     (license license:gpl2+)
     (home-page "http://www.xiph.org/ao/")))
 
@@ -276,12 +293,16 @@ Kate stream.")
     "Ogg vorbis is a non-proprietary, patent-and-royalty-free,
 general-purpose compressed audio format.
 
-The package vorbis-tools contains
-ogg123,  an ogg vorbis command line audio player;
-oggenc,  the ogg vorbis encoder;
-oggdec,  a simple, portable command line decoder (to wav and raw);
-ogginfo, to obtain information (tags, bitrate, length, etc.) about
-         an ogg vorbis file.")
+The package vorbis-tools contains:
+
+  • ogg123: an ogg vorbis command line audio player;
+
+  • oggenc: the ogg vorbis encoder;
+
+  • oggdec: a simple, portable command line decoder (to wav and raw);
+
+  • ogginfo: to obtain information (tags, bitrate, length, etc.) about
+an ogg vorbis file.")
    (license license:gpl2)
    (home-page "http://xiph.org/vorbis/")))
 
@@ -318,12 +339,12 @@ incorporated technology from Skype's SILK codec and Xiph.Org's CELT codec.")
                     "ftp://ftp.mozilla.org/pub/mozilla.org/opus/opus-tools-"
                     version ".tar.gz"))
               (sha256
-               (base32 
+               (base32
                 "0fk4nknvl111k89j5yckmyrh6b2wvgyhrqfncp7rig3zikbkv1xi"))))
     (build-system gnu-build-system)
     (arguments
      ;; The package developers misuse pkg-config such that it doesn't work
-     ;; when cross compiling.  Therefore we avoid it completly and set the 
+     ;; when cross compiling.  Therefore we avoid it completly and set the
      ;; necessary flags ourselves.
      `(#:configure-flags (list (string-append "CFLAGS=-I"
                                               (assoc-ref %build-inputs "libogg")
@@ -333,11 +354,11 @@ incorporated technology from Skype's SILK codec and Xiph.Org's CELT codec.")
     (inputs `(("libogg" ,libogg)
               ("opus" ,opus)
               ("flac" ,flac)))
-    (synopsis "Command line utilities to encode, inspect, and decode .opus
-files")
+    (synopsis
+     "Command line utilities to encode, inspect, and decode .opus files")
     (description "Opus is a royalty-free, highly versatile audio codec.
 Opus-tools provide command line utilities for creating, inspecting and
-decoding .opus files")
+decoding .opus files.")
     (license license:bsd-3)
     (home-page "http://www.opus-codec.org")))
 
diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm
index 0fc51c5..1f25559 100644
--- a/gnu/packages/xml.scm
+++ b/gnu/packages/xml.scm
@@ -84,8 +84,8 @@ things the parser might find in the XML document (like start tags).")
                                 (file-type 'regular))))
     (search-paths native-search-paths)
     (description
-     "Libxml2 is the XML C parser and toolkit developed for the Gnome project
-(but it is usable outside of the Gnome platform).")
+     "Libxml2 is the XML C parser and toolkit developed for the Gnome
+project (but it is usable outside of the Gnome platform).")
     (license license:x11)))
 
 (define-public python-libxml2
@@ -189,8 +189,7 @@ given at XML::Parser creation time.")
     (license (package-license perl))
     (synopsis "Perl SAX parser using XML::Parser")
     (description
-     "XML::Parser::PerlSAX is a PerlSAX parser using the XML::Parser
-module.")
+     "XML::Parser::PerlSAX is a PerlSAX parser using the XML::Parser module.")
     (home-page "http://search.cpan.org/~kmacleod/libxml-perl/lib/XML/Parser/PerlSAX.pm")))
 
 (define-public perl-xml-libxml
@@ -214,9 +213,9 @@ module.")
     (home-page "http://search.cpan.org/dist/XML-LibXML")
     (synopsis "Perl interface to libxml2")
     (description "This module implements a Perl interface to the libxml2
-library which provides interfaces for parsing and manipulating XML files. This
-module allows Perl programmers to make use of the highly capable validating
-XML parser and the high performance DOM implementation.")
+library which provides interfaces for parsing and manipulating XML files.
+This module allows Perl programmers to make use of the highly capable
+validating XML parser and the high performance DOM implementation.")
     (license (package-license perl))))
 
 (define-public perl-xml-namespacesupport
-- 
2.4.3


^ permalink raw reply related	[flat|nested] 49+ messages in thread

* Re: [PATCH] gnu packages: Clean up synopses and descriptions.
  2015-07-16 11:17 [PATCH] gnu packages: Clean up synopses and descriptions Alex Kost
  2015-07-16  9:40 ` Eric Bavier
@ 2015-07-16 11:52 ` Mathieu Lirzin
  2015-07-16 15:50   ` Ludovic Courtès
  2015-07-16 16:03   ` [PATCH] " Alex Kost
  1 sibling, 2 replies; 49+ messages in thread
From: Mathieu Lirzin @ 2015-07-16 11:52 UTC (permalink / raw)
  To: Alex Kost; +Cc: guix-devel

Alex Kost <alezost@gmail.com> writes:

> Please pay attention to the commit message.  Is it acceptable?

:)

For the typos and polishing fixes, I would prefer that the commits were
done in a module related way. So IMO It would be better to have one
commit per-file.

Concerning the "•", I think no decision has been made yet. I like
unicode characters, but when you haven't a way to easily type them it's
painful. If we decide to use that It should be documented in the manual
as the same time it is introduced. As a consequence It would deserve a
proper patch (even if I don't like the global idea so much).

--
Mathieu Lirzin

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PATCH] gnu packages: Clean up synopses and descriptions.
  2015-07-16 11:52 ` Mathieu Lirzin
@ 2015-07-16 15:50   ` Ludovic Courtès
  2015-07-16 21:33     ` Mathieu Lirzin
  2015-07-17 12:35     ` [PATCHES] gnu packages: Clean up synopses and descriptions Alex Kost
  2015-07-16 16:03   ` [PATCH] " Alex Kost
  1 sibling, 2 replies; 49+ messages in thread
From: Ludovic Courtès @ 2015-07-16 15:50 UTC (permalink / raw)
  To: Mathieu Lirzin; +Cc: guix-devel, Alex Kost

Mathieu Lirzin <mthl@openmailbox.org> skribis:

> For the typos and polishing fixes, I would prefer that the commits were
> done in a module related way. So IMO It would be better to have one
> commit per-file.

I think one per file would be overkill (and not really helpful
review-wise.)  One per fix would be nice though: one commit for bullet
lists, one for typos, etc.

But I understand it would be boring to do that now that you’ve come up
with that big patch, so either way is fine with me.

> Concerning the "•", I think no decision has been made yet. I like
> unicode characters, but when you haven't a way to easily type them it's
> painful. If we decide to use that It should be documented in the manual
> as the same time it is introduced. As a consequence It would deserve a
> proper patch (even if I don't like the global idea so much).

What are your concerns and what would you prefer?  (I was left with the
impression that there was a rough consensus in the other thread, but
surely there’s a bias.)

In Emacs it’s quite easily typed (C-x 8 RET etc.), and at worst people
can copy/paste it.  Few descriptions have bullet lists anyway.

Thanks,
Ludo’.

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PATCH] gnu packages: Clean up synopses and descriptions.
  2015-07-16  9:40 ` Eric Bavier
@ 2015-07-16 15:55   ` Alex Kost
  2015-07-16 19:08     ` Ludovic Courtès
  0 siblings, 1 reply; 49+ messages in thread
From: Alex Kost @ 2015-07-16 15:55 UTC (permalink / raw)
  To: Eric Bavier; +Cc: guix-devel

Eric Bavier (2015-07-16 12:40 +0300) wrote:

> On Thu, 16 Jul 2015 14:17:22 +0300
> Alex Kost <alezost@gmail.com> wrote:
>
>> --- a/gnu/packages/base.scm
>> +++ b/gnu/packages/base.scm
>> @@ -58,7 +58,7 @@
>>              (sha256
>>               (base32
>> "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
>> (build-system gnu-build-system)
>> -   (synopsis "Hello, GNU world: An example GNU package")
>> +   (synopsis "Example GNU package")
>
> I have not looked over then entire patch, but this one caught my eye.
> We need to make sure that any changes you make here will not be
> expediently overwritten by an invocation of `make sync-descriptions`.
> I believe this has happened in the past already.

I changed this synopsis because "guix lint" doesn't like when the first
word of a synopsis is the package name.

-- 
Alex

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PATCH] gnu packages: Clean up synopses and descriptions.
  2015-07-16 11:52 ` Mathieu Lirzin
  2015-07-16 15:50   ` Ludovic Courtès
@ 2015-07-16 16:03   ` Alex Kost
  2015-07-16 20:02     ` Mathieu Lirzin
  1 sibling, 1 reply; 49+ messages in thread
From: Alex Kost @ 2015-07-16 16:03 UTC (permalink / raw)
  To: Mathieu Lirzin; +Cc: guix-devel

Mathieu Lirzin (2015-07-16 14:52 +0300) wrote:

> For the typos and polishing fixes, I would prefer that the commits were
> done in a module related way. So IMO It would be better to have one
> commit per-file.

IMHO it is better to have a single commit fixing 20 typos than 20
commits fixing one typo.

> Concerning the "•", I think no decision has been made yet. I like
> unicode characters, but when you haven't a way to easily type them it's
> painful. If we decide to use that It should be documented in the manual
> as the same time it is introduced. As a consequence It would deserve a
> proper patch (even if I don't like the global idea so much).

How can we understand when a decision is made?  I had an impression
(perhaps wrong) that people are not going to discuss it.  Anyway if we
decide that there is a better choice for list markers, we can easily fix
it by replacing "  •" with "-" for example.  But I agree with you that
it (and any other convention) should be documented.

-- 
Alex

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PATCH] gnu packages: Clean up synopses and descriptions.
  2015-07-16 15:55   ` Alex Kost
@ 2015-07-16 19:08     ` Ludovic Courtès
  2015-07-17 12:41       ` Alex Kost
  0 siblings, 1 reply; 49+ messages in thread
From: Ludovic Courtès @ 2015-07-16 19:08 UTC (permalink / raw)
  To: Alex Kost; +Cc: guix-devel

Alex Kost <alezost@gmail.com> skribis:

> Eric Bavier (2015-07-16 12:40 +0300) wrote:
>
>> On Thu, 16 Jul 2015 14:17:22 +0300
>> Alex Kost <alezost@gmail.com> wrote:
>>
>>> --- a/gnu/packages/base.scm
>>> +++ b/gnu/packages/base.scm
>>> @@ -58,7 +58,7 @@
>>>              (sha256
>>>               (base32
>>> "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
>>> (build-system gnu-build-system)
>>> -   (synopsis "Hello, GNU world: An example GNU package")
>>> +   (synopsis "Example GNU package")
>>
>> I have not looked over then entire patch, but this one caught my eye.
>> We need to make sure that any changes you make here will not be
>> expediently overwritten by an invocation of `make sync-descriptions`.
>> I believe this has happened in the past already.
>
> I changed this synopsis because "guix lint" doesn't like when the first
> word of a synopsis is the package name.

The problem is that this rule sometimes conflicts with the
‘gnu-description’ checker (aka. ‘make sync-descriptions’), which checks
upstream GNU descriptions.

When such conflicts happen, we should give precedence to the GNU
descriptions.

Ludo’.

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PATCH] gnu packages: Clean up synopses and descriptions.
  2015-07-16 16:03   ` [PATCH] " Alex Kost
@ 2015-07-16 20:02     ` Mathieu Lirzin
  0 siblings, 0 replies; 49+ messages in thread
From: Mathieu Lirzin @ 2015-07-16 20:02 UTC (permalink / raw)
  To: Alex Kost; +Cc: guix-devel

Alex Kost <alezost@gmail.com> writes:

> Mathieu Lirzin (2015-07-16 14:52 +0300) wrote:
>
> IMHO it is better to have a single commit fixing 20 typos than 20
> commits fixing one typo.

Your are right.

> How can we understand when a decision is made?  I had an impression
> (perhaps wrong) that people are not going to discuss it.

I think your impression was right and that a patch is a good way to hear
people like me who don't totally agree without having a strong
opinion :). Sorry if my words sounded like you were illegitimate to
propose this patch, it wasn't my intention.

--
Mathieu Lirzin

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PATCH] gnu packages: Clean up synopses and descriptions.
  2015-07-16 15:50   ` Ludovic Courtès
@ 2015-07-16 21:33     ` Mathieu Lirzin
  2015-07-17 21:18       ` Texinfo in descriptions? Ludovic Courtès
  2015-07-17 12:35     ` [PATCHES] gnu packages: Clean up synopses and descriptions Alex Kost
  1 sibling, 1 reply; 49+ messages in thread
From: Mathieu Lirzin @ 2015-07-16 21:33 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel, Alex Kost

ludo@gnu.org (Ludovic Courtès) writes:

> What are your concerns and what would you prefer?  (I was left with the
> impression that there was a rough consensus in the other thread, but
> surely there’s a bias.)
>
> In Emacs it’s quite easily typed (C-x 8 RET etc.), and at worst people
> can copy/paste it.

My concerns are about the translators, who will have to care about more
formatting (formatted variables are enough :)) and about my impression
that keeping unformatted text can be more easily rendered in different
contexts (guix package, guix web, guix.el and beyond!) but maybe I'm
wrong.

The first (probably stupid) idea that comes to my mind is to transform
the description field into a list of multiple (unformatted) strings and
sexps, where the responsability of the formatting is delegated to the
program that actually displays the descriptions.  For the translator,
the description will appear as 4 independent strings with no special
formatting to take care.

--8<---------------cut here---------------start------------->8---
       (description
        "XKBUtils is a collection of small utilities for X Keyboard (XKB)
 extension to the X11 protocol.  It includes:"
        '(unordered-list        ; Or a better symbol
          "xkbbell: generate XKB bell events;"
          "xkbvleds: display the state of LEDs on an XKB keyboard in a window;"
          "xkbwatch: reports changes in the XKB keyboard state."))
--8<---------------cut here---------------end--------------->8---

or with just nested lists

--8<---------------cut here---------------start------------->8---
       (description
        "XKBUtils is a collection of small utilities for X Keyboard (XKB)
 extension to the X11 protocol.  It includes:"
        '("xkbbell: generate XKB bell events;"
          "xkbvleds: display the state of LEDs on an XKB keyboard in a window;"
          "xkbwatch: reports changes in the XKB keyboard state."))
--8<---------------cut here---------------end--------------->8---


I let more experienced schemers interpret this idea ;).

--
Mathieu Lirzin

^ permalink raw reply	[flat|nested] 49+ messages in thread

* [PATCHES] gnu packages: Clean up synopses and descriptions.
  2015-07-16 15:50   ` Ludovic Courtès
  2015-07-16 21:33     ` Mathieu Lirzin
@ 2015-07-17 12:35     ` Alex Kost
  2015-07-17 21:07       ` Mathieu Lirzin
  2015-07-17 21:30       ` Ludovic Courtès
  1 sibling, 2 replies; 49+ messages in thread
From: Alex Kost @ 2015-07-17 12:35 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel

[-- Attachment #1: Type: text/plain, Size: 1143 bytes --]

Ludovic Courtès (2015-07-16 18:50 +0300) wrote:

> Mathieu Lirzin <mthl@openmailbox.org> skribis:
>
>> For the typos and polishing fixes, I would prefer that the commits were
>> done in a module related way. So IMO It would be better to have one
>> commit per-file.
>
> I think one per file would be overkill (and not really helpful
> review-wise.)  One per fix would be nice though: one commit for bullet
> lists, one for typos, etc.
>
> But I understand it would be boring to do that now that you’ve come up
> with that big patch, so either way is fine with me.

Making several patches is not a problem, and I agree on separating a
patch for lists (especially since there is no agreement on this
question), as for the rest: trailing spaces, single spaces between
sentences, missing periods in the end of sentences and typos seem the
same things for me.

So I'm attaching 2 patches: for lines with leading parenthesis and for
fixing multiple "typos" (in a general meaning).  Changing
synopses/descriptions according to "guix lint" (so no problems with
'gnu-description') and reorganizing lists are not included.


[-- Attachment #2: 0001-gnu-packages-Avoid-description-lines-with-leading.patch --]
[-- Type: text/x-diff, Size: 11412 bytes --]

From 826749cbe4c75cee4cff8b96a5b47bc2687fb7c3 Mon Sep 17 00:00:00 2001
From: Alex Kost <alezost@gmail.com>
Date: Thu, 16 Jul 2015 12:14:13 +0300
Subject: [PATCH 1/2] gnu packages: Avoid description lines with leading "(".

* gnu/packages/curl.scm (curl): Reword description to avoid a line
  beginning with "(" because such lines break font-lock highlighting
  in Emacs.
* gnu/packages/flashing-tools.scm (dfu-programmer): Likewise.
* gnu/packages/games.scm (gnugo): Likewise.
* gnu/packages/gnome.scm (json-glib): Likewise.
* gnu/packages/image.scm (jbig2dec): Likewise.
* gnu/packages/maths.scm (units): Likewise.
* gnu/packages/pdf.scm (mupdf): Likewise.
* gnu/packages/web.scm (perl-encode-locale): Likewise.
* gnu/packages/wordnet.scm (wordnet): Likewise.
* gnu/packages/xml.scm (libxml2):Likewise.
---
 gnu/packages/curl.scm           | 10 +++++-----
 gnu/packages/flashing-tools.scm |  5 +++--
 gnu/packages/games.scm          | 15 ++++++++-------
 gnu/packages/gnome.scm          | 11 ++++++-----
 gnu/packages/image.scm          |  8 ++++----
 gnu/packages/maths.scm          |  8 ++++----
 gnu/packages/pdf.scm            |  4 ++--
 gnu/packages/web.scm            | 14 +++++++-------
 gnu/packages/wordnet.scm        |  6 +++---
 gnu/packages/xml.scm            |  4 ++--
 10 files changed, 44 insertions(+), 41 deletions(-)

diff --git a/gnu/packages/curl.scm b/gnu/packages/curl.scm
index f5cb503..201bdf8 100644
--- a/gnu/packages/curl.scm
+++ b/gnu/packages/curl.scm
@@ -102,10 +102,10 @@
     "curl is a command line tool for transferring data with URL syntax,
 supporting DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP,
 LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet and TFTP.
-curl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading,
-HTTP form based upload, proxies, cookies, user+password authentication
-(Basic, Digest, NTLM, Negotiate, kerberos...), file transfer resume,
-proxy tunneling, and so on")
+curl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP
+form based upload, proxies, cookies, file transfer resume, user+password
+authentication (Basic, Digest, NTLM, Negotiate, kerberos...), proxy
+tunneling, and so on.")
    (license (license:non-copyleft "file://COPYING"
-                       "See COPYING in the distribution."))
+                                  "See COPYING in the distribution."))
    (home-page "http://curl.haxx.se/")))
diff --git a/gnu/packages/flashing-tools.scm b/gnu/packages/flashing-tools.scm
index 648430a..dafe204 100644
--- a/gnu/packages/flashing-tools.scm
+++ b/gnu/packages/flashing-tools.scm
@@ -124,6 +124,7 @@ technique (ISP).")
     (home-page "http://dfu-programmer.github.io/")
     (synopsis "Device firmware update programmer for Atmel chips")
     (description
-     "Dfu-programmer is a multi-platform command-line programmer for Atmel
-(8051, AVR, XMEGA & AVR32) chips with a USB bootloader supporting ISP")
+     "Dfu-programmer is a multi-platform command-line programmer for
+Atmel (8051, AVR, XMEGA & AVR32) chips with a USB bootloader supporting
+ISP.")
     (license gpl2+)))
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 8f495f7..0db555d 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -853,13 +853,14 @@ multi-system game/emulator system.")
     (build-system gnu-build-system)
     (inputs `(("readline" ,readline)))
     (synopsis "Play the game of Go")
-    (description "GNU Go is a program that plays the game of Go, in which
-players place stones on a grid to form territory or capture other stones.
-While it can be played directly from the terminal, rendered in ASCII
-characters, it is also possible to play GNU Go with 3rd party graphical
-interfaces or even in Emacs.  It supports the standard game storage format
-(SGF, Smart Game Format) and inter-process communication format (GMP, Go
-Modem Protocol).")
+    (description
+     "GNU Go is a program that plays the game of Go, in which players
+place stones on a grid to form territory or capture other stones.  While
+it can be played directly from the terminal, rendered in ASCII characters,
+it is also possible to play GNU Go with 3rd party graphical interfaces or
+even in Emacs.  It supports the standard game storage format (SGF, Smart
+Game Format) and inter-process communication format (GMP, Go Modem
+Protocol).")
     (home-page "http://www.gnu.org/software/gnugo/")
     (license license:gpl3+)))
 
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index da8dd87..f205329 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -1777,11 +1777,12 @@ configuration storage systems.")
      `(("glib" ,glib)))                         ;according to json-glib-1.0.pc
     (home-page "https://wiki.gnome.org/Projects/JsonGlib")
     (synopsis "Compiler for the GObject type system")
-    (description "JSON-GLib is a C library based on GLib providing
-serialization and deserialization support for the JavaScript Object Notation
-(JSON) format described by RFC 4627.  It provides parser and generator
-GObject classes and various wrappers for the complex data types employed by
-JSON, such as arrays and objects.")
+    (description
+     "JSON-GLib is a C library based on GLib providing serialization and
+deserialization support for the JavaScript Object Notation (JSON) format
+described by RFC 4627.  It provides parser and generator GObject classes and
+various wrappers for the complex data types employed by JSON, such as arrays
+and objects.")
     (license license:lgpl2.1+)))
 
 (define-public libxklavier
diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm
index 30f3800..84f0396 100644
--- a/gnu/packages/image.scm
+++ b/gnu/packages/image.scm
@@ -264,10 +264,10 @@ arithmetic ops.")
     (build-system gnu-build-system)
     (synopsis "Decoder of the JBIG2 image compression format")
     (description
-      "JBIG2 is designed for lossy or lossless encoding of 'bilevel'
-(1-bit monochrome) images at moderately high resolution, and in
-particular scanned paper documents.  In this domain it is very
-efficient, offering compression ratios on the order of 100:1.
+      "JBIG2 is designed for lossy or lossless encoding of 'bilevel' (1-bit
+monochrome) images at moderately high resolution, and in particular scanned
+paper documents.  In this domain it is very efficient, offering compression
+ratios on the order of 100:1.
 
 This is a decoder only implementation, and currently is in the alpha
 stage, meaning it doesn't completely work yet.  However, it is
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 7eb2f5a..2d651cb 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -90,10 +90,10 @@
    (synopsis "Conversion between thousands of scales")
    (description
     "GNU Units converts numeric quantities between units of measure.  It
-can handle scale changes through adaptive usage of standard scale prefixes
-(micro-, kilo-, etc.).  It can also handle nonlinear conversions such as
-Fahrenheit to Celsius.  Its interpreter is powerful enough to be used
-effectively as a scientific calculator.")
+can handle scale changes through adaptive usage of standard scale
+prefixes (micro-, kilo-, etc.).  It can also handle nonlinear
+conversions such as Fahrenheit to Celsius.  Its interpreter is powerful
+enough to be used effectively as a scientific calculator.")
    (license license:gpl3+)
    (home-page "http://www.gnu.org/software/units/")))
 
diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm
index 5412813..3a426dc 100644
--- a/gnu/packages/pdf.scm
+++ b/gnu/packages/pdf.scm
@@ -424,8 +424,8 @@ but also provides support for other operations such as searching and
 listing the table of contents and hyperlinks.
 
 The library ships with a rudimentary X11 viewer, and a set of command
-line tools for batch rendering (pdfdraw), examining the file structure
-(pdfshow), and rewriting files (pdfclean).")
+line tools for batch rendering (pdfdraw), rewriting files (pdfclean),
+and examining the file structure (pdfshow).")
     (license license:agpl3+)))
 
 (define-public qpdf
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 99a176f..a1d263c 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -1566,13 +1566,13 @@ for files and urls.")
     (synopsis "Perl locale encoding determination")
     (description
      "The POSIX locale system is used to specify both the language
-conventions requested by the user and the preferred character set to consume
-and output.  The Encode::Locale module looks up the charset and encoding
-(called a CODESET in the locale jargon) and arranges for the Encode module
-to know this encoding under the name \"locale\".  It means bytes obtained
-from the environment can be converted to Unicode strings by calling
-Encode::encode(locale => $bytes) and converted back again with
-Encode::decode(locale => $string).")
+conventions requested by the user and the preferred character set to
+consume and output.  The Encode::Locale module looks up the charset and
+encoding (called a CODESET in the locale jargon) and arranges for the
+Encode module to know this encoding under the name \"locale\".  It means
+bytes obtained from the environment can be converted to Unicode strings
+by calling Encode::encode(locale => $bytes) and converted back again
+with Encode::decode(locale => $string).")
     (home-page "http://search.cpan.org/~gaas/Encode-Locale/")))
 
 (define-public perl-file-listing
diff --git a/gnu/packages/wordnet.scm b/gnu/packages/wordnet.scm
index 58831c4..1823a62 100644
--- a/gnu/packages/wordnet.scm
+++ b/gnu/packages/wordnet.scm
@@ -79,9 +79,9 @@
     (synopsis "Lexical database for the English language")
     (description
      "WordNet® is a large lexical database of English.  Nouns, verbs,
-adjectives and adverbs are grouped into sets of cognitive synonyms
-(synsets), each expressing a distinct concept.  Synsets are interlinked by
-means of conceptual-semantic and lexical relations.  The resulting network of
+adjectives and adverbs are grouped into sets of cognitive synonyms (synsets),
+each expressing a distinct concept.  Synsets are interlinked by means of
+conceptual-semantic and lexical relations.  The resulting network of
 meaningfully related words and concepts can be navigated with the browser.
 WordNet is also freely and publicly available for download.  WordNet's
 structure makes it a useful tool for computational linguistics and natural
diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm
index 0fc51c5..66d6d63 100644
--- a/gnu/packages/xml.scm
+++ b/gnu/packages/xml.scm
@@ -84,8 +84,8 @@ things the parser might find in the XML document (like start tags).")
                                 (file-type 'regular))))
     (search-paths native-search-paths)
     (description
-     "Libxml2 is the XML C parser and toolkit developed for the Gnome project
-(but it is usable outside of the Gnome platform).")
+     "Libxml2 is the XML C parser and toolkit developed for the Gnome
+project (but it is usable outside of the Gnome platform).")
     (license license:x11)))
 
 (define-public python-libxml2
-- 
2.4.5


[-- Attachment #3: 0002-gnu-packages-Clean-up-synopses-and-descriptions.patch --]
[-- Type: text/x-diff, Size: 78675 bytes --]

From 71bed1f3c64e8d7a8c5a8345210a74bbe37356a5 Mon Sep 17 00:00:00 2001
From: Alex Kost <alezost@gmail.com>
Date: Fri, 17 Jul 2015 15:16:07 +0300
Subject: [PATCH 2/2] gnu packages: Clean up synopses and descriptions.

* gnu/packages/admin.scm, gnu/packages/algebra.scm, gnu/packages/audio.scm,
  gnu/packages/backup.scm, gnu/packages/base.scm, gnu/packages/bittorrent.scm,
  gnu/packages/code.scm, gnu/packages/compression.scm,
  gnu/packages/databases.scm, gnu/packages/enchant.scm,
  gnu/packages/firmware.scm, gnu/packages/fonts.scm,
  gnu/packages/freedesktop.scm, gnu/packages/games.scm, gnu/packages/gd.scm,
  gnu/packages/gl.scm, gnu/packages/gnome.scm, gnu/packages/gsasl.scm,
  gnu/packages/gstreamer.scm, gnu/packages/gtk.scm, gnu/packages/guile.scm,
  gnu/packages/haskell.scm, gnu/packages/language.scm,
  gnu/packages/lesstif.scm, gnu/packages/libreoffice.scm,
  gnu/packages/linux.scm, gnu/packages/llvm.scm, gnu/packages/maths.scm,
  gnu/packages/mcrypt.scm, gnu/packages/mit-krb5.scm, gnu/packages/mp3.scm,
  gnu/packages/ncdu.scm, gnu/packages/networking.scm, gnu/packages/ntp.scm,
  gnu/packages/ocaml.scm, gnu/packages/openbox.scm, gnu/packages/pdf.scm,
  gnu/packages/perl.scm, gnu/packages/pretty-print.scm,
  gnu/packages/pulseaudio.scm, gnu/packages/python.scm,
  gnu/packages/rdesktop.scm, gnu/packages/rdf.scm, gnu/packages/ruby.scm,
  gnu/packages/slang.scm, gnu/packages/slim.scm, gnu/packages/telephony.scm,
  gnu/packages/tls.scm, gnu/packages/tmux.scm, gnu/packages/tre.scm,
  gnu/packages/unrtf.scm, gnu/packages/version-control.scm,
  gnu/packages/vpn.scm, gnu/packages/web.scm, gnu/packages/wget.scm,
  gnu/packages/xdisorg.scm, gnu/packages/xfce.scm, gnu/packages/xiph.scm:
  Fix typos.  Trim long lines.  Add missing periods in the end of sentences.
  Use double spaces between sentences.  Remove trailing whitespaces.
---
 gnu/packages/admin.scm           |  4 +--
 gnu/packages/algebra.scm         |  2 +-
 gnu/packages/audio.scm           |  2 +-
 gnu/packages/backup.scm          |  6 ++--
 gnu/packages/base.scm            |  2 +-
 gnu/packages/bittorrent.scm      |  2 +-
 gnu/packages/code.scm            |  2 +-
 gnu/packages/compression.scm     |  4 +--
 gnu/packages/databases.scm       |  6 ++--
 gnu/packages/enchant.scm         |  2 +-
 gnu/packages/firmware.scm        |  2 +-
 gnu/packages/fonts.scm           |  3 +-
 gnu/packages/freedesktop.scm     |  2 +-
 gnu/packages/games.scm           |  2 +-
 gnu/packages/gd.scm              |  2 +-
 gnu/packages/gl.scm              |  2 +-
 gnu/packages/gnome.scm           | 11 +++---
 gnu/packages/gsasl.scm           |  2 +-
 gnu/packages/gstreamer.scm       |  9 +++--
 gnu/packages/gtk.scm             |  2 +-
 gnu/packages/guile.scm           |  4 +--
 gnu/packages/haskell.scm         |  8 ++---
 gnu/packages/language.scm        |  4 +--
 gnu/packages/lesstif.scm         |  2 +-
 gnu/packages/libreoffice.scm     |  2 +-
 gnu/packages/linux.scm           |  8 ++---
 gnu/packages/llvm.scm            | 12 +++----
 gnu/packages/maths.scm           |  4 +--
 gnu/packages/mcrypt.scm          |  2 +-
 gnu/packages/mit-krb5.scm        |  5 +--
 gnu/packages/mp3.scm             | 14 ++++----
 gnu/packages/ncdu.scm            |  2 +-
 gnu/packages/networking.scm      |  2 +-
 gnu/packages/ntp.scm             |  4 +--
 gnu/packages/ocaml.scm           |  4 +--
 gnu/packages/openbox.scm         |  2 +-
 gnu/packages/pdf.scm             |  2 +-
 gnu/packages/perl.scm            | 76 ++++++++++++++++++++--------------------
 gnu/packages/pretty-print.scm    |  2 +-
 gnu/packages/pulseaudio.scm      | 13 +++----
 gnu/packages/python.scm          | 15 ++++----
 gnu/packages/rdesktop.scm        |  2 +-
 gnu/packages/rdf.scm             |  2 +-
 gnu/packages/ruby.scm            |  4 +--
 gnu/packages/slang.scm           |  6 ++--
 gnu/packages/slim.scm            |  2 +-
 gnu/packages/telephony.scm       | 24 ++++++-------
 gnu/packages/tls.scm             |  2 +-
 gnu/packages/tmux.scm            |  2 +-
 gnu/packages/tre.scm             |  4 +--
 gnu/packages/unrtf.scm           |  2 +-
 gnu/packages/version-control.scm | 10 +++---
 gnu/packages/vpn.scm             |  2 +-
 gnu/packages/web.scm             | 12 +++----
 gnu/packages/wget.scm            |  2 +-
 gnu/packages/xdisorg.scm         |  2 +-
 gnu/packages/xfce.scm            |  4 +--
 gnu/packages/xiph.scm            | 10 +++---
 58 files changed, 175 insertions(+), 173 deletions(-)

diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index 5b56599..b34a228 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -317,7 +317,7 @@ allow automatic login and starting any app.")
     (description
      "This package provides the /etc/services, /etc/protocols, and /etc/rpc
 files, which contain information about the IANA-assigned port, protocol, and
-ONC RPC numbers")
+ONC RPC numbers.")
     (home-page "http://packages.debian.org/sid/netbase")
     (license license:gpl2)))
 
@@ -953,7 +953,7 @@ system is under heavy load.")
                                            (assoc-ref %build-inputs "popt")))
        #:tests? #f))                    ;no 'check' target
     (home-page "http://detox.sourceforge.net")
-    (synopsis "Clean up filenames")
+    (synopsis "Clean up file names")
     (description
      "Detox is a program that renames files to make them easier to work with
 under Unix and related operating systems.  Spaces and various other unsafe
diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm
index e47c405..95fa57f 100644
--- a/gnu/packages/algebra.scm
+++ b/gnu/packages/algebra.scm
@@ -56,7 +56,7 @@ arbitrary precision real (mpfr) or complex (mpc) numbers, without control
 on the rounding.  For the time being, only the few functions needed to
 implement the floating point approach to complex multiplication are
 implemented.  On the other hand, these comprise asymptotically fast
-multiplication routines such as Toom–Cook and the FFT. ")
+multiplication routines such as Toom–Cook and the FFT.")
    (license lgpl2.1+)
    (home-page "http://mpfrcx.multiprecision.org/")))
 
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index ff6fb46..539dddc 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -447,7 +447,7 @@ ALSA PCM devices.")
     (description
      "FluidSynth is a real-time software synthesizer based on the SoundFont 2
 specifications.  FluidSynth reads and handles MIDI events from the MIDI input
-device.  It is the software analogue of a MIDI synthesizer. FluidSynth can
+device.  It is the software analogue of a MIDI synthesizer.  FluidSynth can
 also play midifiles using a Soundfont.")
     (license license:gpl2+)))
 
diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm
index 516712b..ae8d473 100644
--- a/gnu/packages/backup.scm
+++ b/gnu/packages/backup.scm
@@ -237,14 +237,14 @@ random access nor for in-place modification.")
                     (setenv "HOME" (getcwd))
                     (substitute* "testsuite/rdup/rdup.rdup-up-t-with-file.exp"
                       (("/bin/cat") (which "cat"))))
-                  
+
                   %standard-phases))))
     (home-page "http://archive.miek.nl/projects/rdup/index.html")
     (synopsis "Provide a list of files to backup")
     (description
      "Rdup is a utility inspired by rsync and the plan9 way of doing backups.
 Rdup itself does not backup anything, it only print a list of absolute
-filenames to standard output.  Auxiliary scripts are needed that act on this
+file names to standard output.  Auxiliary scripts are needed that act on this
 list and implement the backup strategy.")
     (license license:gpl3+)))
 
@@ -314,5 +314,5 @@ modification times, extended attributes, acls, and resource forks.  Also,
 rdiff-backup can operate in a bandwidth efficient manner over a pipe, like
 rsync.  Thus you can use rdiff-backup and ssh to securely back a hard drive up
 to a remote location, and only the differences will be transmitted.  Finally,
-rdiff-backup is easy to use and settings have sensical defaults.")
+rdiff-backup is easy to use and settings have sensible defaults.")
     (license license:gpl2+)))
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index 31331a1..c5b1a22 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -193,7 +193,7 @@ differences.")
    (description
     "GNU Diffutils is a package containing tools for finding the
 differences between files.  The \"diff\" command is used to show how two files
-differ, while \"cmp\" shows the offsets and line numbers where they differ. 
+differ, while \"cmp\" shows the offsets and line numbers where they differ.
 \"diff3\" allows you to compare three files.  Finally, \"sdiff\" offers an
 interactive means to merge two files.")
    (license gpl3+)
diff --git a/gnu/packages/bittorrent.scm b/gnu/packages/bittorrent.scm
index f63ed59..47256a4 100644
--- a/gnu/packages/bittorrent.scm
+++ b/gnu/packages/bittorrent.scm
@@ -83,7 +83,7 @@
     (description
      "Transmission is a BitTorrent client that comes with graphical,
 textual, and Web user interfaces.  Transmission also has a daemon for
-unattended operationg.  It supports local peer discovery, full encryption,
+unattended operations.  It supports local peer discovery, full encryption,
 DHT, µTP, PEX and Magnet Links.")
 
     ;; COPYING reads:
diff --git a/gnu/packages/code.scm b/gnu/packages/code.scm
index 38f1438..e346f7e 100644
--- a/gnu/packages/code.scm
+++ b/gnu/packages/code.scm
@@ -60,7 +60,7 @@
     (description
      "GNU cflow analyzes C source files and produces a graph charting the
 control flow of the program.  It can output the graph in several styles and
-in either the POSIX format or in an extended GNU format. cflow also includes
+in either the POSIX format or in an extended GNU format.  cflow also includes
 a major mode for Emacs for examining the flowcharts that it produces.")
     (license license:gpl3+)))
 
diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm
index 84bc929..287ae25 100644
--- a/gnu/packages/compression.scm
+++ b/gnu/packages/compression.scm
@@ -264,7 +264,7 @@ than gzip and 15 % smaller output than bzip2.")
     (arguments '(#:configure-flags '("--enable-shared")))
     (home-page "http://www.oberhumer.com/opensource/lzo")
     (synopsis
-     "Data compresion library suitable for real-time data de-/compression")
+     "Data compression library suitable for real-time data de-/compression")
     (description
      "LZO is a data compression library which is suitable for data
 de-/compression in real-time.  This means it favours speed over
@@ -348,7 +348,7 @@ archiving.  Lzip is a clean implementation of the LZMA algorithm.")
     (description
      "GNU sharutils is a package for creating and manipulating shell
 archives that can be readily emailed.  A shell archive is a file that can be
-processed by a Bourne-type shell to unpack the original collection of files. 
+processed by a Bourne-type shell to unpack the original collection of files.
 This package is mostly for compatibility and historical interest.")
     (license license:gpl3+)))
 
diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index 7b1b654..594ccb2 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -633,7 +633,7 @@ While based on the concepts used by DBIx::Abstract, the concepts used have
 been modified to make the SQL easier to generate from Perl data structures.
 The underlying idea is for this module to do what you mean, based on the data
 structures you provide it, so that you don't have to modify your code every
-time your data changes")
+time your data changes.")
     (license (package-license perl))))
 
 (define-public perl-sql-splitstatement
@@ -688,7 +688,7 @@ valid SQL query.")
    (version "2.3.2")
    (source (origin
             (method url-fetch)
-            (uri 
+            (uri
              (string-append
               "ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-" version ".tar.gz"))
             (sha256
@@ -698,7 +698,7 @@ valid SQL query.")
    (description "Unixodbc is a library providing an API with which to access
 data sources.  Data sources include SQL Servers and any software with an ODBC
 Driver.")
-   (license lgpl2.1+) 
+   (license lgpl2.1+)
    ;; COPYING contains copy of lgpl2.1 - but copyright notices just say "LGPL"
    (home-page "http://www.unixodbc.org")))
 
diff --git a/gnu/packages/enchant.scm b/gnu/packages/enchant.scm
index c9e49d9..8b2796d 100644
--- a/gnu/packages/enchant.scm
+++ b/gnu/packages/enchant.scm
@@ -56,6 +56,6 @@ the dlopen() system call.
 Enchant steps in to provide uniformity and conformity on top of these libraries,
 and implement certain features that may be lacking in any individual provider
 library.  Everything should \"just work\" for any and every definition of \"just
-working.\"")
+working\".")
     (home-page "http://www.abisource.com/projects/enchant")
     (license lgpl2.1+)))
diff --git a/gnu/packages/firmware.scm b/gnu/packages/firmware.scm
index 156f334..bbd8368 100644
--- a/gnu/packages/firmware.scm
+++ b/gnu/packages/firmware.scm
@@ -78,6 +78,6 @@
     (synopsis "Firmware for the Atheros AR7010 and AR9271 USB 802.11n NICs")
     (description
      "This is the firmware for the Qualcomm Atheros AR7010 and AR9271 USB
-802.11n NICs (aka. Wi-Fi USB dongles.)  It is used by the ath9k driver of
+802.11n NICs (aka Wi-Fi USB dongles).  It is used by the ath9k driver of
 Linux-libre.")
     (license (non-copyleft "http://directory.fsf.org/wiki/License:ClearBSD"))))
diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm
index 40b1722..f72c542 100644
--- a/gnu/packages/fonts.scm
+++ b/gnu/packages/fonts.scm
@@ -356,8 +356,7 @@ seven weights: ExtraLight, Light, Normal, Regular, Medium, Bold, and Heavy.
 And in several OpenType/CFF-based deployment configurations to accommodate
 various system requirements or limitations.  As the name suggests, Pan-CJK
 fonts are intended to support the characters necessary to render or display
-text in Simplified Chinese, Traditional Chinese, Japanese, and Korean.
-")
+text in Simplified Chinese, Traditional Chinese, Japanese, and Korean.")
     (license license:asl2.0)))
 
 (define-public font-wqy-zenhei
diff --git a/gnu/packages/freedesktop.scm b/gnu/packages/freedesktop.scm
index 5cdb456..2e283ff 100644
--- a/gnu/packages/freedesktop.scm
+++ b/gnu/packages/freedesktop.scm
@@ -227,7 +227,7 @@ of a the system to know what users are logged in, and where.")
     (synopsis "Implementations of freedesktop.org standards in Python")
     (description
      "PyXDG is a collection of implementations of freedesktop.org standards in
-Python")
+Python.")
     (license license:lgpl2.0)))
 
 (define-public python2-pyxdg
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 0db555d..4b88af1 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -781,7 +781,7 @@ reference interpreter, using Glk API.")
     (synopsis "Z-machine interpreter")
     (description
      "Fizmo is a console-based Z-machine interpreter.  It is used to play
-interactive ficiton, also known as textadventures, which were implemented
+interactive fiction, also known as text adventures, which were implemented
 either by Infocom or created using the Inform compiler.")
     (license license:bsd-3)))
 
diff --git a/gnu/packages/gd.scm b/gnu/packages/gd.scm
index 725a8e7..55caac9 100644
--- a/gnu/packages/gd.scm
+++ b/gnu/packages/gd.scm
@@ -138,7 +138,7 @@ you can create PNG images on the fly or modify existing files.")
      `(("perl-gd" ,perl-gd)
        ("perl-image-magick" ,perl-image-magick)))
     (home-page "http://search.cpan.org/dist/GD-SecurityImage")
-    (synopsis "Security image generator.")
+    (synopsis "Security image generator")
     (description "This module provides a basic interface to create
 security (captcha) images.  The final output is the actual graphic data, the
 mime type of the graphic, and the created random string.  The module also has
diff --git a/gnu/packages/gl.scm b/gnu/packages/gl.scm
index 9bb1134..a6935d4 100644
--- a/gnu/packages/gl.scm
+++ b/gnu/packages/gl.scm
@@ -130,7 +130,7 @@ the X-Consortium license.")
     (description
      "FTGL is a font rendering library for OpenGL applications.  Supported
 rendering modes are: Bitmaps, Anti-aliased pixmaps, Texture maps, Outlines,
-Polygon meshes, and Extruded polygon meshes")
+Polygon meshes, and Extruded polygon meshes.")
     (license l:x11)))
 
 (define-public s2tc
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index f205329..537230d 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -689,7 +689,7 @@ some form of information without getting in the user's way.")
 every application the chance to assume its own extensibility.  It also has a
 set of features including, but not limited to: multiple extension points; on
 demand (lazy) programming language support for C, Python and JS; simplicity of
-the API")
+the API.")
     (license license:lgpl2.0+)))
 
 (define-public gtkglext
@@ -1234,7 +1234,8 @@ creating interactive structured graphics.")
     (home-page "https://developer.gnome.org/libgnomeui/")
     (synopsis "Additional widgets for applications")
     (description "The libgnomeui library provides additional widgets for
-applications.  Many of the widgets from libgnomeui have already been ported to GTK+.")
+applications.  Many of the widgets from libgnomeui have already been
+ported to GTK+.")
     (license license:lgpl2.0+)))
 
 (define-public libglade
@@ -1820,8 +1821,8 @@ and objects.")
     (synopsis "High-level API for X Keyboard Extension")
     (description
      "LibXklavier is a library providing high-level API for X Keyboard
-Extension known as XKB.  This library is indended to support XFree86 and other
-commercial X servers. It is useful for creating XKB-related software (layout
+Extension known as XKB.  This library is intended to support XFree86 and other
+commercial X servers.  It is useful for creating XKB-related software (layout
 indicators etc).")
     (license license:lgpl2.0+)))
 
@@ -2236,7 +2237,7 @@ output devices.")
 information.  The primary goal of the Geoclue project is to make creating
 location-aware applications as simple as possible, while the secondary goal is
 to ensure that no application can access location information without explicit
-permission from user. ")
+permission from user.")
     (license license:gpl2+)))
 
 (define-public geocode-glib
diff --git a/gnu/packages/gsasl.scm b/gnu/packages/gsasl.scm
index 3caeb1a..ce39aed 100644
--- a/gnu/packages/gsasl.scm
+++ b/gnu/packages/gsasl.scm
@@ -41,7 +41,7 @@
    (build-system gnu-build-system)
    (synopsis "Library that implements NTLM authentication")
    (description
-    "Libntlm is a library that implements NTLM authentication")
+    "Libntlm is a library that implements NTLM authentication.")
    (license license:lgpl2.1+)
    (home-page "http://www.nongnu.org/libntlm/")))
 
diff --git a/gnu/packages/gstreamer.scm b/gnu/packages/gstreamer.scm
index d7296e5..717388b 100644
--- a/gnu/packages/gstreamer.scm
+++ b/gnu/packages/gstreamer.scm
@@ -118,8 +118,8 @@ arrays of data.")
     (description
      "GStreamer is a library for constructing graphs of media-handling
 components.  The applications it supports range from simple Ogg/Vorbis
-playback, audio/video streaming to complex audio (mixing) and video
- (non-linear editing) processing.
+playback, audio/video streaming to complex audio mixing and video
+non-linear editing.
 
 Applications can take advantage of advances in codec and filter technology
 transparently.  Developers can add new codecs and filters by writing a
@@ -190,7 +190,7 @@ for the GStreamer multimedia library.")
     (source
      (origin
       (method url-fetch)
-      (uri (string-append 
+      (uri (string-append
             "http://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-"
             version ".tar.xz"))
       (sha256
@@ -275,8 +275,7 @@ developers consider to have good quality code and correct functionality.")
        ("pkg-config" ,pkg-config)
        ("python-wrapper" ,python-wrapper)))
     (home-page "http://gstreamer.freedesktop.org/")
-    (synopsis
-     "GStreamer plugins from the \"ugly\" set.")
+    (synopsis "GStreamer plugins from the \"ugly\" set")
     (description "GStreamer Ugly Plug-ins.  This set contains those plug-ins
 which the developers consider to have good quality code but that might pose
 distribution problems in some jurisdictions, e.g. due to patent threats.")
diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm
index f518992..d812af0 100644
--- a/gnu/packages/gtk.scm
+++ b/gnu/packages/gtk.scm
@@ -131,7 +131,7 @@ The cairo API provides operations similar to the drawing operators of
 PostScript and PDF.  Operations in cairo including stroking and filling cubic
 Bézier splines, transforming and compositing translucent images, and
 antialiased text rendering.  All drawing operations can be transformed by any
-affine transformation (scale, rotation, shear, etc.)")
+affine transformation (scale, rotation, shear, etc.).")
    (license license:lgpl2.1) ; or Mozilla Public License 1.1
    (home-page "http://cairographics.org/")))
 
diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm
index d8c1a8c..e85c84a 100644
--- a/gnu/packages/guile.scm
+++ b/gnu/packages/guile.scm
@@ -457,14 +457,14 @@ http:://json.org specification.  These are the main features:
     (inputs
      `(("guile" ,guile-2.0)))
     (home-page "https://github.com/ijp/minikanren")
-    (synopsis "miniKanren declarative logic system, packaged for Guile")
+    (synopsis "MiniKanren declarative logic system, packaged for Guile")
     (description
      "MiniKanren is a relational programming extension to the Scheme
 programming Language, written as a smaller version of Kanren suitable for
 pedagogical purposes.  It is featured in the book, The Reasoned Schemer,
 written by Dan Friedman, William Byrd, and Oleg Kiselyov.
 
-This is Ian Price's r6rs packaged version of miniKranen, which deviates
+This is Ian Price's r6rs packaged version of miniKanren, which deviates
 slightly from miniKanren mainline.
 
 See http://minikanren.org/ for more on miniKanren generally.")
diff --git a/gnu/packages/haskell.scm b/gnu/packages/haskell.scm
index 75bbb24..39664c3 100644
--- a/gnu/packages/haskell.scm
+++ b/gnu/packages/haskell.scm
@@ -712,7 +712,7 @@ and high speed.")
         (base32
          "0xa3j0gwr6k5vizxybnzk5fgb3pppgspi6mysnp2gwjp2dbrxkzr"))))
     (build-system haskell-build-system)
-    (inputs 
+    (inputs
      `(("ghc-quickcheck" ,ghc-quickcheck)))
     (home-page "http://hackage.haskell.org/package/split")
     (synopsis
@@ -769,7 +769,7 @@ is also parametric in the input stream type.")
         (base32
          "01hc71k1z9m0g0dv4zsvq5d2dvbgyc5p01hryw5c53792yi2fm25"))))
     (build-system haskell-build-system)
-    (inputs 
+    (inputs
      `(("ghc-quickcheck" ,ghc-quickcheck)))
     ;; these inputs are necessary to use this library
     (propagated-inputs
@@ -837,8 +837,8 @@ mutable and immutable), with a powerful loop optimisation framework.")
      `(("ghc-parsec" ,ghc-parsec)))
     (home-page
      "https://github.com/haskell/network-uri")
-    (synopsis "Labrary for URI manipulation")
-    (description "This package provides an URI manipulation inteface.  In
+    (synopsis "Library for URI manipulation")
+    (description "This package provides an URI manipulation interface.  In
 'network-2.6' the 'Network.URI' module was split off from the 'network'
 package into this package.")
     (license bsd-3)))
diff --git a/gnu/packages/language.scm b/gnu/packages/language.scm
index f2f1fbc..b0fa7aa 100644
--- a/gnu/packages/language.scm
+++ b/gnu/packages/language.scm
@@ -372,7 +372,7 @@ stemmer at http://snowball.sourceforge.net.")
        ("perl-text-unidecode" ,perl-text-unidecode)
        ("perl-namespace-clean" ,perl-namespace-clean)))
     (home-page "http://search.cpan.org/dist/String-ToIdentifier-EN")
-    (synopsis "Convert strings to english program identifiers")
+    (synopsis "Convert strings to English program identifiers")
     (description "This module provides a utility method, \"to_identifier\" for
 converting an arbitrary string into a readable representation using the ASCII
 subset of \"\\w\" for use as an identifier in a computer program.  The intent
@@ -395,6 +395,6 @@ string can be easily inferred by a human just by reading the identifier.")
     (build-system perl-build-system)
     (home-page "http://search.cpan.org/dist/Text-German")
     (synopsis "German grundform reduction")
-    (description "This module is a rather incomplete implementaion of work
+    (description "This module is a rather incomplete implementation of work
 done by Gudrun Putze-Meier.")
     (license (package-license perl))))
diff --git a/gnu/packages/lesstif.scm b/gnu/packages/lesstif.scm
index d2ad120..6326cd3 100644
--- a/gnu/packages/lesstif.scm
+++ b/gnu/packages/lesstif.scm
@@ -45,5 +45,5 @@
         ("libxt" ,libxt)))
     (home-page "http://lesstif.sourceforge.net/")
     (synopsis "Clone of the Motif toolkit for the X window system")
-    (description "Clone of the Motif toolkit for the X window system")
+    (description "Clone of the Motif toolkit for the X window system.")
     (license license:gpl2+))) ; some files are lgpl2.1+ or x11
diff --git a/gnu/packages/libreoffice.scm b/gnu/packages/libreoffice.scm
index e105209..da7e275 100644
--- a/gnu/packages/libreoffice.scm
+++ b/gnu/packages/libreoffice.scm
@@ -657,7 +657,7 @@ patterns, which are pre-processed by a perl script.")
     (synopsis "Thesaurus")
     (description "MyThes is a simple thesaurus that uses a structured text
 data file and an index file with binary search to look up words and phrases
-and to return information on pronunciations, meaningss and synonyms.")
+and to return information on pronunciations, meanings and synonyms.")
     (license (non-copyleft "file://COPYING"
                            "See COPYING in the distribution."))))
 
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 5763439..68c601b 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -356,7 +356,7 @@ It has been modified to remove all non-free binary blobs.")
      "A *Free* project to implement OSF's RFC 86.0.
 Pluggable authentication modules are small shared object files that can
 be used through the PAM API to perform tasks, like authenticating a user
-at login.  Local and dynamic reconfiguration are its key features")
+at login.  Local and dynamic reconfiguration are its key features.")
     (license bsd-3)))
 
 
@@ -1940,10 +1940,10 @@ thanks to the use of namespaces.")
        #:phases (alist-delete 'configure %standard-phases)
        #:tests? #f))  ; no test suite
     (home-page "http://sourceforge.net/projects/hdparm/")
-    (synopsis "tune hard disk parameters for high performance")
+    (synopsis "Tune hard disk parameters for high performance")
     (description
      "Get/set device parameters for Linux SATA/IDE drives.  It's primary use
-is for enabling irq-unmasking and IDE multiplemode.")
+is for enabling irq-unmasking and IDE multiple-mode.")
     (license (non-copyleft "file://LICENSE.TXT"))))
 
 (define-public acpid
@@ -2046,7 +2046,7 @@ also contains the libsysfs library.")
     (home-page "https://www.kernel.org/pub/linux/utils/kernel/cpufreq/")
     (synopsis "Utilities to get and set CPU frequency on Linux")
     (description
-     "The cpufrequtils suite contains utilities to retreive CPU frequency
+     "The cpufrequtils suite contains utilities to retrieve CPU frequency
 information, and set the CPU frequency if supported, using the cpufreq
 capabilities of the Linux kernel.")
     (license gpl2)))
diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm
index 897eab3..9e06a64 100644
--- a/gnu/packages/llvm.scm
+++ b/gnu/packages/llvm.scm
@@ -70,12 +70,12 @@
     (home-page "http://www.llvm.org")
     (synopsis "Optimizing compiler infrastructure")
     (description
-     "LLVM is a compiler infrastructure designed for compile-time, link-time, runtime,
-and idle-time optimization of programs from arbitrary programming languages.
-It currently supports compilation of C and C++ programs, using front-ends
-derived from GCC 4.0.1.  A new front-end for the C family of languages is in
-development.  The compiler infrastructure includes mirror sets of programming
-tools as well as libraries with equivalent functionality.")
+     "LLVM is a compiler infrastructure designed for compile-time, link-time,
+runtime, and idle-time optimization of programs from arbitrary programming
+languages.  It currently supports compilation of C and C++ programs, using
+front-ends derived from GCC 4.0.1.  A new front-end for the C family of
+languages is in development.  The compiler infrastructure includes mirror sets
+of programming tools as well as libraries with equivalent functionality.")
     (license ncsa)))
 
 (define (clang-from-llvm llvm hash)
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 2d651cb..d365481 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -1381,7 +1381,7 @@ to BMP, JPEG or PNG image formats.")
     (description "Maxima is a system for the manipulation of symbolic and
 numerical expressions.  It yields high precision numeric results by using
 exact fractions, arbitrary precision integers, and variable precision floating
-point numbers")
+point numbers.")
     ;; Some files are lgpl2.1+. Some are gpl2+.  Some explicitly state gpl1+.
     ;; Others simply say "GNU General Public License" without stating a
     ;; version (which implicitly means gpl1+).
@@ -1528,7 +1528,7 @@ constant parts of it.")
      "OpenLibm is an effort to have a high quality, portable, standalone C
 mathematical library (libm).  It can be used standalone in applications and
 programming language implementations.  The project was born out of a need to
-have a good libm for the Julia programming langage that worked consistently
+have a good libm for the Julia programming language that worked consistently
 across compilers and operating systems, and in 32-bit and 64-bit
 environments.")
     ;; See LICENSE.md for details.
diff --git a/gnu/packages/mcrypt.scm b/gnu/packages/mcrypt.scm
index ad67302..71cbfd1 100644
--- a/gnu/packages/mcrypt.scm
+++ b/gnu/packages/mcrypt.scm
@@ -107,5 +107,5 @@ Algorithms currently supplied are:
 CRC-32, CRC-32B, ALDER-32, MD-2, MD-4, MD-5, RIPEMD-128, RIPEMD-160,
 RIPEMD-256, RIPEMD-320, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, HAVAL-128,
 HAVAL-160, HAVAL-192, HAVAL-256, TIGER, TIGER-128, TIGER-160, GOST, WHIRLPOOL,
-SNEFRU-128, SNEFRU-256")
+SNEFRU-128, SNEFRU-256.")
     (license gpl2+)))
diff --git a/gnu/packages/mit-krb5.scm b/gnu/packages/mit-krb5.scm
index 716d95b..b79d4d3 100644
--- a/gnu/packages/mit-krb5.scm
+++ b/gnu/packages/mit-krb5.scm
@@ -81,7 +81,8 @@
     (description
      "Massachusetts Institute of Technology implementation of Kerberos.
 Kerberos is a network authentication protocol designed to provide strong
-authentication for client/server applications by using secret-key cryptography.")
+authentication for client/server applications by using secret-key
+cryptography.")
     (license (non-copyleft "file://NOTICE"
-                        "See NOTICE in the distribution."))
+                           "See NOTICE in the distribution."))
     (home-page "http://web.mit.edu/kerberos/")))
diff --git a/gnu/packages/mp3.scm b/gnu/packages/mp3.scm
index c7efbae..163e075 100644
--- a/gnu/packages/mp3.scm
+++ b/gnu/packages/mp3.scm
@@ -90,7 +90,7 @@ This package contains the library.")
    (synopsis "Library for reading ID3 tags")
    (description
     "Libid3tag is a library for reading ID3 tags, both ID3v1 and the various
-versions of ID3v2")
+versions of ID3v2.")
    (license license:gpl2+)
    (home-page "http://www.underbit.com/products/mad/")))
 
@@ -212,7 +212,7 @@ Speex, WavPack TrueAudio, WAV, AIFF, MP4 and ASF files.")
     (synopsis "MP3 technical info viewer and ID3 1.x tag editor")
     (description
      "MP3Info is a little utility used to read and modify the ID3 tags of MP3
-files.  MP3Info can also display various techincal aspects of an MP3 file
+files.  MP3Info can also display various technical aspects of an MP3 file
 including playing time, bit-rate, sampling frequency and other attributes in a
 pre-defined or user-specifiable output format.")
     (license license:gpl2+)))
@@ -234,7 +234,7 @@ pre-defined or user-specifiable output format.")
              ("libmad" ,libmad)
              ("libogg" ,libogg)
              ("libltdl" ,libltdl)
-             ("libvorbid" ,libvorbis)
+             ("libvorbis" ,libvorbis)
              ("pcre" ,pcre)))
    (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -242,7 +242,7 @@ pre-defined or user-specifiable output format.")
    (description
     "Mp3splt is a utility to split mp3 and ogg vorbis files selecting a begin
 and an end time position, without decoding.  For splitting an album, one may
-select split points and filenames manually or obtain them automatically from
+select split points and file names manually or obtain them automatically from
 CDDB (internet or a local file) or from .cue files.  The tool also supports
 automatic silence split, that can be used also to adjust cddb/cue splitpoints.
 
@@ -264,11 +264,11 @@ This package contains the library.")
               "106dnka56prlc9nsfh300f8841am2lmkwlzgl9lkr25mgnc35wwh"))))
    (build-system gnu-build-system)
    (inputs `(("libmp3splt" ,libmp3splt)))
-   (synopsis "Utiliy for splitting mp3 and ogg vorbis files")
+   (synopsis "Utility for splitting mp3 and ogg vorbis files")
    (description
     "Mp3splt is a utility to split mp3 and ogg vorbis files selecting a begin
 and an end time position, without decoding.  For splitting an album, one may
-select split points and filenames manually or obtain them automatically from
+select split points and file names manually or obtain them automatically from
 CDDB (internet or a local file) or from .cue files.  The tool also supports
 automatic silence split, that can be used also to adjust cddb/cue splitpoints.
 
@@ -444,5 +444,5 @@ format.")
     (synopsis "Audio player for Musepack-formatted files")
     (description
      "Mpc123 is a command-line player for files in the Musepack audio
-compression format (.mpc files.)")
+compression format (.mpc files).")
     (license license:gpl2+)))
diff --git a/gnu/packages/ncdu.scm b/gnu/packages/ncdu.scm
index 7052567..6c3d617 100644
--- a/gnu/packages/ncdu.scm
+++ b/gnu/packages/ncdu.scm
@@ -40,7 +40,7 @@
    (build-system gnu-build-system)
    (synopsis "Ncurses based disk usage analyzer")
    (description "A disk usage analyzer with an ncurses interface, aimed to be
-run on a remote server where you don't have an entire gaphical setup, but have
+run on a remote server where you don't have an entire graphical setup, but have
 to do with a simple SSH connection. ncdu aims to be fast, simple and easy to
 use, and should be able to run in any minimal POSIX-like environment with
 ncurses installed.")
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index 7bd81e6..717e624 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -80,7 +80,7 @@ socat can be used, for instance, as TCP port forwarder, as a shell interface
 to UNIX sockets, IPv6 relay, for redirecting TCP oriented programs to a serial
 line, to logically connect serial lines on different computers, or to
 establish a relatively secure environment (su and chroot) for running client
-or server shell scripts with network connections. ")
+or server shell scripts with network connections.")
     (license license:gpl2)))
 
 (define-public zeromq
diff --git a/gnu/packages/ntp.scm b/gnu/packages/ntp.scm
index e2b43e9..a53d98e 100644
--- a/gnu/packages/ntp.scm
+++ b/gnu/packages/ntp.scm
@@ -38,7 +38,7 @@
    (version "4.2.8p3")
    (source (origin
 	    (method url-fetch)
-	    (uri (string-append 
+	    (uri (string-append
                   "http://archive.ntp.org/ntp4/ntp-"
                   (version-major+minor version)
                   "/ntp-" version ".tar.gz"))
@@ -78,7 +78,7 @@
                        (("test-decodenetnum\\$\\(EXEEXT\\) ") ""))
                      #t)))))
    (build-system gnu-build-system)
-   (synopsis "Real time clock synchonization system")
+   (synopsis "Real time clock synchronization system")
    (description "NTP is a system designed to synchronize the clocks of
 computers over a network.")
    (license (l:x11-style
diff --git a/gnu/packages/ocaml.scm b/gnu/packages/ocaml.scm
index d283acd..6907b1a 100644
--- a/gnu/packages/ocaml.scm
+++ b/gnu/packages/ocaml.scm
@@ -380,8 +380,8 @@ It is developed using Objective Caml and Camlp5.")
                       (zero? (apply system* "make" "install-doc"
                                     make-flags)))))))
     (home-page "http://proofgeneral.inf.ed.ac.uk/")
-    (description "Generic front-end for proof assistants based on Emacs")
-    (synopsis
+    (synopsis "Generic front-end for proof assistants based on Emacs")
+    (description
      "Proof General is a major mode to turn Emacs into an interactive proof
 assistant to write formal mathematical proofs using a variety of theorem
 provers.")
diff --git a/gnu/packages/openbox.scm b/gnu/packages/openbox.scm
index 07cc8f8..9dd756d 100644
--- a/gnu/packages/openbox.scm
+++ b/gnu/packages/openbox.scm
@@ -55,7 +55,7 @@
     (synopsis "Box style window manager")
     (description
      "Openbox is a highly configurable, next generation window manager with
-extensive standars support.  The *box visual style is well known for its
+extensive standards support.  The *box visual style is well known for its
 minimalistic appearance.  Openbox uses the *box visual style, while providing
 a greater number of options for theme developers than previous *box
 implementations.")
diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm
index 3a426dc..bbd1f66 100644
--- a/gnu/packages/pdf.scm
+++ b/gnu/packages/pdf.scm
@@ -148,7 +148,7 @@
         %standard-phases)))
    (synopsis "Viewer for PDF files based on the Motif toolkit")
    (description
-    "Xpdf is a viewer for Portable Document Format (PDF) files")
+    "Xpdf is a viewer for Portable Document Format (PDF) files.")
    (license license:gpl3) ; or gpl2, but not gpl2+
    (home-page "http://www.foolabs.com/xpdf/")))
 
diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index 3d28455..900d254 100644
--- a/gnu/packages/perl.scm
+++ b/gnu/packages/perl.scm
@@ -181,11 +181,11 @@ configuration files and parsing command line arguments.")
   (package
     (name "perl-archive-zip")
     (version "1.30")
-    (source 
+    (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "mirror://cpan/authors/id/A/AD/ADAMK/Archive-Zip-" 
+             "mirror://cpan/authors/id/A/AD/ADAMK/Archive-Zip-"
              version ".tar.gz"))
        (sha256
         (base32
@@ -607,7 +607,7 @@ the Class::C3 method resolution order.")
     (description "Class::Data::Inheritable is for creating accessor/mutators
 to class data.  That is, if you want to store something about your class as a
 whole (instead of about a single object).  This data is then inherited by your
-subclasses and can be overriden.")
+subclasses and can be overridden.")
     (license (package-license perl))))
 
 (define-public perl-class-date
@@ -717,7 +717,7 @@ names, not Class::Name.  For that, this module provides \"load_class
     (home-page "http://search.cpan.org/dist/Class-Load-XS")
     (synopsis "XS implementation of parts of Class::Load")
     (description "This module provides an XS implementation for portions of
-Class::Load")
+Class::Load.")
     (license artistic2.0)))
 
 (define-public perl-class-methodmaker
@@ -758,11 +758,11 @@ write accessor methods for your objects that perform standard tasks.")
        ("perl-test-requires" ,perl-test-requires)))
     (home-page "http://search.cpan.org/dist/Class-Method-Modifiers")
     (synopsis "Moose-like method modifiers")
-    (description "Class::Method::Modifiers provides three modifiers: before,
-around, and after.  before and after are run just before and after the method
-they modify, but can not really affect that original method.  around is run in
-place of the original method, with a hook to easily call that original
-method.")
+    (description "Class::Method::Modifiers provides three modifiers: 'before',
+'around', and 'after'.  'before' and 'after' are run just before and after the
+method they modify, but can not really affect that original method.  'around'
+is run in place of the original method, with a hook to easily call that
+original method.")
     (license (package-license perl))))
 
 (define-public perl-class-singleton
@@ -781,7 +781,7 @@ method.")
     (home-page "http://search.cpan.org/dist/Class-Singleton")
     (synopsis "Implementation of a singleton class for Perl")
     (description "This module implements a Singleton class from which other
-classes can be derived. By itself, the Class::Singleton module does very
+classes can be derived.  By itself, the Class::Singleton module does very
 little other than manage the instantiation of a single object.")
     (license (package-license perl))))
 
@@ -1037,7 +1037,7 @@ versa.")
 to generate random passwords, constructed from words, letters, or characters.
 This code is a Perl implementation of the Automated Password Generator
 standard, like the program described in \"A Random Word Generator For
-Pronounceable Passwords\". This code is a re-engineering of the program
+Pronounceable Passwords\".  This code is a re-engineering of the program
 contained in Appendix A of FIPS Publication 181, \"Standard for Automated
 Password Generator\".")
     (license (package-license perl))))
@@ -1202,7 +1202,7 @@ necessary later on.")
     (home-page "http://search.cpan.org/dist/Data-Tumbler")
     (synopsis "Dynamic generation of nested combinations of variants")
     (description "Data::Tumbler - Dynamic generation of nested combinations of
-variants")
+variants.")
     (license (package-license perl))))
 
 (define-public perl-data-visitor
@@ -1401,7 +1401,7 @@ or \"every day\".  You can also create more complicated recurrences, such as
        ("perl-datetime-format-strptime" ,perl-datetime-format-strptime)
        ("perl-params-validate" ,perl-params-validate)))
     (home-page "http://search.cpan.org/dist/DateTime-Format-Builder")
-    (synopsis "Create DateTime parser classes and objects.")
+    (synopsis "Create DateTime parser classes and objects")
     (description "DateTime::Format::Builder creates DateTime parsers.  Many
 string formats of dates and times are simple and just require a basic regular
 expression to extract the relevant information.  Builder provides a simple way
@@ -1868,8 +1868,8 @@ modules separately and deal with them after the module is done installing.")
     (build-system perl-build-system)
     (home-page "http://search.cpan.org/dist/Error")
     (synopsis "OO-ish Error/Exception handling for Perl")
-    (description "The Error package provides two interfaces. Firstly Error
-provides a procedural interface to exception handling. Secondly Error is a
+    (description "The Error package provides two interfaces.  Firstly Error
+provides a procedural interface to exception handling.  Secondly Error is a
 base class for errors/exceptions that can either be thrown, for subsequent
 catch, or can simply be recorded.")
     (license (package-license perl))))
@@ -2147,7 +2147,7 @@ in various parts of the CPAN ecosystem.")
     (home-page "http://search.cpan.org/dist/File-HomeDir")
     (synopsis "Find your home and other directories on any platform")
     (description "File::HomeDir is a module for locating the directories that
-are \"owned\" by a user (typicaly your user) and to solve the various issues
+are \"owned\" by a user (typically your user) and to solve the various issues
 that arise trying to find them consistently across a wide variety of
 platforms.")
     (license (package-license perl))))
@@ -2199,7 +2199,7 @@ matching a regular expression.")
     (description "File::Remove::remove removes files and directories.  It acts
 like /bin/rm, for the most part.  Although \"unlink\" can be given a list of
 files, it will not remove directories; this module remedies that.  It also
-accepts wildcards, * and ?, as arguments for filenames.")
+accepts wildcards, * and ?, as arguments for file names.")
     (license (package-license perl))))
 
 (define-public perl-file-sharedir
@@ -2266,7 +2266,7 @@ allows you to locate these files after installation.")
     (synopsis "Reading/Writing/Modifying of complete files")
     (description "File::Slurp provides subroutines to read or write entire
 files with a simple call.  It also has a subroutine for reading the list of
-filenames in a directory.")
+file names in a directory.")
     (license (package-license perl))))
 
 (define-public perl-file-temp
@@ -2463,7 +2463,7 @@ inc directory within a distribution and are used by Makefile.PL or Build.PL.")
     (synopsis "Utilities for interactive I/O")
     (description "This module provides three utility subroutines that make it
 easier to develop interactive applications: is_interactive(), interactive(),
-and busy()")
+and busy().")
     (license (package-license perl))))
 
 (define-public perl-io-string
@@ -2548,10 +2548,10 @@ pseudo ttys.")
                      ;; it, so disable it.
                      (delete-file "t/win32_compile.t"))))))
     (home-page "http://search.cpan.org/dist/IPC-Run")
-    (synopsis "system() and background procs w/ piping, redirs, ptys")
+    (synopsis "Run system() and background procs w/ piping, redirs, ptys")
     (description "IPC::Run allows you run and interact with child processes
-using files, pipes, and pseudo-ttys. Both system()-style and scripted usages
-are supported and may be mixed. Likewise, functional and OO API styles are
+using files, pipes, and pseudo-ttys.  Both system()-style and scripted usages
+are supported and may be mixed.  Likewise, functional and OO API styles are
 both supported and may be mixed.")
     (license (package-license perl))))
 
@@ -2567,7 +2567,7 @@ both supported and may be mixed.")
                (base32
                 "0r9m8q78bg7yycpixd7738jm40yz71p2q7inm766kzsw3g6c709x"))))
     (build-system perl-build-system)
-    (synopsis "Run a subprocess with input/ouput redirection")
+    (synopsis "Run a subprocess with input/output redirection")
     (description
      "The IPC::Run3 module allows you to run a subprocess and redirect stdin,
 stdout, and/or stderr to files and perl data structures.  It aims to satisfy
@@ -3391,8 +3391,8 @@ accessor, while set methods are prefixed with \"_set_\".")
     (home-page "http://search.cpan.org/dist/MooseX-StrictConstructor")
     (synopsis "Strict object constructors for Moose")
     (description "Simply loading this module makes your constructors
-\"strict\". If your constructor is called with an attribute init argument that
-your class does not declare, then it calls Moose->throw_error(). ")
+\"strict\".  If your constructor is called with an attribute init argument
+that your class does not declare, then it calls Moose->throw_error().")
     (license artistic2.0)))
 
 (define-public perl-moosex-traits-pluggable
@@ -3420,7 +3420,7 @@ your class does not declare, then it calls Moose->throw_error(). ")
      "http://search.cpan.org/dist/MooseX-Traits-Pluggable")
     (synopsis "Trait loading and resolution for Moose")
     (description "Adds support on top of MooseX::Traits for class precedence
-search for traits and some extra attributes")
+search for traits and some extra attributes.")
     (license (package-license perl))))
 
 (define-public perl-moosex-types
@@ -4144,7 +4144,7 @@ of Perl objects without duplicates for scalars and references.")
     (home-page "http://search.cpan.org/dist/Set-Scalar")
     (synopsis "Set operations for Perl")
     (description "The first priority of Set::Scalar is to be a convenient
-interface to sets (as in: unordered colletions of Perl scalars.)  While not
+interface to sets (as in: unordered collections of Perl scalars).  While not
 designed to be slow or big, neither has it been designed to be fast or
 compact.")
     (license (package-license perl))))
@@ -4249,7 +4249,7 @@ CamelCase and back again.")
     (home-page "http://search.cpan.org/dist/String-RewritePrefix")
     (synopsis "Rewrite strings based on a set of known prefixes")
     (description "This module allows you to rewrite strings based on a set of
-known pprefixes.")
+known prefixes.")
     (license (package-license perl))))
 
 (define-public perl-sub-exporter
@@ -4581,7 +4581,7 @@ stuff has been done, and maybe an estimate at how long remains.")
     (synopsis "Progress meter if run interactively")
     (description "Term::ProgressBar is a wonderful module for showing progress
 bars on the terminal.  This module acts very much like that module when it is
-run interactively. However, when it is not run interactively (for example, as
+run interactively.  However, when it is not run interactively (for example, as
 a cron job) then it does not show the progress bar.")
     (license (package-license perl))))
 
@@ -4705,7 +4705,7 @@ called as methods, which usually isn't want you want.")
     (description
      "Test::Deep compares two structures by going through each level, ensuring
 that the values match, that arrays and hashes have the same elements and that
-references are blessed into the correct class. It also handles circular data
+references are blessed into the correct class.  It also handles circular data
 structures without getting caught in an infinite loop.")
     (home-page (string-append "http://search.cpan.org/~rjbs/"
                               "Test-Deep-" version))
@@ -4730,7 +4730,7 @@ structures without getting caught in an infinite loop.")
     (home-page "http://search.cpan.org/dist/Test-Differences")
     (synopsis "Test strings and data structures and show differences")
     (description "This module exports three test functions and four diff-style
-functions")
+functions.")
     ;; See LICENSE section of Test/Differences.pm, which reads "... GNU public
     ;; license, any version, ..."
     (license gpl3+)))
@@ -4850,7 +4850,7 @@ automatically aggregated and output to STDOUT.")
     (home-page "http://search.cpan.org/dist/Test-LeakTrace")
     (synopsis "Traces memory leaks in Perl")
     (description "Test::LeakTrace provides several functions that trace memory
-leaks. This module scans arenas, the memory allocation system, so it can
+leaks.  This module scans arenas, the memory allocation system, so it can
 detect any leaked SVs in given blocks.")
     (license (package-license perl))))
 
@@ -4967,7 +4967,7 @@ bit more fine-grained control over test suites.")
     (description
      "This modules causes any warnings during testing to be captured and
 stored.  It automatically adds an extra test that will run when your script
-ends to check that there were no warnings.  If there were any warings, the
+ends to check that there were no warnings.  If there were any warnings, the
 test will fail and output diagnostics of where, when and what the warning was,
 including a stack trace of what was going on when it occurred.")
     (home-page (string-append "http://search.cpan.org/~adamk/"
@@ -5502,9 +5502,9 @@ as exceptions to standard program flow.")
   (home-page "http://search.cpan.org/dist/Tie-IxHash")
   (synopsis "Ordered associative arrays for Perl")
   (description "This Perl module implements Perl hashes that preserve the
-order in which the hash elements were added. The order is not affected when
-values corresponding to existing keys in the IxHash are changed. The elements
-can also be set to any arbitrary supplied order. The familiar perl array
+order in which the hash elements were added.  The order is not affected when
+values corresponding to existing keys in the IxHash are changed.  The elements
+can also be set to any arbitrary supplied order.  The familiar perl array
 operations can also be performed on the IxHash.")
   (license (package-license perl))))
 
@@ -5593,7 +5593,7 @@ duration strings like \"2 minutes\" and \"3 seconds\" to seconds.")
     (description "This module provides functions that are the inverse of
 built-in perl functions localtime() and gmtime().  They accept a date as a
 six-element array, and return the corresponding time(2) value in seconds since
-the system epoch")
+the system epoch.")
     (license (package-license perl))))
 
 (define-public perl-timedate
@@ -5762,7 +5762,7 @@ UNIVERSAL::can() as a function, which it is not.")
     (home-page "http://search.cpan.org/dist/UNIVERSAL-isa")
     (synopsis "UNIVERSAL::isa() reimplementation")
     (description "This module attempts to recover from people calling
-UNIVERSAL::isa as a function")
+UNIVERSAL::isa as a function.")
     (license (package-license perl))))
 
 (define-public perl-variable-magic
diff --git a/gnu/packages/pretty-print.scm b/gnu/packages/pretty-print.scm
index 81b6537..7c0f50d 100644
--- a/gnu/packages/pretty-print.scm
+++ b/gnu/packages/pretty-print.scm
@@ -136,7 +136,7 @@ indentation counting, function and file indices and more.")
     (synopsis "Generating PostScript, including pretty-printing")
     (description
      "GNU Enscript is a program to convert ASCII text files to PostScript,
-HTML or RTF formats, to be stored in files or sent immediately to a printer. 
+HTML or RTF formats, to be stored in files or sent immediately to a printer.
 It also includes the capability to perform syntax highlighting for several
 different programming languages.")
     (license gpl3+)))
diff --git a/gnu/packages/pulseaudio.scm b/gnu/packages/pulseaudio.scm
index c7c5611..6eb16de 100644
--- a/gnu/packages/pulseaudio.scm
+++ b/gnu/packages/pulseaudio.scm
@@ -106,7 +106,7 @@ SRC provides a small set of converters to allow quality to be traded off
 against computation cost.  The current best converter provides a
 signal-to-noise ratio of 145dB with -3dB passband extending from DC to 96% of
 the theoretical best bandwidth for a given pair of input and output sample
-rates. ")
+rates.")
     (license l:gpl2+)))
 
 (define pulseaudio
@@ -173,11 +173,12 @@ rates. ")
     (home-page "http://www.pulseaudio.org/")
     (synopsis "Sound server")
     (description
-     "PulseAudio is a sound server.  It is basically a proxy for your sound applications.
-It allows you to do advanced operations on your sound data as it passes
-between your application and your hardware.  Things like transferring the
-audio to a different machine, changing the sample format or channel count and
-mixing several sounds into one are easily achieved using a sound server. ")
+     "PulseAudio is a sound server.  It is basically a proxy for your sound
+applications.  It allows you to do advanced operations on your sound data as
+it passes between your application and your hardware.  Things like
+transferring the audio to a different machine, changing the sample format or
+channel count and mixing several sounds into one are easily achieved using a
+sound server.")
 
     ;; PulseAudio is LGPLv2+, but some of the optional dependencies (GNU dbm,
     ;; FFTW, etc.) are GPL'd, so the result is effectively GPLv2+.  See
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index 5dcaba0..e2eaa31 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -628,7 +628,7 @@ datetime module, available in Python 2.3+.")
     (synopsis
      "Parse human-readable date/time text")
     (description
-     "Parse human-readable date/time text")
+     "Parse human-readable date/time text.")
     (license asl2.0)))
 
 (define-public python-pandas
@@ -808,7 +808,7 @@ Database API 2.0T.")
      "Mechanize implements stateful programmatic web browsing in Python,
 after Andy Lester’s Perl module WWW::Mechanize.")
     (license (non-copyleft "file://COPYING"
-                        "See COPYING in the distribution."))))
+                           "See COPYING in the distribution."))))
 
 
 (define-public python-simplejson
@@ -828,8 +828,9 @@ after Andy Lester’s Perl module WWW::Mechanize.")
     (synopsis
      "Json library for Python")
     (description
-     "JSON (JavaScript Object Notation) is a subset of JavaScript syntax
- (ECMA-262 3rd edition) used as a lightweight data interchange format.
+     "JSON (JavaScript Object Notation) is a subset of JavaScript
+syntax (ECMA-262 3rd edition) used as a lightweight data interchange
+format.
 
 Simplejson exposes an API familiar to users of the standard library marshal
 and pickle modules.  It is the externally maintained version of the json
@@ -1524,7 +1525,7 @@ executed.")
      "Python test discovery for unittest")
     (description
      "Discover provides test discovery for unittest, a feature that has been
-backported from Python 2.7 for Python 2.4+")
+backported from Python 2.7 for Python 2.4+.")
     (license bsd-3)))
 
 (define-public python2-discover
@@ -2147,7 +2148,7 @@ mining and data analysis.")
     (home-page "http://scikit-image.org/")
     (synopsis "Image processing in Python")
     (description
-     "scikit-image is a collection of algorithms for image processing.")
+     "Scikit-image is a collection of algorithms for image processing.")
     (license bsd-3)))
 
 (define-public python2-scikit-image
@@ -2318,7 +2319,7 @@ include_dirs = ~a/include
     (home-page "http://www.numpy.org/")
     (synopsis "Fundamental package for scientific computing with Python")
     (description "NumPy is the fundamental package for scientific computing
-with Python. It contains among other things: a powerful N-dimensional array
+with Python.  It contains among other things: a powerful N-dimensional array
 object, sophisticated (broadcasting) functions, tools for integrating C/C++
 and Fortran code, useful linear algebra, Fourier transform, and random number
 capabilities.")
diff --git a/gnu/packages/rdesktop.scm b/gnu/packages/rdesktop.scm
index 4ce3373..39a45c5 100644
--- a/gnu/packages/rdesktop.scm
+++ b/gnu/packages/rdesktop.scm
@@ -54,6 +54,6 @@
     (synopsis "Client for Windows Terminal Services")
     (description
      "rdesktop is a client for Microsoft's Windows Remote Desktop Services,
-capable of natively speaking Remote Desktop Protocol (RDP.)  It allows users
+capable of natively speaking Remote Desktop Protocol (RDP).  It allows users
 to remotely control a user's Windows desktop.")
     (license license:gpl3+)))
diff --git a/gnu/packages/rdf.scm b/gnu/packages/rdf.scm
index ce6b215..13ffa2a 100644
--- a/gnu/packages/rdf.scm
+++ b/gnu/packages/rdf.scm
@@ -162,7 +162,7 @@ Java Lucene text search engine API to C++.")
      "LRDF is a library to make it easy to manipulate RDF files describing
 LADSPA plugins.  It can also be used for general RDF manipulation.  It can
 read RDF/XLM and N3 files and export N3 files, and it also has a light
-taxonomic inference capablility.")
+taxonomic inference capability.")
     (license gpl2)))
 
 (define-public rasqal
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index bb7d865..a481365 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -195,7 +195,7 @@ announcement.")
                       ;; dependencies are not available right now.
                       (delete-file "tasks/cucumber.rake"))))))
     (synopsis "Building and packaging helper for Ruby native extensions")
-    (description "Rake-compiler proivides a framework for building and
+    (description "Rake-compiler provides a framework for building and
 packaging native C and Java extensions in Ruby.")
     (home-page "https://github.com/rake-compiler/rake-compiler")
     (license license:expat)))
@@ -316,7 +316,7 @@ standard diff-like tool.")
     (propagated-inputs
      `(("ruby-rspec-support" ,ruby-rspec-support)
        ("ruby-diff-lcs" ,ruby-diff-lcs-for-rspec)))
-    (synopsis "RSpec expecations library")
+    (synopsis "RSpec expectations library")
     (description "Rspec-expectations provides a simple API to express expected
 outcomes of a code example.")
     (home-page "https://github.com/rspec/rspec-expectations")
diff --git a/gnu/packages/slang.scm b/gnu/packages/slang.scm
index 577d7af..16054f2 100644
--- a/gnu/packages/slang.scm
+++ b/gnu/packages/slang.scm
@@ -61,11 +61,11 @@
     (synopsis "Library for interactive applications and extensibility")
     (description
      "S-Lang is a multi-platform programmer's library designed to allow a
-developer to create robust multi-platform software. It provides facilities
+developer to create robust multi-platform software.  It provides facilities
 required by interactive applications such as display/screen management,
-keyboard input, keymaps, and so on. The most exciting feature of the library
+keyboard input, keymaps, and so on.  The most exciting feature of the library
 is the slang interpreter that may be easily embedded into a program to make it
-extensible. While the emphasis has always been on the embedded nature of the
+extensible.  While the emphasis has always been on the embedded nature of the
 interpreter, it may also be used in a stand-alone fashion through the use of
 slsh, which is part of the S-Lang distribution.")
     (license license:gpl2+)))
diff --git a/gnu/packages/slim.scm b/gnu/packages/slim.scm
index c163f4f..8e25a5a 100644
--- a/gnu/packages/slim.scm
+++ b/gnu/packages/slim.scm
@@ -91,5 +91,5 @@ Features included: PNG and XFT support for alpha transparency and antialiased
 fonts, External themes support, Configurable runtime options: X server --
 login / shutdown / reboot commands, Single (GDM-like) or double (XDM-like)
 input control, Can load predefined user at startup, Configurable welcome /
-shutdown messages, Random theme selection")
+shutdown messages, Random theme selection.")
     (license l:gpl2)))
diff --git a/gnu/packages/telephony.scm b/gnu/packages/telephony.scm
index 8f3d597..858d7ef 100644
--- a/gnu/packages/telephony.scm
+++ b/gnu/packages/telephony.scm
@@ -124,7 +124,7 @@ to initiate and control SIP sessions.")
    (version "4.1.0")
    (source (origin
             (method url-fetch)
-            (uri (string-append 
+            (uri (string-append
                   "http://download.savannah.gnu.org/releases/exosip/libeXosip2-"
                   version ".tar.gz"))
             (sha256 (base32
@@ -133,11 +133,11 @@ to initiate and control SIP sessions.")
    (inputs `(("osip" ,osip)))
    (synopsis "Sip abstraction library")
    (description "EXosip is a library that hides the complexity of using the
-SIP protocol for mutlimedia session establishement.  This protocol is mainly to
+SIP protocol for multimedia session establishment.  This protocol is mainly to
 be used by VoIP telephony applications (endpoints or conference server) but
-might be also usefull for any application that wish to establish sessions like
+might be also useful for any application that wish to establish sessions like
 multiplayer games.")
-   (license gpl2+) 
+   (license gpl2+)
    ;; (plus OpenSSL linking exception)
    ;; http://git.savannah.gnu.org/cgit/exosip.git/plain/LICENSE.OpenSSL
     (home-page "http://savannah.nongnu.org/projects/exosip")))
@@ -153,23 +153,23 @@ multiplayer games.")
             (sha256 (base32
                      "0117c5iid1vrwl7sl3pys2jlinpmx2vfp8wcdwk93m7cc6k9793b"))))
    (build-system gnu-build-system)
-   ;; The configure.ac uses pkg-config but in a kludgy way which breaks when 
+   ;; The configure.ac uses pkg-config but in a kludgy way which breaks when
    ;; cross-compiling.  Among other issues there the program name "pkg-config"
    ;; is hard coded instead of respecting the PKG_CONFIG environment variable.
-   ;; Fortunately we can avoid the use of pkg-config and set the dependency 
-   ;; flags ourselves. 
-   (arguments `(#:configure-flags 
+   ;; Fortunately we can avoid the use of pkg-config and set the dependency
+   ;; flags ourselves.
+   (arguments `(#:configure-flags
                 `("--without-pkg-config"
-                  ,(string-append "UCOMMON_CFLAGS=-I" 
+                  ,(string-append "UCOMMON_CFLAGS=-I"
                                   (assoc-ref %build-inputs "ucommon") "/include")
                   "UCOMMON_LIBS=-lusecure -lucommon -lrt -ldl -lpthread"
-                  ,(string-append "LIBOSIP2_CFLAGS=-I" 
+                  ,(string-append "LIBOSIP2_CFLAGS=-I"
                                   (assoc-ref %build-inputs "osip") "/include")
                   "LIBOSIP2_LIBS=-losipparser2 -losip2"
-                  ,(string-append "--sysconfdir=" (assoc-ref %outputs "out") 
+                  ,(string-append "--sysconfdir=" (assoc-ref %outputs "out")
                                   "/etc")
                   "EXOSIP2_LIBS=-leXosip2"
-                  ,(string-append "EXOSIP2_CFLAGS=-I" 
+                  ,(string-append "EXOSIP2_CFLAGS=-I"
                                   (assoc-ref %build-inputs "exosip")
                                   "/include"))))
    (inputs `(("ucommon" ,ucommon)
diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm
index 3d0000e..68771c7 100644
--- a/gnu/packages/tls.scm
+++ b/gnu/packages/tls.scm
@@ -226,7 +226,7 @@ required structures.")
            (files '("etc/ssl/certs/ca-certificates.crt")))))
    (synopsis "SSL/TLS implementation")
    (description
-    "OpenSSL is an implementation of SSL/TLS")
+    "OpenSSL is an implementation of SSL/TLS.")
    (license license:openssl)
    (home-page "http://www.openssl.org/")))
 
diff --git a/gnu/packages/tmux.scm b/gnu/packages/tmux.scm
index 9cb35bb..a5c0bb2 100644
--- a/gnu/packages/tmux.scm
+++ b/gnu/packages/tmux.scm
@@ -46,6 +46,6 @@
     (description
      "tmux is a terminal multiplexer: it enables a number of terminals (or
 windows), each running a separate program, to be created, accessed, and
-controlled from a single screen. tmux may be detached from a screen and
+controlled from a single screen.  tmux may be detached from a screen and
 continue running in the background, then later reattached.")
     (license isc)))
diff --git a/gnu/packages/tre.scm b/gnu/packages/tre.scm
index 1a1aa02..721a350 100644
--- a/gnu/packages/tre.scm
+++ b/gnu/packages/tre.scm
@@ -31,7 +31,7 @@
     (source
       (origin
         (method url-fetch)
-        (uri       
+        (uri
           (string-append "http://laurikari.net/tre/" name "-" version
                          ".tar.bz2"))
         (sha256
@@ -52,6 +52,6 @@
     (synopsis "Approximate regex matching library and agrep utility")
     (description "Superset of the POSIX regex API, enabling approximate
 matching.  Also ships a version of the agrep utility which behaves similar to
-grep but features ineaxct matching.")
+grep but features inexact matching.")
     (home-page "http://laurikari.net/tre")
     (license bsd-2)))
diff --git a/gnu/packages/unrtf.scm b/gnu/packages/unrtf.scm
index 6c578ce..162dec7 100644
--- a/gnu/packages/unrtf.scm
+++ b/gnu/packages/unrtf.scm
@@ -64,7 +64,7 @@
     (home-page "http://www.gnu.org/software/unrtf")
     (synopsis "Convert Rich Text Format documents to other formats")
     (description
-     "GNU UnRTF converts text documents from RTF to HTML, LaTeX, or troff. 
+     "GNU UnRTF converts text documents from RTF to HTML, LaTeX, or troff.
 It supports changes in font characteristics, underlines and strikethroughs,
 superscripts and subscripts, and more.")
     (license gpl2+)))
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index e3498ee..eac0235 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -791,7 +791,7 @@ code control system SCCS.  This allows old code still under that system to be
 accessed and migrated on modern systems.")
     (license gpl3+)))
 
-;; This package can unfortunately work only in -TEST mode, since Aegis 
+;; This package can unfortunately work only in -TEST mode, since Aegis
 ;; requires that it is installed setuid root.
 (define-public aegis
   (package
@@ -799,7 +799,7 @@ accessed and migrated on modern systems.")
     (version "4.24")
     (source (origin
               (method url-fetch)
-              (uri (string-append "mirror://sourceforge/aegis/aegis-" 
+              (uri (string-append "mirror://sourceforge/aegis/aegis-"
                                   version ".tar.gz"))
               (sha256
                (base32
@@ -822,17 +822,17 @@ accessed and migrated on modern systems.")
        ("groff" ,groff)
        ("perl" ,perl)
        ;; Various tests require the following:
-       ("cvs" ,cvs) 
+       ("cvs" ,cvs)
        ("flex" ,flex)
        ("cook" ,cook)
        ("subversion" ,subversion)
        ("rcs" ,rcs)
        ("ed" ,ed)))
     (arguments
-     `(#:configure-flags (list "--with-no-aegis-configured" 
+     `(#:configure-flags (list "--with-no-aegis-configured"
                                "--sharedstatedir=/var/com/aegis")
        #:parallel-build? #f ; There are some nasty racy rules in the Makefile.
-       #:phases 
+       #:phases
         (alist-cons-before
          'configure 'pre-conf
          (lambda _
diff --git a/gnu/packages/vpn.scm b/gnu/packages/vpn.scm
index e4f0528..d866214 100644
--- a/gnu/packages/vpn.scm
+++ b/gnu/packages/vpn.scm
@@ -153,5 +153,5 @@ and probably others.")
 for creating secure point-to-point or site-to-site connections in routed or
 bridged configurations and remote access facilities.  It uses a custom
 security protocol that utilizes SSL/TLS for key exchange.  It is capable of
-traversing network address translators (NATs) and firewalls. ")
+traversing network address translators (NATs) and firewalls.")
     (license license:gpl2)))
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index a1d263c..6c24b62 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -364,7 +364,7 @@ files, checks if a given domain is a public suffix, provides immediate cookie
 domain verification, finds the longest public part of a given domain, finds
 the shortest private part of a given domain, works with international
 domains (UTF-8 and IDNA2008 Punycode), is thread-safe, and handles IDNA2008
-UTS#46")
+UTS#46.")
     (license l:x11)))
 
 (define-public tidy
@@ -432,7 +432,7 @@ used to validate and fix HTML data.")
     ;; All of the below are used to generate the documentation
     ;; (Should they be propagated inputs of asciidoc ??)
     (native-inputs `(("asciidoc" ,asciidoc)
-                     ("libxml2" ,libxml2) 
+                     ("libxml2" ,libxml2)
                      ("docbook-xml" ,docbook-xml)
                      ("docbook-xsl" ,docbook-xsl)
                      ("libxslt" ,libxslt)))
@@ -978,7 +978,7 @@ for you.  It will work even with Catalyst debug logging turned off.")
     (home-page "http://search.cpan.org/dist/Catalyst-Plugin-Authentication")
     (synopsis "Infrastructure plugin for the Catalyst authentication framework")
     (description "The authentication plugin provides generic user support for
-Catalyst apps. It is the basis for both authentication (checking the user is
+Catalyst apps.  It is the basis for both authentication (checking the user is
 who they claim to be), and authorization (allowing the user to do what the
 system authorises them to do).")
     (license (package-license perl))))
@@ -1147,7 +1147,7 @@ cookie mechanism.")
        ("perl-path-class" ,perl-path-class)))
     (home-page
      "http://search.cpan.org/dist/Catalyst-Plugin-Session-Store-FastMmap")
-    (synopsis "FastMmap session storage backend.")
+    (synopsis "FastMmap session storage backend")
     (description "Catalyst::Plugin::Session::Store::FastMmap is a fast session
 storage plugin for Catalyst that uses an mmap'ed file to act as a shared
 memory interprocess cache.  It is based on Cache::FastMmap.")
@@ -1326,7 +1326,7 @@ replaced with the contents of the X-Request-Base header.")
     (synopsis "Download data in many formats")
     (description "The purpose of this module is to provide a method for
 downloading data into many supportable formats.  For example, downloading a
-table based report in a variety of formats (CSV, HTML, etc.). ")
+table based report in a variety of formats (CSV, HTML, etc.).")
     (license (package-license perl))))
 
 (define-public perl-catalyst-view-json
@@ -2297,7 +2297,7 @@ or to multiple server ports.")
      `(("perl-io-socket-ssl" ,perl-io-socket-ssl)))
     (home-page "http://search.cpan.org/dist/Net-SMTP-SSL")
     (synopsis "SSL support for Net::SMTP")
-    (description "SSL support for Net::SMTP")
+    (description "SSL support for Net::SMTP.")
     (license (package-license perl))))
 
 (define-public perl-plack
diff --git a/gnu/packages/wget.scm b/gnu/packages/wget.scm
index d1413a7..f4ccb66 100644
--- a/gnu/packages/wget.scm
+++ b/gnu/packages/wget.scm
@@ -56,7 +56,7 @@
     (synopsis "Non-interactive command-line utility for downloading files")
     (description
      "GNU Wget is a non-interactive tool for fetching files using the HTTP,
-HTTPS and FTP protocols.  It can resume interrupted downloads, use filename
+HTTPS and FTP protocols.  It can resume interrupted downloads, use file name
 wild cards, supports proxies and cookies, and it can convert absolute links
 in downloaded documents to relative links.")
     (license gpl3+))) ; some files are under GPLv2+
diff --git a/gnu/packages/xdisorg.scm b/gnu/packages/xdisorg.scm
index f928aa1..1ed33e1 100644
--- a/gnu/packages/xdisorg.scm
+++ b/gnu/packages/xdisorg.scm
@@ -279,7 +279,7 @@ System style license, and has no special dependencies.")
      "Wmctrl allows to interact with an X window manager that is compatible
 with the EWMH/NetWM specification.  It can query the window manager for
 information, and request for certain window management actions (resize and
-move windows, switch between desktops, etc.)")
+move windows, switch between desktops, etc.).")
     (license license:gpl2+)))
 
 (define-public scrot
diff --git a/gnu/packages/xfce.scm b/gnu/packages/xfce.scm
index 8189418..5c8b3a6 100644
--- a/gnu/packages/xfce.scm
+++ b/gnu/packages/xfce.scm
@@ -157,7 +157,7 @@ storage system.")
     (synopsis "Widgets library for Xfce")
     (description
      "Libxfce4ui is the replacement of the old libxfcegui4 library.  It is used
-to share commonly used Xfce widgets amoung the Xfce applications.")
+to share commonly used Xfce widgets among the Xfce applications.")
     (license lgpl2.0+)))
 
 (define-public exo
@@ -497,7 +497,7 @@ fast.")
      "Thunar-volman is an extension for the Thunar File Manager, which enables
 automatic management of removable drives and media.  For example, if
 thunar-volman is installed and configured properly, and you plug in your
-digitcal camera, it will automatically spawn your preferred photo application
+digital camera, it will automatically spawn your preferred photo application
 and import the new pictures from your camera.")
     (license gpl2+)))
 
diff --git a/gnu/packages/xiph.scm b/gnu/packages/xiph.scm
index a1a3f3f..c4db640 100644
--- a/gnu/packages/xiph.scm
+++ b/gnu/packages/xiph.scm
@@ -318,12 +318,12 @@ incorporated technology from Skype's SILK codec and Xiph.Org's CELT codec.")
                     "ftp://ftp.mozilla.org/pub/mozilla.org/opus/opus-tools-"
                     version ".tar.gz"))
               (sha256
-               (base32 
+               (base32
                 "0fk4nknvl111k89j5yckmyrh6b2wvgyhrqfncp7rig3zikbkv1xi"))))
     (build-system gnu-build-system)
     (arguments
      ;; The package developers misuse pkg-config such that it doesn't work
-     ;; when cross compiling.  Therefore we avoid it completly and set the 
+     ;; when cross compiling.  Therefore we avoid it completly and set the
      ;; necessary flags ourselves.
      `(#:configure-flags (list (string-append "CFLAGS=-I"
                                               (assoc-ref %build-inputs "libogg")
@@ -333,11 +333,11 @@ incorporated technology from Skype's SILK codec and Xiph.Org's CELT codec.")
     (inputs `(("libogg" ,libogg)
               ("opus" ,opus)
               ("flac" ,flac)))
-    (synopsis "Command line utilities to encode, inspect, and decode .opus
-files")
+    (synopsis
+     "Command line utilities to encode, inspect, and decode .opus files")
     (description "Opus is a royalty-free, highly versatile audio codec.
 Opus-tools provide command line utilities for creating, inspecting and
-decoding .opus files")
+decoding .opus files.")
     (license license:bsd-3)
     (home-page "http://www.opus-codec.org")))
 
-- 
2.4.5


^ permalink raw reply related	[flat|nested] 49+ messages in thread

* Re: [PATCH] gnu packages: Clean up synopses and descriptions.
  2015-07-16 19:08     ` Ludovic Courtès
@ 2015-07-17 12:41       ` Alex Kost
  2015-07-17 21:24         ` Ludovic Courtès
  0 siblings, 1 reply; 49+ messages in thread
From: Alex Kost @ 2015-07-17 12:41 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel

Ludovic Courtès (2015-07-16 22:08 +0300) wrote:

> Alex Kost <alezost@gmail.com> skribis:
>
>> Eric Bavier (2015-07-16 12:40 +0300) wrote:
>>
>>> On Thu, 16 Jul 2015 14:17:22 +0300
>>> Alex Kost <alezost@gmail.com> wrote:
>>>
>>>> --- a/gnu/packages/base.scm
>>>> +++ b/gnu/packages/base.scm
>>>> @@ -58,7 +58,7 @@
>>>>              (sha256
>>>>               (base32
>>>> "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
>>>> (build-system gnu-build-system)
>>>> -   (synopsis "Hello, GNU world: An example GNU package")
>>>> +   (synopsis "Example GNU package")
>>>
>>> I have not looked over then entire patch, but this one caught my eye.
>>> We need to make sure that any changes you make here will not be
>>> expediently overwritten by an invocation of `make sync-descriptions`.
>>> I believe this has happened in the past already.
>>
>> I changed this synopsis because "guix lint" doesn't like when the first
>> word of a synopsis is the package name.
>
> The problem is that this rule sometimes conflicts with the
> ‘gnu-description’ checker (aka. ‘make sync-descriptions’), which checks
> upstream GNU descriptions.
>
> When such conflicts happen, we should give precedence to the GNU
> descriptions.

Oh, I see now.  But should we really give precedence to the GNU
descriptions?  For example, "guix lint libffcall" says that the proposed
description is "null (stale)".

Since we have our own conventions that are not necessarily coincide with
the upstream conventions, I believe it would be better to prefer our
synopses/descriptions instead.


And I think it would be good to adjust "guix lint" to avoid redundant
reports.  For example, with the current (GNU) synopsis, "guix lint
hello" says:

  … hello-2.10: synopsis should not start with the package name

With the modified synopsis, it would be:

  … hello-2.10: proposed synopsis: "Hello, GNU world: An example GNU package"

So no matter what variant is preferable ('synopsis' or
'gnu-description'), we have a warning.

I see that it's not a trivial change as lint-checkers are independent.
Perhaps there may be added some priorities, so when a stronger linter is
passed successfully, then there is no need to check for weaker linters.
(Sorry if it's not appropriate, it's just a not-very-well-formed idea :-))

-- 
Alex

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PATCHES] gnu packages: Clean up synopses and descriptions.
  2015-07-17 12:35     ` [PATCHES] gnu packages: Clean up synopses and descriptions Alex Kost
@ 2015-07-17 21:07       ` Mathieu Lirzin
  2015-07-17 21:30       ` Ludovic Courtès
  1 sibling, 0 replies; 49+ messages in thread
From: Mathieu Lirzin @ 2015-07-17 21:07 UTC (permalink / raw)
  To: Alex Kost; +Cc: guix-devel

Alex Kost <alezost@gmail.com> writes:

> So I'm attaching 2 patches: for lines with leading parenthesis and for
> fixing multiple "typos" (in a general meaning).  Changing
> synopses/descriptions according to "guix lint" (so no problems with
> 'gnu-description') and reorganizing lists are not included.

These 2 patches looks fine to me. thanks.

--
Mathieu Lirzin

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Texinfo in descriptions?
  2015-07-16 21:33     ` Mathieu Lirzin
@ 2015-07-17 21:18       ` Ludovic Courtès
  2015-07-21 21:37         ` Mathieu Lirzin
  0 siblings, 1 reply; 49+ messages in thread
From: Ludovic Courtès @ 2015-07-17 21:18 UTC (permalink / raw)
  To: Mathieu Lirzin; +Cc: guix-devel, Alex Kost

Mathieu Lirzin <mthl@openmailbox.org> skribis:

> ludo@gnu.org (Ludovic Courtès) writes:
>
>> What are your concerns and what would you prefer?  (I was left with the
>> impression that there was a rough consensus in the other thread, but
>> surely there’s a bias.)
>>
>> In Emacs it’s quite easily typed (C-x 8 RET etc.), and at worst people
>> can copy/paste it.
>
> My concerns are about the translators, who will have to care about more
> formatting (formatted variables are enough :)) and about my impression
> that keeping unformatted text can be more easily rendered in different
> contexts (guix package, guix web, guix.el and beyond!) but maybe I'm
> wrong.

Oh, sure.  We’re talking about very lightweight formatting though, not
very different from what we already have (bullets instead of dashes.)

> The first (probably stupid) idea that comes to my mind is to transform
> the description field into a list of multiple (unformatted) strings and
> sexps, where the responsability of the formatting is delegated to the
> program that actually displays the descriptions.  For the translator,
> the description will appear as 4 independent strings with no special
> formatting to take care.
>
>        (description
>         "XKBUtils is a collection of small utilities for X Keyboard (XKB)
>  extension to the X11 protocol.  It includes:"
>         '(unordered-list        ; Or a better symbol
>           "xkbbell: generate XKB bell events;"
>           "xkbvleds: display the state of LEDs on an XKB keyboard in a window;"
>           "xkbwatch: reports changes in the XKB keyboard state."))
>
> or with just nested lists
>
>        (description
>         "XKBUtils is a collection of small utilities for X Keyboard (XKB)
>  extension to the X11 protocol.  It includes:"
>         '("xkbbell: generate XKB bell events;"
>           "xkbvleds: display the state of LEDs on an XKB keyboard in a window;"
>           "xkbwatch: reports changes in the XKB keyboard state."))

No it’s not a stupid idea at all; it’s even “the right thing.”

However, as I wrote, this would be an important change, and I wouldn’t
know how to handle translations (basically ‘xgettext’ would not work
here.)  That also entails quite some work on the UI side: rendering,
--search handling, etc.

That said, it just occurred to me that we have one solution that could
work without too much work: Texinfo.  The (texinfo) modules in Guile are
good enough for our purposes (parsing, plain-text rendering, etc.), so
we could use simple markup like @code, @itemize, etc.  Descriptions
would remain plain strings, amenable to extraction by ‘xgettext’ (though
we’d need to check with the TP whether adding Texinfo markup is OK.)

What do people think?  Anyone willing to give it a try?

(Anyway, that shouldn’t influence much the review of Alex’s patches.)

Ludo’.

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PATCH] gnu packages: Clean up synopses and descriptions.
  2015-07-17 12:41       ` Alex Kost
@ 2015-07-17 21:24         ` Ludovic Courtès
  2015-07-18 10:07           ` Alex Kost
  0 siblings, 1 reply; 49+ messages in thread
From: Ludovic Courtès @ 2015-07-17 21:24 UTC (permalink / raw)
  To: Alex Kost; +Cc: guix-devel

Alex Kost <alezost@gmail.com> skribis:

> Ludovic Courtès (2015-07-16 22:08 +0300) wrote:

[...]

>> The problem is that this rule sometimes conflicts with the
>> ‘gnu-description’ checker (aka. ‘make sync-descriptions’), which checks
>> upstream GNU descriptions.
>>
>> When such conflicts happen, we should give precedence to the GNU
>> descriptions.
>
> Oh, I see now.  But should we really give precedence to the GNU
> descriptions?  For example, "guix lint libffcall" says that the proposed
> description is "null (stale)".

That’s a bug on our side: It means there’s no upstream description,
basically.

> Since we have our own conventions that are not necessarily coincide with
> the upstream conventions, I believe it would be better to prefer our
> synopses/descriptions instead.

I discussed with Karl Berry and Brandon Invergo who take care of it to
make sure we have roughly the same rules.  I’ve also adjusted ‘guix
lint’ accordingly (see notably 105c260.)

So I think we should keep using them and email bug-womb@gnu.org when we
want a change (see <https://lists.gnu.org/mailman/listinfo/bug-womb>.)

> And I think it would be good to adjust "guix lint" to avoid redundant
> reports.  For example, with the current (GNU) synopsis, "guix lint
> hello" says:
>
>   … hello-2.10: synopsis should not start with the package name
>
> With the modified synopsis, it would be:
>
>   … hello-2.10: proposed synopsis: "Hello, GNU world: An example GNU package"
>
> So no matter what variant is preferable ('synopsis' or
> 'gnu-description'), we have a warning.
>
> I see that it's not a trivial change as lint-checkers are independent.
> Perhaps there may be added some priorities, so when a stronger linter is
> passed successfully, then there is no need to check for weaker linters.
> (Sorry if it's not appropriate, it's just a not-very-well-formed idea :-))

Yes that would be ideal, and yes that’s non-trivial.  :-)

Thanks,
Ludo’.

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PATCHES] gnu packages: Clean up synopses and descriptions.
  2015-07-17 12:35     ` [PATCHES] gnu packages: Clean up synopses and descriptions Alex Kost
  2015-07-17 21:07       ` Mathieu Lirzin
@ 2015-07-17 21:30       ` Ludovic Courtès
  2015-07-18 10:08         ` Alex Kost
  1 sibling, 1 reply; 49+ messages in thread
From: Ludovic Courtès @ 2015-07-17 21:30 UTC (permalink / raw)
  To: Alex Kost; +Cc: guix-devel

Alex Kost <alezost@gmail.com> skribis:

> So I'm attaching 2 patches: for lines with leading parenthesis and for
> fixing multiple "typos" (in a general meaning).  Changing
> synopses/descriptions according to "guix lint" (so no problems with
> 'gnu-description') and reorganizing lists are not included.

OK.  These two other patches are welcome too.

> From 826749cbe4c75cee4cff8b96a5b47bc2687fb7c3 Mon Sep 17 00:00:00 2001
> From: Alex Kost <alezost@gmail.com>
> Date: Thu, 16 Jul 2015 12:14:13 +0300
> Subject: [PATCH 1/2] gnu packages: Avoid description lines with leading "(".
>
> * gnu/packages/curl.scm (curl): Reword description to avoid a line
>   beginning with "(" because such lines break font-lock highlighting
>   in Emacs.
> * gnu/packages/flashing-tools.scm (dfu-programmer): Likewise.
> * gnu/packages/games.scm (gnugo): Likewise.
> * gnu/packages/gnome.scm (json-glib): Likewise.
> * gnu/packages/image.scm (jbig2dec): Likewise.
> * gnu/packages/maths.scm (units): Likewise.
> * gnu/packages/pdf.scm (mupdf): Likewise.
> * gnu/packages/web.scm (perl-encode-locale): Likewise.
> * gnu/packages/wordnet.scm (wordnet): Likewise.
> * gnu/packages/xml.scm (libxml2):Likewise.

LGTM.  I think you should write “reformat” rather than “reword”, because
that’s what it does AFAICS.

> From 71bed1f3c64e8d7a8c5a8345210a74bbe37356a5 Mon Sep 17 00:00:00 2001
> From: Alex Kost <alezost@gmail.com>
> Date: Fri, 17 Jul 2015 15:16:07 +0300
> Subject: [PATCH 2/2] gnu packages: Clean up synopses and descriptions.
>
> * gnu/packages/admin.scm, gnu/packages/algebra.scm, gnu/packages/audio.scm,
>   gnu/packages/backup.scm, gnu/packages/base.scm, gnu/packages/bittorrent.scm,
>   gnu/packages/code.scm, gnu/packages/compression.scm,
>   gnu/packages/databases.scm, gnu/packages/enchant.scm,
>   gnu/packages/firmware.scm, gnu/packages/fonts.scm,
>   gnu/packages/freedesktop.scm, gnu/packages/games.scm, gnu/packages/gd.scm,
>   gnu/packages/gl.scm, gnu/packages/gnome.scm, gnu/packages/gsasl.scm,
>   gnu/packages/gstreamer.scm, gnu/packages/gtk.scm, gnu/packages/guile.scm,
>   gnu/packages/haskell.scm, gnu/packages/language.scm,
>   gnu/packages/lesstif.scm, gnu/packages/libreoffice.scm,
>   gnu/packages/linux.scm, gnu/packages/llvm.scm, gnu/packages/maths.scm,
>   gnu/packages/mcrypt.scm, gnu/packages/mit-krb5.scm, gnu/packages/mp3.scm,
>   gnu/packages/ncdu.scm, gnu/packages/networking.scm, gnu/packages/ntp.scm,
>   gnu/packages/ocaml.scm, gnu/packages/openbox.scm, gnu/packages/pdf.scm,
>   gnu/packages/perl.scm, gnu/packages/pretty-print.scm,
>   gnu/packages/pulseaudio.scm, gnu/packages/python.scm,
>   gnu/packages/rdesktop.scm, gnu/packages/rdf.scm, gnu/packages/ruby.scm,
>   gnu/packages/slang.scm, gnu/packages/slim.scm, gnu/packages/telephony.scm,
>   gnu/packages/tls.scm, gnu/packages/tmux.scm, gnu/packages/tre.scm,
>   gnu/packages/unrtf.scm, gnu/packages/version-control.scm,
>   gnu/packages/vpn.scm, gnu/packages/web.scm, gnu/packages/wget.scm,
>   gnu/packages/xdisorg.scm, gnu/packages/xfce.scm, gnu/packages/xiph.scm:
>   Fix typos.  Trim long lines.  Add missing periods in the end of sentences.
>   Use double spaces between sentences.  Remove trailing whitespaces.

OK.

Thank you!

Ludo’.

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PATCH] gnu packages: Clean up synopses and descriptions.
  2015-07-17 21:24         ` Ludovic Courtès
@ 2015-07-18 10:07           ` Alex Kost
  0 siblings, 0 replies; 49+ messages in thread
From: Alex Kost @ 2015-07-18 10:07 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel

Ludovic Courtès (2015-07-18 00:24 +0300) wrote:

> Alex Kost <alezost@gmail.com> skribis:
>
>> Ludovic Courtès (2015-07-16 22:08 +0300) wrote:
>
> [...]
>
>> Since we have our own conventions that are not necessarily coincide with
>> the upstream conventions, I believe it would be better to prefer our
>> synopses/descriptions instead.
>
> I discussed with Karl Berry and Brandon Invergo who take care of it to
> make sure we have roughly the same rules.  I’ve also adjusted ‘guix
> lint’ accordingly (see notably 105c260.)
>
> So I think we should keep using them and email bug-womb@gnu.org when we
> want a change (see <https://lists.gnu.org/mailman/listinfo/bug-womb>.)

Now I see, thanks for the pointers.

-- 
Alex

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PATCHES] gnu packages: Clean up synopses and descriptions.
  2015-07-17 21:30       ` Ludovic Courtès
@ 2015-07-18 10:08         ` Alex Kost
  2015-07-18 21:13           ` Andreas Enge
  0 siblings, 1 reply; 49+ messages in thread
From: Alex Kost @ 2015-07-18 10:08 UTC (permalink / raw)
  To: guix-devel

Ludovic Courtès (2015-07-18 00:30 +0300) wrote:

> Alex Kost <alezost@gmail.com> skribis:
>
>> So I'm attaching 2 patches: for lines with leading parenthesis and for
>> fixing multiple "typos" (in a general meaning).  Changing
>> synopses/descriptions according to "guix lint" (so no problems with
>> 'gnu-description') and reorganizing lists are not included.
>
> OK.  These two other patches are welcome too.

Thanks Mathieu and Ludovic for looking at these patches.  I've pushed
them and the patch for documenting xorg packages (since there should be
a separate commit for fixing lists, I think it doesn't matter how lists
look like in "xorg.scm" now).

>> From 826749cbe4c75cee4cff8b96a5b47bc2687fb7c3 Mon Sep 17 00:00:00 2001
>> From: Alex Kost <alezost@gmail.com>
>> Date: Thu, 16 Jul 2015 12:14:13 +0300
>> Subject: [PATCH 1/2] gnu packages: Avoid description lines with leading "(".
>>
>> * gnu/packages/curl.scm (curl): Reword description to avoid a line
>>   beginning with "(" because such lines break font-lock highlighting
>>   in Emacs.
>> * gnu/packages/flashing-tools.scm (dfu-programmer): Likewise.
>> * gnu/packages/games.scm (gnugo): Likewise.
>> * gnu/packages/gnome.scm (json-glib): Likewise.
>> * gnu/packages/image.scm (jbig2dec): Likewise.
>> * gnu/packages/maths.scm (units): Likewise.
>> * gnu/packages/pdf.scm (mupdf): Likewise.
>> * gnu/packages/web.scm (perl-encode-locale): Likewise.
>> * gnu/packages/wordnet.scm (wordnet): Likewise.
>> * gnu/packages/xml.scm (libxml2):Likewise.
>
> LGTM.  I think you should write “reformat” rather than “reword”, because
> that’s what it does AFAICS.

Yes, done.

-- 
Alex

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PATCHES] gnu packages: Clean up synopses and descriptions.
  2015-07-18 10:08         ` Alex Kost
@ 2015-07-18 21:13           ` Andreas Enge
  2015-07-19  9:58             ` Alex Kost
  0 siblings, 1 reply; 49+ messages in thread
From: Andreas Enge @ 2015-07-18 21:13 UTC (permalink / raw)
  To: Alex Kost; +Cc: guix-devel

Coming late, I have not followed the full discussion closely, so my remark
may be out of tune. I think our descriptions should be formatted as simply
as possible: just plain ascii text, which would work in any locale (or if
you insist, maybe utf8).

So far, I simply avoided lists in package descriptions; usually, by
replacing
"The bla package contains
- A
- B
- C"
by "The bla package contains A; B; C." or similarly.

Andreas

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PATCHES] gnu packages: Clean up synopses and descriptions.
  2015-07-18 21:13           ` Andreas Enge
@ 2015-07-19  9:58             ` Alex Kost
  0 siblings, 0 replies; 49+ messages in thread
From: Alex Kost @ 2015-07-19  9:58 UTC (permalink / raw)
  To: Andreas Enge; +Cc: guix-devel

Andreas Enge (2015-07-19 00:13 +0300) wrote:

> Coming late, I have not followed the full discussion closely, so my remark
> may be out of tune.

Not too late; the final decision on lists formatting has not been made
yet.  The last related post is Ludo's "Texinfo in descriptions?":
<http://lists.gnu.org/archive/html/guix-devel/2015-07/msg00471.html>.

> I think our descriptions should be formatted as simply
> as possible: just plain ascii text, which would work in any locale (or if
> you insist, maybe utf8).
>
> So far, I simply avoided lists in package descriptions; usually, by
> replacing
> "The bla package contains
> - A
> - B
> - C"
> by "The bla package contains A; B; C." or similarly.

This is good if A, B, C are not too long, but I think it is less
readable for more verbose list items (e.g., 'guile-json', 'xkb-utils',
'libdaemon', …).

-- 
Alex

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: Texinfo in descriptions?
  2015-07-17 21:18       ` Texinfo in descriptions? Ludovic Courtès
@ 2015-07-21 21:37         ` Mathieu Lirzin
  2015-07-22 13:35           ` Ludovic Courtès
  0 siblings, 1 reply; 49+ messages in thread
From: Mathieu Lirzin @ 2015-07-21 21:37 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel, Alex Kost

ludo@gnu.org (Ludovic Courtès) writes:
> However, as I wrote, this would be an important change, and I wouldn’t
> know how to handle translations (basically ‘xgettext’ would not work
> here.)  That also entails quite some work on the UI side: rendering,
> --search handling, etc.

Yeah, I don't know how to make that work too.

> That said, it just occurred to me that we have one solution that could
> work without too much work: Texinfo.  The (texinfo) modules in Guile are
> good enough for our purposes (parsing, plain-text rendering, etc.), so
> we could use simple markup like @code, @itemize, etc.  Descriptions
> would remain plain strings, amenable to extraction by ‘xgettext’ (though
> we’d need to check with the TP whether adding Texinfo markup is OK.)
>
> What do people think?  Anyone willing to give it a try?

As much as I would appreciate texinfo markup in that context, I think it
will still confuse our translator friends.  In 
(info "(gettext)Preparing Strings") we can found this:

--8<---------------cut here---------------start------------->8---
   Unusual markup or control characters should not be used in
translatable strings.  Translators will likely not understand the
particular meaning of the markup or control characters.

   For example, if you have a convention that ‘|’ delimits the left-hand
and right-hand part of some GUI elements, translators will often not
understand it without specific comments.  It might be better to have the
translator translate the left-hand and right-hand part separately.

[...]

   HTML markup, however, is common enough that it’s probably ok to use
in translatable strings.  But please bear in mind that the GNU gettext
tools don’t verify that the translations are well-formed HTML.
--8<---------------cut here---------------end--------------->8---

Sure HTML markup will not be pretty, but at least it will not encourage
people to put lists everywhere (for example for listing features instead
of describing what the package is doing).

On the same info node we can find this ...

--8<---------------cut here---------------start------------->8---
   Many GNU programs have a ‘--help’ output that extends over several
screen pages.  It is a courtesy towards the translators to split such a
message into several ones of five to ten lines each.  While doing that,
you can also attempt to split the documented options into groups, such
as the input options, the output options, and the informative output
options.  This will help every user to find the option he is looking
for.
--8<---------------cut here---------------end--------------->8---

... which can give the idea that formatting in a translatable string is
acceptable.  So eventually I don't know what to think of all of
this. (except that I'm not in favour of using '•')

My secret dream is that descriptions (and their translation) would be
managed directly in the FSD (Free Software Directory) so that we can
import those directly and care only about the building and deployment
process ;).

--
Mathieu Lirzin

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: Texinfo in descriptions?
  2015-07-21 21:37         ` Mathieu Lirzin
@ 2015-07-22 13:35           ` Ludovic Courtès
  2015-07-22 21:24             ` Ludovic Courtès
  0 siblings, 1 reply; 49+ messages in thread
From: Ludovic Courtès @ 2015-07-22 13:35 UTC (permalink / raw)
  To: Mathieu Lirzin; +Cc: guix-devel, Alex Kost

Mathieu Lirzin <mthl@openmailbox.org> skribis:

> ludo@gnu.org (Ludovic Courtès) writes:

[...]

> As much as I would appreciate texinfo markup in that context, I think it
> will still confuse our translator friends.  In 
> (info "(gettext)Preparing Strings") we can found this:

[...]

> Sure HTML markup will not be pretty, but at least it will not encourage
> people to put lists everywhere (for example for listing features instead
> of describing what the package is doing).

Well, we can email the coordinator asking what they think of this.
Although not my favorite choice, HTML/XML would be fine too, as long as
we restrict ourselves to a clear subset.

(gnu.org actually uses the descriptions from the Womb (like we do), but
adds HTML markup in it:
<https://lists.gnu.org/archive/html/guix-devel/2014-01/msg00074.html>.)

> My secret dream is that descriptions (and their translation) would be
> managed directly in the FSD (Free Software Directory) so that we can
> import those directly and care only about the building and deployment
> process ;).

This has been discussed in the past (‘TODO’ has an item about it.)
Unfortunately, there is currently no way to do it automatically.  I’m
also not sure whether our criteria match theirs.

Thanks,
Ludo’.

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: Texinfo in descriptions?
  2015-07-22 13:35           ` Ludovic Courtès
@ 2015-07-22 21:24             ` Ludovic Courtès
  2015-07-22 22:08               ` Andreas Enge
  2015-08-27 21:04               ` Mathieu Lirzin
  0 siblings, 2 replies; 49+ messages in thread
From: Ludovic Courtès @ 2015-07-22 21:24 UTC (permalink / raw)
  To: Mathieu Lirzin; +Cc: guix-devel, Alex Kost

ludo@gnu.org (Ludovic Courtès) skribis:

> Well, we can email the coordinator asking what they think of this.

With Benno being OK, we should start looking at implementing the change.
The various parts that I can think of are:

  • Having a ‘package-description-string’ procedure that would return
    the description rendered as a string, using the (stexi) modules.

  • ‘--search’ could use the raw description (including markup).
    However, ‘package->recutils’ must use ‘package-description-string’
    or similar.

  • guix.el, guix-web, and the web site need to do the right thing when
    displaying descriptions.

Any volunteer?  :-)

Ludo’.

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: Texinfo in descriptions?
  2015-07-22 21:24             ` Ludovic Courtès
@ 2015-07-22 22:08               ` Andreas Enge
  2015-07-23  9:49                 ` Mathieu Lirzin
  2015-07-23 13:54                 ` Ludovic Courtès
  2015-08-27 21:04               ` Mathieu Lirzin
  1 sibling, 2 replies; 49+ messages in thread
From: Andreas Enge @ 2015-07-22 22:08 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel, Alex Kost

On Wed, Jul 22, 2015 at 11:24:10PM +0200, Ludovic Courtès wrote:
> With Benno being OK, we should start looking at implementing the change.

Is there a consensus on the usefulness of the change? So far (but this may
be a classical case of confirmation bias) I noticed mainly voices against
the use of markup or at least with moderated enthusiasm.

Andreas

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: Texinfo in descriptions?
  2015-07-22 22:08               ` Andreas Enge
@ 2015-07-23  9:49                 ` Mathieu Lirzin
  2015-07-23 13:57                   ` Ludovic Courtès
  2015-07-23 13:54                 ` Ludovic Courtès
  1 sibling, 1 reply; 49+ messages in thread
From: Mathieu Lirzin @ 2015-07-23  9:49 UTC (permalink / raw)
  To: Andreas Enge; +Cc: guix-devel, Alex Kost

Andreas Enge <andreas@enge.fr> writes:

> On Wed, Jul 22, 2015 at 11:24:10PM +0200, Ludovic Courtès wrote:
>> With Benno being OK, we should start looking at implementing the change.

Good news! I'm interested in implementing this change.  I can't dedicate
my time to do this right now, but I can do it within a period of one
month.  If someone is willing to do the work sooner, I have no problem
with that.

> Is there a consensus on the usefulness of the change? So far (but this may
> be a classical case of confirmation bias) I noticed mainly voices against
> the use of markup or at least with moderated enthusiasm.

I agree with you that there is room for discussion.

IMO Texinfo markup is a good compromise between using HTML or ASCII.  It
is lightweight enough to not be intrusive, and It is not specific to
Guix.  I think the last point is important because choosing texinfo
means we have a full documentation to which we can refer, plus an already
implemented Guile module for text manipulation.  Eventually using
texinfo participate in the unity of the GNU project.

At least my enthusiasm cannot be described as moderated now ;).  My
concerns were about translation issues but since we got the green light
from Benno, I am totally OK with the choice of texinfo.

--
Mathieu Lirzin

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: Texinfo in descriptions?
  2015-07-22 22:08               ` Andreas Enge
  2015-07-23  9:49                 ` Mathieu Lirzin
@ 2015-07-23 13:54                 ` Ludovic Courtès
  1 sibling, 0 replies; 49+ messages in thread
From: Ludovic Courtès @ 2015-07-23 13:54 UTC (permalink / raw)
  To: Andreas Enge; +Cc: guix-devel, Alex Kost

Andreas Enge <andreas@enge.fr> skribis:

> On Wed, Jul 22, 2015 at 11:24:10PM +0200, Ludovic Courtès wrote:
>> With Benno being OK, we should start looking at implementing the change.
>
> Is there a consensus on the usefulness of the change? So far (but this may
> be a classical case of confirmation bias) I noticed mainly voices against
> the use of markup or at least with moderated enthusiasm.

With my own bias ;-), I didn’t notice opposition to markup, but I’m
happy to (re)read arguments that I overlooked.

But really, I expect that maybe 80% of the descriptions won’t contain
any markup.  I do not expect markup to become pervasive, though of
course there’ll be a temptation to use @code instead of quotes in some
places, for instance (but I would reject a patch that replaces all
quotes with @code, for example.)

Ludo’.

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: Texinfo in descriptions?
  2015-07-23  9:49                 ` Mathieu Lirzin
@ 2015-07-23 13:57                   ` Ludovic Courtès
  2015-07-23 15:09                     ` Daniel Pimentel
  2015-08-25 22:09                     ` Mathieu Lirzin
  0 siblings, 2 replies; 49+ messages in thread
From: Ludovic Courtès @ 2015-07-23 13:57 UTC (permalink / raw)
  To: Mathieu Lirzin; +Cc: guix-devel, Alex Kost

Mathieu Lirzin <mthl@openmailbox.org> skribis:

> Andreas Enge <andreas@enge.fr> writes:
>
>> On Wed, Jul 22, 2015 at 11:24:10PM +0200, Ludovic Courtès wrote:
>>> With Benno being OK, we should start looking at implementing the change.
>
> Good news! I'm interested in implementing this change.  I can't dedicate
> my time to do this right now, but I can do it within a period of one
> month.  If someone is willing to do the work sooner, I have no problem
> with that.

FWIW I won’t be working (at all ;-)) in the coming weeks, so I’m happy
if you (or someone else) works on this sometime while I’m away.  :-)

Ludo’.

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: Texinfo in descriptions?
  2015-07-23 13:57                   ` Ludovic Courtès
@ 2015-07-23 15:09                     ` Daniel Pimentel
  2015-07-23 18:00                       ` Andreas Enge
  2015-08-25 22:09                     ` Mathieu Lirzin
  1 sibling, 1 reply; 49+ messages in thread
From: Daniel Pimentel @ 2015-07-23 15:09 UTC (permalink / raw)
  To: ludo; +Cc: guix-devel, Alex Kost, guix-devel-bounces+d4n1=opmbx.org

On 2015-07-23 10:57, ludo@gnu.org wrote:
> Mathieu Lirzin <mthl@openmailbox.org> skribis:
> 
>> Andreas Enge <andreas@enge.fr> writes:
>> 
>>> On Wed, Jul 22, 2015 at 11:24:10PM +0200, Ludovic Courtès wrote:
>>>> With Benno being OK, we should start looking at implementing the 
>>>> change.
>> 
>> Good news! I'm interested in implementing this change.  I can't 
>> dedicate
>> my time to do this right now, but I can do it within a period of one
>> month.  If someone is willing to do the work sooner, I have no problem
>> with that.
> 
> FWIW I won’t be working (at all ;-)) in the coming weeks, so I’m happy
> if you (or someone else) works on this sometime while I’m away.  :-)
> 
> Ludo’.
I'd like help. What do I do?
-- 
Daniel Pimentel (d4n1 3:)

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: Texinfo in descriptions?
  2015-07-23 15:09                     ` Daniel Pimentel
@ 2015-07-23 18:00                       ` Andreas Enge
  0 siblings, 0 replies; 49+ messages in thread
From: Andreas Enge @ 2015-07-23 18:00 UTC (permalink / raw)
  To: Daniel Pimentel; +Cc: guix-devel, guix-devel-bounces+d4n1=opmbx.org, Alex Kost

So there actually seems to be quite a bit of enthusiasm for this feature,
which proves me wrong! :-)

Andreas

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: Texinfo in descriptions?
  2015-07-23 13:57                   ` Ludovic Courtès
  2015-07-23 15:09                     ` Daniel Pimentel
@ 2015-08-25 22:09                     ` Mathieu Lirzin
  2015-08-26  7:57                       ` Andy Wingo
  1 sibling, 1 reply; 49+ messages in thread
From: Mathieu Lirzin @ 2015-08-25 22:09 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel

ludo@gnu.org (Ludovic Courtès) writes:

> Mathieu Lirzin <mthl@openmailbox.org> skribis:
>
>> Andreas Enge <andreas@enge.fr> writes:
>>
>>> On Wed, Jul 22, 2015 at 11:24:10PM +0200, Ludovic Courtès wrote:
>>>> With Benno being OK, we should start looking at implementing the change.
>>
>> Good news! I'm interested in implementing this change.  I can't dedicate
>> my time to do this right now, but I can do it within a period of one
>> month.  If someone is willing to do the work sooner, I have no problem
>> with that.
>
> FWIW I won’t be working (at all ;-)) in the coming weeks, so I’m happy
> if you (or someone else) works on this sometime while I’m away.  :-)

I'm sending this email to notify that even if the estimated period of
work has ended.  I am still working on it.

--
Mathieu Lirzin

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: Texinfo in descriptions?
  2015-08-25 22:09                     ` Mathieu Lirzin
@ 2015-08-26  7:57                       ` Andy Wingo
  2015-08-27 19:48                         ` Mathieu Lirzin
  0 siblings, 1 reply; 49+ messages in thread
From: Andy Wingo @ 2015-08-26  7:57 UTC (permalink / raw)
  To: Mathieu Lirzin; +Cc: guix-devel

On Wed 26 Aug 2015 00:09, Mathieu Lirzin <mthl@openmailbox.org> writes:

> ludo@gnu.org (Ludovic Courtès) writes:
>
>> Mathieu Lirzin <mthl@openmailbox.org> skribis:
>>
>>> Andreas Enge <andreas@enge.fr> writes:
>>>
>>>> On Wed, Jul 22, 2015 at 11:24:10PM +0200, Ludovic Courtès wrote:
>>>>> With Benno being OK, we should start looking at implementing the change.
>>>
>>> Good news! I'm interested in implementing this change.  I can't dedicate
>>> my time to do this right now, but I can do it within a period of one
>>> month.  If someone is willing to do the work sooner, I have no problem
>>> with that.
>>
>> FWIW I won’t be working (at all ;-)) in the coming weeks, so I’m happy
>> if you (or someone else) works on this sometime while I’m away.  :-)
>
> I'm sending this email to notify that even if the estimated period of
> work has ended.  I am still working on it.

Will all docstrings be parsed as texinfo?  To me this is the proper
solution, since plain text is mostly a subset of texinfo.  It could be
that all descriptions are already texinfo.  You just have to be careful
about @ { and } when used literally -- they need replacing with @@ @{
and @}.

In Guile I've had a hack that tries to render docstrings as texinfo,
falling back to a @verbatim block otherwise, but I don't recommend it:

  (use-modules (texinfo) (texinfo plain-text) (ice-9 regexp))

  (define many-space? (make-regexp "[[:space:]][[:space:]][[:space:]]"))
  (define initial-space? (make-regexp "^[[:space:]]"))
  (define (string->stexi str)
    (or (and (or (not str) (string-null? str))
             '(*fragment*))
        (and (or (string-index str #\@)
                 (and (not (regexp-exec many-space? str))
                      (not (regexp-exec initial-space? str))))
             (false-if-exception
              (texi-fragment->stexi str)))
        `(*fragment* (verbatim ,str))))
  (define (string-format str)
    (stexi->plain-text (string->stexi str)))

Better to just adopt texinfo and fix up any descriptions that need it.
Probably you could use guix package -s and recutils to grep for
descriptions that need patching.

Andy

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: Texinfo in descriptions?
  2015-08-26  7:57                       ` Andy Wingo
@ 2015-08-27 19:48                         ` Mathieu Lirzin
  0 siblings, 0 replies; 49+ messages in thread
From: Mathieu Lirzin @ 2015-08-27 19:48 UTC (permalink / raw)
  To: Andy Wingo; +Cc: guix-devel

Andy Wingo <wingo@igalia.com> writes:

> Will all docstrings be parsed as texinfo?  To me this is the proper
> solution, since plain text is mostly a subset of texinfo.

Yes, that's the idea.

>  It could be
> that all descriptions are already texinfo.  You just have to be careful
> about @ { and } when used literally -- they need replacing with @@ @{
> and @}.
>
> In Guile I've had a hack that tries to render docstrings as texinfo,
> falling back to a @verbatim block otherwise, but I don't recommend it:
>
>   (use-modules (texinfo) (texinfo plain-text) (ice-9 regexp))
>
>   (define many-space? (make-regexp "[[:space:]][[:space:]][[:space:]]"))
>   (define initial-space? (make-regexp "^[[:space:]]"))
>   (define (string->stexi str)
>     (or (and (or (not str) (string-null? str))
>              '(*fragment*))
>         (and (or (string-index str #\@)
>                  (and (not (regexp-exec many-space? str))
>                       (not (regexp-exec initial-space? str))))
>              (false-if-exception
>               (texi-fragment->stexi str)))
>         `(*fragment* (verbatim ,str))))
>   (define (string-format str)
>     (stexi->plain-text (string->stexi str)))
>
> Better to just adopt texinfo and fix up any descriptions that need it.
> Probably you could use guix package -s and recutils to grep for
> descriptions that need patching.

Thank you very much for the tips and experience sharing!

--
Mathieu Lirzin

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: Texinfo in descriptions?
  2015-07-22 21:24             ` Ludovic Courtès
  2015-07-22 22:08               ` Andreas Enge
@ 2015-08-27 21:04               ` Mathieu Lirzin
  2015-08-28 21:47                 ` Mathieu Lirzin
  2015-08-30 10:10                 ` Alex Kost
  1 sibling, 2 replies; 49+ messages in thread
From: Mathieu Lirzin @ 2015-08-27 21:04 UTC (permalink / raw)
  To: guix-devel; +Cc: Alex Kost

[-- Attachment #1: Type: text/plain, Size: 747 bytes --]

ludo@gnu.org (Ludovic Courtès) writes:

> With Benno being OK, we should start looking at implementing the change.
> The various parts that I can think of are:
>
>   • Having a ‘package-description-string’ procedure that would return
>     the description rendered as a string, using the (stexi) modules.
>
>   • ‘--search’ could use the raw description (including markup).
>     However, ‘package->recutils’ must use ‘package-description-string’
>     or similar.

Here is a first attempt.  It doesn't feel right to me but fornow I don't
know what to do without duplicating code or reorganizing the world.  The
problem is that translations are handle in (guix ui) so we need to
regenerate texi->plain-text.


[-- Attachment #2: 0001-packages-Add-package-description-string.patch --]
[-- Type: text/x-diff, Size: 7141 bytes --]

From 665c92dc5e9976719ac7a6e427253b6ee65c78d8 Mon Sep 17 00:00:00 2001
From: Mathieu Lirzin <mthl@openmailbox.org>
Date: Fri, 7 Aug 2015 00:10:43 +0200
Subject: [PATCH] packages: Add package-description-string.

* guix/packages.scm (package-description-string): New variable.
* guix/utils.scm (texi->plain-text): Likewise.
* guix/ui.scm (package->recutils): 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.
---
 gnu/packages/perl.scm   | 6 +++---
 gnu/packages/python.scm | 2 +-
 guix/packages.scm       | 6 ++++++
 guix/ui.scm             | 5 +++--
 guix/utils.scm          | 8 ++++++++
 5 files changed, 21 insertions(+), 6 deletions(-)

diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index f784798..0236d05 100644
--- a/gnu/packages/perl.scm
+++ b/gnu/packages/perl.scm
@@ -1665,7 +1665,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
@@ -1909,7 +1909,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.")
@@ -1953,7 +1953,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 940efec..07275d7 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -1171,7 +1171,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/packages.scm b/guix/packages.scm
index 3983d14..56d0f56 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015 Mathieu Lirzin <mthl@openmailbox.org>
 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -71,6 +72,7 @@
             package-replacement
             package-synopsis
             package-description
+            package-description-string
             package-license
             package-home-page
             package-supported-systems
@@ -315,6 +317,10 @@ representation."
   "Return the full name of PACKAGE--i.e., `NAME-VERSION'."
   (string-append (package-name package) "-" (package-version package)))
 
+(define (package-description-string package)
+  "Return a plain-text representation of PACKAGE description field."
+  (texi->plain-text (package-description package)))
+
 (define (%standard-patch-inputs)
   (let* ((canonical (module-ref (resolve-interface '(gnu packages base))
                                 'canonical-package))
diff --git a/guix/ui.scm b/guix/ui.scm
index a6d4fd1..f0a31f3 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 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.
@@ -784,8 +785,8 @@ followed by \"+ \", which makes for a valid multi-line field value in the
                                                   80)))
   "Write to PORT a `recutils' record of package P, arranging to fit within
 WIDTH columns."
-  (define (description->recutils str)
-    (let ((str (P_ str)))
+  (define (description->recutils package)
+    (let ((str (texi->plain-text (P_ str))))
       (string->recutils
        (fill-paragraph str width
                        (string-length "description: ")))))
diff --git a/guix/utils.scm b/guix/utils.scm
index 44913c6..e6513aa 100644
--- a/guix/utils.scm
+++ b/guix/utils.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2013, 2014, 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
+;;; Copyright © 2015 Mathieu Lirzin <mthl@openmailbox.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -38,6 +39,8 @@
   #:use-module (ice-9 regex)
   #:use-module (ice-9 match)
   #:use-module (ice-9 format)
+  #:use-module (texinfo)
+  #:use-module (texinfo plain-text)
   #:use-module (system foreign)
   #:export (bytevector->base16-string
             base16-string->bytevector
@@ -72,6 +75,7 @@
             version-major+minor
             guile-version>?
             package-name->name+version
+            texi->plain-text
             string-replace-substring
             arguments-from-environment-variable
             file-extension
@@ -594,6 +598,10 @@ introduce the version part."
       ((head tail ...)
        (loop tail (cons head prefix))))))
 
+(define (texi->plain-text str)
+  "Return a plain-text representation of texinfo fragment STR."
+  (stexi->plain-text (texi-fragment->stexi str)))
+
 (define (file-extension file)
   "Return the extension of FILE or #f if there is none."
   (let ((dot (string-rindex file #\.)))
-- 
2.1.4


[-- Attachment #3: Type: text/plain, Size: 195 bytes --]


>
>   • guix.el, guix-web, and the web site need to do the right thing when
>     displaying descriptions.

I've succeed to do something for the website but with the same
aftertaste.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #4: 0001-website-packages-Support-Texinfo-s-markup.patch --]
[-- Type: text/x-diff, Size: 1820 bytes --]

From 66ddc73d11fd6b9b5fb77021a04e42086096fc79 Mon Sep 17 00:00:00 2001
From: Mathieu Lirzin <mthl@openmailbox.org>
Date: Thu, 27 Aug 2015 17:51:11 +0200
Subject: [PATCH] website: packages: Support Texinfo's markup.

* website/www/packages.scm (package->sxml): Adapt to new Texinfo's
  markup in package description.
---
 website/www/packages.scm | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/website/www/packages.scm b/website/www/packages.scm
index 09da932..48ed703 100644
--- a/website/www/packages.scm
+++ b/website/www/packages.scm
@@ -37,6 +37,8 @@
   #:use-module (ice-9 i18n)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-19)
+  #:use-module (texinfo)
+  #:use-module (texinfo html)
   #:export (packages-page))
 
 (define lookup-gnu-package
@@ -170,6 +172,12 @@ decreasing, is 1."
                             (package-transitive-supported-systems package)))
                       " ")))
 
+  (define (package-description-shtml package)
+    "Return a SXML representation of PACKAGE description field with HTML
+vocabulary."
+    (and=> (package-description package)
+           (lambda (str) (stexi->shtml (texi-fragment->stexi str)))))
+
   (define (package-logo name)
     (and=> (lookup-gnu-package name)
            gnu-package-logo))
@@ -203,7 +211,7 @@ description-ids as formal parameters."
                                  (class "package-logo")
                                  (alt ("Logo of " ,(package-name package))))))
                        (_ #f))
-                    (p ,(package-description package))
+                    (p ,(package-description-shtml package))
                     ,(license package)
                     (a (@ (href ,(package-home-page package))
                           (title "Link to the package's website"))
-- 
2.1.4


[-- Attachment #5: Type: text/plain, Size: 395 bytes --]


What "feels right" to me is to redefine 'package-description' in (guix
package) to return an stexi output by default with optional #:plain-text
#:l10n keys And that each interface handle other ways of displaying
description by using (stexi->...).  IIUC This would lead to reorganize a
few modules so I prefer asking for advices or other proposals before
digging too far. ;)

--
Mathieu Lirzin


^ permalink raw reply related	[flat|nested] 49+ messages in thread

* Re: Texinfo in descriptions?
  2015-08-27 21:04               ` Mathieu Lirzin
@ 2015-08-28 21:47                 ` Mathieu Lirzin
  2015-08-30 17:23                   ` Ludovic Courtès
  2015-08-30 10:10                 ` Alex Kost
  1 sibling, 1 reply; 49+ messages in thread
From: Mathieu Lirzin @ 2015-08-28 21:47 UTC (permalink / raw)
  To: guix-devel; +Cc: Alex Kost

[-- Attachment #1: Type: text/plain, Size: 1291 bytes --]

Mathieu Lirzin <mthl@openmailbox.org> writes:

> From 665c92dc5e9976719ac7a6e427253b6ee65c78d8 Mon Sep 17 00:00:00 2001
> From: Mathieu Lirzin <mthl@openmailbox.org>
> Date: Fri, 7 Aug 2015 00:10:43 +0200
> Subject: [PATCH] packages: Add package-description-string.
>
> * guix/packages.scm (package-description-string): New variable.
> * guix/utils.scm (texi->plain-text): Likewise.
> * guix/ui.scm (package->recutils): 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.
> ---
>  gnu/packages/perl.scm   | 6 +++---
>  gnu/packages/python.scm | 2 +-
>  guix/packages.scm       | 6 ++++++
>  guix/ui.scm             | 5 +++--
>  guix/utils.scm          | 8 ++++++++
>  5 files changed, 21 insertions(+), 6 deletions(-)
>
[...]
> -  (define (description->recutils str)
> -    (let ((str (P_ str)))
> +  (define (description->recutils package)
                                    ^^^
> +    (let ((str (texi->plain-text (P_ str))))
>        (string->recutils
>         (fill-paragraph str width
>                         (string-length "description: ")))))

There is a mistake here, it should be 'str' instead of 'package'.

Here is the updated draft.


[-- Attachment #2: 0001-packages-Add-package-description-string.patch --]
[-- Type: text/x-diff, Size: 7037 bytes --]

From e98c0ec3b609c077bf471cf838f12f54a89a0226 Mon Sep 17 00:00:00 2001
From: Mathieu Lirzin <mthl@openmailbox.org>
Date: Fri, 7 Aug 2015 00:10:43 +0200
Subject: [PATCH] packages: Add package-description-string.

* guix/packages.scm (package-description-string): New variable.
* guix/utils.scm (texi->plain-text): Likewise.
* guix/ui.scm (package->recutils): 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.
---
 gnu/packages/perl.scm   | 6 +++---
 gnu/packages/python.scm | 2 +-
 guix/packages.scm       | 6 ++++++
 guix/ui.scm             | 3 ++-
 guix/utils.scm          | 8 ++++++++
 5 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index f784798..0236d05 100644
--- a/gnu/packages/perl.scm
+++ b/gnu/packages/perl.scm
@@ -1665,7 +1665,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
@@ -1909,7 +1909,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.")
@@ -1953,7 +1953,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 940efec..07275d7 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -1171,7 +1171,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/packages.scm b/guix/packages.scm
index 3983d14..56d0f56 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015 Mathieu Lirzin <mthl@openmailbox.org>
 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -71,6 +72,7 @@
             package-replacement
             package-synopsis
             package-description
+            package-description-string
             package-license
             package-home-page
             package-supported-systems
@@ -315,6 +317,10 @@ representation."
   "Return the full name of PACKAGE--i.e., `NAME-VERSION'."
   (string-append (package-name package) "-" (package-version package)))
 
+(define (package-description-string package)
+  "Return a plain-text representation of PACKAGE description field."
+  (texi->plain-text (package-description package)))
+
 (define (%standard-patch-inputs)
   (let* ((canonical (module-ref (resolve-interface '(gnu packages base))
                                 'canonical-package))
diff --git a/guix/ui.scm b/guix/ui.scm
index a6d4fd1..0f66301 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 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.
@@ -785,7 +786,7 @@ followed by \"+ \", which makes for a valid multi-line field value in the
   "Write to PORT a `recutils' record of package P, arranging to fit within
 WIDTH columns."
   (define (description->recutils str)
-    (let ((str (P_ str)))
+    (let ((str (texi->plain-text (P_ str))))
       (string->recutils
        (fill-paragraph str width
                        (string-length "description: ")))))
diff --git a/guix/utils.scm b/guix/utils.scm
index 44913c6..e6513aa 100644
--- a/guix/utils.scm
+++ b/guix/utils.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2013, 2014, 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
+;;; Copyright © 2015 Mathieu Lirzin <mthl@openmailbox.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -38,6 +39,8 @@
   #:use-module (ice-9 regex)
   #:use-module (ice-9 match)
   #:use-module (ice-9 format)
+  #:use-module (texinfo)
+  #:use-module (texinfo plain-text)
   #:use-module (system foreign)
   #:export (bytevector->base16-string
             base16-string->bytevector
@@ -72,6 +75,7 @@
             version-major+minor
             guile-version>?
             package-name->name+version
+            texi->plain-text
             string-replace-substring
             arguments-from-environment-variable
             file-extension
@@ -594,6 +598,10 @@ introduce the version part."
       ((head tail ...)
        (loop tail (cons head prefix))))))
 
+(define (texi->plain-text str)
+  "Return a plain-text representation of texinfo fragment STR."
+  (stexi->plain-text (texi-fragment->stexi str)))
+
 (define (file-extension file)
   "Return the extension of FILE or #f if there is none."
   (let ((dot (string-rindex file #\.)))
-- 
2.5.0


[-- Attachment #3: Type: text/plain, Size: 22 bytes --]


--
Mathieu Lirzin




^ permalink raw reply related	[flat|nested] 49+ messages in thread

* Re: Texinfo in descriptions?
  2015-08-27 21:04               ` Mathieu Lirzin
  2015-08-28 21:47                 ` Mathieu Lirzin
@ 2015-08-30 10:10                 ` Alex Kost
  2015-08-30 12:24                   ` Mathieu Lirzin
  1 sibling, 1 reply; 49+ messages in thread
From: Alex Kost @ 2015-08-30 10:10 UTC (permalink / raw)
  To: Mathieu Lirzin; +Cc: guix-devel

Mathieu Lirzin (2015-08-28 00:04 +0300) wrote:

> ludo@gnu.org (Ludovic Courtès) writes:
>
>> With Benno being OK, we should start looking at implementing the change.
>> The various parts that I can think of are:
>>
>>   • Having a ‘package-description-string’ procedure that would return
>>     the description rendered as a string, using the (stexi) modules.
>>
>>   • ‘--search’ could use the raw description (including markup).
>>     However, ‘package->recutils’ must use ‘package-description-string’
>>     or similar.
>
> Here is a first attempt.  It doesn't feel right to me but fornow I don't
> know what to do without duplicating code or reorganizing the world.  The
> problem is that translations are handle in (guix ui) so we need to
> regenerate texi->plain-text.

I don't understand what you mean by 'regenerate texi->plain-text'.

> -  (define (description->recutils str)
> -    (let ((str (P_ str)))
> +  (define (description->recutils str)
> +    (let ((str (texi->plain-text (P_ str))))

IIUC there is no need to use 'texi->plain-text' here.  Instead you can
replace 'package-description' with 'package-description-string' in the
body of 'package->recutils'.  Or did I miss anything?

Also I think the same replacement should be done in (guix scripts lint)
and (guix scripts package).

The rest looks absolutely fine for me.
-- 
Alex

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: Texinfo in descriptions?
  2015-08-30 10:10                 ` Alex Kost
@ 2015-08-30 12:24                   ` Mathieu Lirzin
  2015-08-30 15:19                     ` Alex Kost
  0 siblings, 1 reply; 49+ messages in thread
From: Mathieu Lirzin @ 2015-08-30 12:24 UTC (permalink / raw)
  To: Alex Kost; +Cc: guix-devel

Alex Kost <alezost@gmail.com> writes:

> Mathieu Lirzin (2015-08-28 00:04 +0300) wrote:
>
>> Here is a first attempt.  It doesn't feel right to me but fornow I don't
>> know what to do without duplicating code or reorganizing the world.  The
>> problem is that translations are handle in (guix ui) so we need to
>> regenerate texi->plain-text.
>
> I don't understand what you mean by 'regenerate texi->plain-text'.

Maybe the correct expression should have been "reiterate
texi->plain-text".  What I meant was that the process of converting from
texinfo to plain-text need to be done in (guix ui) too, because
translated package description are texinfo fragment.

>> -  (define (description->recutils str)
>> -    (let ((str (P_ str)))
>> +  (define (description->recutils str)
>> +    (let ((str (texi->plain-text (P_ str))))
>
> IIUC there is no need to use 'texi->plain-text' here.  Instead you can
> replace 'package-description' with 'package-description-string' in the
> body of 'package->recutils'.  Or did I miss anything?

That was my first solution before realizing that this will lead to a
problem that this unrealistic example illustrates.

  ;; with fr_FR.UTF-8 locale

  (package-description foo)
  => "socks @code{foo}."

  (package-description-string foo)
  => "socks `foo'.\n\n"

  (N_ (package-description foo))
  => "chaussettes @code{foo}."

  (N_ (package-description-string foo))
  => "socks `foo'.\n\n"

In the last evaluation gettext was unable to find the translated string
corresponding to msgid "socks `foo'.\n\n".

> Also I think the same replacement should be done in (guix scripts
> lint) ...

I think more can be done in (guix scripts lint).  For example checking
if invoking 'package-description-string' fails which would indicate that
the markup is not correctly used.

> ... and (guix scripts package).

This script uses 'package-description' to search in it.  IIUC it was
suggested by Ludo to search using the raw Texinfo fragment and to
display using the plain-text version.
<https://lists.gnu.org/archive/html/guix-devel/2015-07/msg00609.html>

Thank you very much for your reply, :)

--
Mathieu Lirzin

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: Texinfo in descriptions?
  2015-08-30 12:24                   ` Mathieu Lirzin
@ 2015-08-30 15:19                     ` Alex Kost
  0 siblings, 0 replies; 49+ messages in thread
From: Alex Kost @ 2015-08-30 15:19 UTC (permalink / raw)
  To: Mathieu Lirzin; +Cc: guix-devel

Mathieu Lirzin (2015-08-30 15:24 +0300) wrote:

> Alex Kost <alezost@gmail.com> writes:
>
>> Mathieu Lirzin (2015-08-28 00:04 +0300) wrote:
>>
>>> Here is a first attempt.  It doesn't feel right to me but fornow I don't
>>> know what to do without duplicating code or reorganizing the world.  The
>>> problem is that translations are handle in (guix ui) so we need to
>>> regenerate texi->plain-text.
>>
>> I don't understand what you mean by 'regenerate texi->plain-text'.
>
> Maybe the correct expression should have been "reiterate
> texi->plain-text".  What I meant was that the process of converting from
> texinfo to plain-text need to be done in (guix ui) too, because
> translated package description are texinfo fragment.

Ah, now I understand what you mean.

>>> -  (define (description->recutils str)
>>> -    (let ((str (P_ str)))
>>> +  (define (description->recutils str)
>>> +    (let ((str (texi->plain-text (P_ str))))
>>
>> IIUC there is no need to use 'texi->plain-text' here.  Instead you can
>> replace 'package-description' with 'package-description-string' in the
>> body of 'package->recutils'.  Or did I miss anything?
>
> That was my first solution before realizing that this will lead to a
> problem that this unrealistic example illustrates.
>
>   ;; with fr_FR.UTF-8 locale
>
>   (package-description foo)
>   => "socks @code{foo}."
>
>   (package-description-string foo)
>   => "socks `foo'.\n\n"
>
>   (N_ (package-description foo))
>   => "chaussettes @code{foo}."
>
>   (N_ (package-description-string foo))
>   => "socks `foo'.\n\n"
>
> In the last evaluation gettext was unable to find the translated string
> corresponding to msgid "socks `foo'.\n\n".

Now I see, thanks for the explanation!  Honestly I don't know
how/when/where this translation stuff happens, so I don't have any
useful comments.

>> Also I think the same replacement should be done in (guix scripts
>> lint) ...
>
> I think more can be done in (guix scripts lint).  For example checking
> if invoking 'package-description-string' fails which would indicate that
> the markup is not correctly used.

Indeed.

>> ... and (guix scripts package).
>
> This script uses 'package-description' to search in it.  IIUC it was
> suggested by Ludo to search using the raw Texinfo fragment and to
> display using the plain-text version.
> <https://lists.gnu.org/archive/html/guix-devel/2015-07/msg00609.html>
>
> Thank you very much for your reply, :)

It wasn't a very useful reply, isn't it :-)  Sorry for the noize.

-- 
Alex

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: Texinfo in descriptions?
  2015-08-28 21:47                 ` Mathieu Lirzin
@ 2015-08-30 17:23                   ` Ludovic Courtès
  2015-08-30 19:06                     ` Alex Kost
  2015-08-30 20:42                     ` Mathieu Lirzin
  0 siblings, 2 replies; 49+ messages in thread
From: Ludovic Courtès @ 2015-08-30 17:23 UTC (permalink / raw)
  To: Mathieu Lirzin; +Cc: guix-devel, Alex Kost

Mathieu Lirzin <mthl@openmailbox.org> skribis:

> From e98c0ec3b609c077bf471cf838f12f54a89a0226 Mon Sep 17 00:00:00 2001
> From: Mathieu Lirzin <mthl@openmailbox.org>
> Date: Fri, 7 Aug 2015 00:10:43 +0200
> Subject: [PATCH] packages: Add package-description-string.
>
> * guix/packages.scm (package-description-string): New variable.
> * guix/utils.scm (texi->plain-text): Likewise.
> * guix/ui.scm (package->recutils): 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.

LGTM.

We must also make sure that the Emacs UI (and guix-web, but that’s a
different repo) use ‘package-description-string’ instead of
‘package-description’.

For Emacs, I think it’s enough to
s/package-description/package-description-string/ in guix-main.scm.
Alex?

>  5 files changed, 20 insertions(+), 5 deletions(-)

I like that it’s all it takes.  :-)

Any performance figures?  For instance, time of ‘guix package -s’ before
and after?

> That was my first solution before realizing that this will lead to a
> problem that this unrealistic example illustrates.
>
>   ;; with fr_FR.UTF-8 locale
>
>   (package-description foo)
>   => "socks @code{foo}."
>
>   (package-description-string foo)
>   => "socks `foo'.\n\n"
>
>   (N_ (package-description foo))
>   => "chaussettes @code{foo}."
>
>   (N_ (package-description-string foo))
>   => "socks `foo'.\n\n"
>
> In the last evaluation gettext was unable to find the translated string
> corresponding to msgid "socks `foo'.\n\n".

What about moving ‘package-description-string’ to (guix ui) and have it
do both rendering and translation?

If an application really needs rendered-but-not-translated stuff, it can
always use (compose texi-fragment->text package-description); I think
that’d be an unusual use case anyway.

>> Also I think the same replacement should be done in (guix scripts
>> lint) ...
>
> I think more can be done in (guix scripts lint).  For example checking
> if invoking 'package-description-string' fails which would indicate that
> the markup is not correctly used.

Sure, we should do that after.

>> ... and (guix scripts package).
>
> This script uses 'package-description' to search in it.  IIUC it was
> suggested by Ludo to search using the raw Texinfo fragment and to
> display using the plain-text version.
> <https://lists.gnu.org/archive/html/guix-devel/2015-07/msg00609.html>

Right, since ‘package->recutils’ uses ‘package-description-string’, we
know that all the output is correctly rendered and translated.

Nice work, thanks!

Ludo’.

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: Texinfo in descriptions?
  2015-08-30 17:23                   ` Ludovic Courtès
@ 2015-08-30 19:06                     ` Alex Kost
  2015-08-30 20:42                     ` Mathieu Lirzin
  1 sibling, 0 replies; 49+ messages in thread
From: Alex Kost @ 2015-08-30 19:06 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel

Ludovic Courtès (2015-08-30 20:23 +0300) wrote:

> Mathieu Lirzin <mthl@openmailbox.org> skribis:
>
>> From e98c0ec3b609c077bf471cf838f12f54a89a0226 Mon Sep 17 00:00:00 2001
>> From: Mathieu Lirzin <mthl@openmailbox.org>
>> Date: Fri, 7 Aug 2015 00:10:43 +0200
>> Subject: [PATCH] packages: Add package-description-string.
>>
>> * guix/packages.scm (package-description-string): New variable.
>> * guix/utils.scm (texi->plain-text): Likewise.
>> * guix/ui.scm (package->recutils): 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.
>
> LGTM.
>
> We must also make sure that the Emacs UI (and guix-web, but that’s a
> different repo) use ‘package-description-string’ instead of
> ‘package-description’.
>
> For Emacs, I think it’s enough to
> s/package-description/package-description-string/ in guix-main.scm.
> Alex?

Yes, and there is only one 'package-description' in guix-main.scm.

-- 
Alex

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: Texinfo in descriptions?
  2015-08-30 17:23                   ` Ludovic Courtès
  2015-08-30 19:06                     ` Alex Kost
@ 2015-08-30 20:42                     ` Mathieu Lirzin
  2015-08-31 21:21                       ` Ludovic Courtès
  1 sibling, 1 reply; 49+ messages in thread
From: Mathieu Lirzin @ 2015-08-30 20:42 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel, Alex Kost

[-- Attachment #1: Type: text/plain, Size: 2010 bytes --]

Here is an updated patch.

ludo@gnu.org (Ludovic Courtès) writes:

> Mathieu Lirzin <mthl@openmailbox.org> skribis:
>
>> From e98c0ec3b609c077bf471cf838f12f54a89a0226 Mon Sep 17 00:00:00 2001
>> From: Mathieu Lirzin <mthl@openmailbox.org>
>> Date: Fri, 7 Aug 2015 00:10:43 +0200
>> Subject: [PATCH] packages: Add package-description-string.
>>
>> * guix/packages.scm (package-description-string): New variable.
>> * guix/utils.scm (texi->plain-text): Likewise.
>> * guix/ui.scm (package->recutils): 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.
>
> LGTM.
>
> We must also make sure that the Emacs UI (and guix-web, but that’s a
> different repo) use ‘package-description-string’ instead of
> ‘package-description’.
>
> For Emacs, I think it’s enough to
> s/package-description/package-description-string/ in guix-main.scm.
> Alex?

Added.

>
>>  5 files changed, 20 insertions(+), 5 deletions(-)
>
> I like that it’s all it takes.  :-)

5 files changed, 18 insertions(+), 11 deletions(-)
Can you say less?! :)

> Any performance figures?  For instance, time of ‘guix package -s’ before
> and after?

With the updated patch I have obtained the following results for command

  time ./pre-inst-env guix package -s e

- without patch:
real	0m25.381s
user	0m8.740s
sys	0m0.184s

- with patch:
real	0m24.556s
user	0m10.448s
sys	0m0.220s

This test has revealed one missing modification for "perl-dbd-pg"
package description.

> What about moving ‘package-description-string’ to (guix ui) and have it
> do both rendering and translation?
>
> If an application really needs rendered-but-not-translated stuff, it can
> always use (compose texi-fragment->text package-description); I think
> that’d be an unusual use case anyway.

Yeah that's a nice minimal solution! Thanks.


[-- Attachment #2: 0001-ui-Add-package-description-string.patch --]
[-- Type: text/x-diff, Size: 7223 bytes --]

From bb1ce4f315912e49d4416c2ed213f5f93e802db1 Mon Sep 17 00:00:00 2001
From: Mathieu Lirzin <mthl@openmailbox.org>
Date: Fri, 7 Aug 2015 00:10:43 +0200
Subject: [PATCH] ui: Add package-description-string.

Provide support for Texinfo's markup in package description.

* guix/ui.scm (package-description-string): New variable.
  (package->recutils): Use it.
* emacs/guix-main.scm (%package-param-alist): Likewise.
* gnu/packages/databases.scm (perl-dbd-pg): Adapt to Texinfo's markup.
* gnu/packages/perl.scm (perl-devel-globaldestruction)
  (perl-devel-lexalias, perl-exporter-lite): Likewise.
* gnu/packages/python.scm (python2-empy): Likewise.
---
 emacs/guix-main.scm        |  2 +-
 gnu/packages/databases.scm |  2 +-
 gnu/packages/perl.scm      |  6 +++---
 gnu/packages/python.scm    |  2 +-
 guix/ui.scm                | 17 ++++++++++++-----
 5 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/emacs/guix-main.scm b/emacs/guix-main.scm
index fe224fb..73173f2 100644
--- a/emacs/guix-main.scm
+++ b/emacs/guix-main.scm
@@ -281,7 +281,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/databases.scm b/gnu/packages/databases.scm
index cbac16e..1710d0e 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -578,7 +578,7 @@ columns, primary keys, unique constraints and relationships.")
        ("postgresql" ,postgresql)))
     (home-page "http://search.cpan.org/dist/DBD-Pg")
     (synopsis "DBI PostgreSQL interface")
-    (description "")
+    (description #f)
     (license (package-license perl))))
 
 (define-public perl-dbd-sqlite
diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index f784798..0236d05 100644
--- a/gnu/packages/perl.scm
+++ b/gnu/packages/perl.scm
@@ -1665,7 +1665,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
@@ -1909,7 +1909,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.")
@@ -1953,7 +1953,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 940efec..07275d7 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -1171,7 +1171,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 8de8e3c..d355bd9 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,8 @@
   #: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)
   #:export (_
             N_
             P_
@@ -69,6 +72,7 @@
             switch-symlinks
             config-directory
             fill-paragraph
+            package-description-string
             string->recutils
             package->recutils
             package-specification->name+version+output
@@ -767,6 +771,11 @@ converted to a space; sequences of more than one line break are preserved."
 ;;; Packages.
 ;;;
 
+(define (package-description-string package)
+  "Return a plain-text representation of PACKAGE description field."
+  (and=> (package-description package)
+         (compose stexi->plain-text texi-fragment->stexi 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
@@ -786,10 +795,8 @@ followed by \"+ \", which makes for a valid multi-line field value in the
   "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: ")))))
+    (string->recutils
+     (fill-paragraph str width (string-length "description: "))))
 
   (define (dependencies->recutils packages)
     (let ((list (string-join (map package-full-name
@@ -835,7 +842,7 @@ WIDTH columns."
                       (or (and=> (package-synopsis p) P_)
                           "")))
   (format port "description: ~a~%"
-          (and=> (package-description p) description->recutils))
+          (and=> (package-description-string p) description->recutils))
   (newline port))
 
 (define (string->generations str)
-- 
2.5.0


[-- Attachment #3: Type: text/plain, Size: 23 bytes --]


And for the website.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #4: 0001-website-packages-Support-Texinfo-s-markup.patch --]
[-- Type: text/x-diff, Size: 1807 bytes --]

From 3c69e9f79f4d5bd5a75d4c083769caf32c1a63ec Mon Sep 17 00:00:00 2001
From: Mathieu Lirzin <mthl@openmailbox.org>
Date: Thu, 27 Aug 2015 17:51:11 +0200
Subject: [PATCH] website: packages: Support Texinfo's markup.

* website/www/packages.scm (package->sxml): Adapt to new Texinfo's
  markup in package description.
---
 website/www/packages.scm | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/website/www/packages.scm b/website/www/packages.scm
index 09da932..fe4fb2b 100644
--- a/website/www/packages.scm
+++ b/website/www/packages.scm
@@ -37,6 +37,8 @@
   #:use-module (ice-9 i18n)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-19)
+  #:use-module (texinfo)
+  #:use-module (texinfo html)
   #:export (packages-page))
 
 (define lookup-gnu-package
@@ -170,6 +172,12 @@ decreasing, is 1."
                             (package-transitive-supported-systems package)))
                       " ")))
 
+  (define (package-description-shtml package)
+    "Return a SXML representation of PACKAGE description field with HTML
+vocabulary."
+    (and=> (package-description package)
+           (compose stexi->shtml texi-fragment->stexi)))
+
   (define (package-logo name)
     (and=> (lookup-gnu-package name)
            gnu-package-logo))
@@ -203,7 +211,7 @@ description-ids as formal parameters."
                                  (class "package-logo")
                                  (alt ("Logo of " ,(package-name package))))))
                        (_ #f))
-                    (p ,(package-description package))
+                    (p ,(package-description-shtml package))
                     ,(license package)
                     (a (@ (href ,(package-home-page package))
                           (title "Link to the package's website"))
-- 
2.5.0


[-- Attachment #5: Type: text/plain, Size: 19 bytes --]


--
Mathieu Lirzin

^ permalink raw reply related	[flat|nested] 49+ messages in thread

* Re: Texinfo in descriptions?
  2015-08-30 20:42                     ` Mathieu Lirzin
@ 2015-08-31 21:21                       ` Ludovic Courtès
  2015-09-01 16:41                         ` Mathieu Lirzin
  2015-09-02 21:27                         ` Mathieu Lirzin
  0 siblings, 2 replies; 49+ messages in thread
From: Ludovic Courtès @ 2015-08-31 21:21 UTC (permalink / raw)
  To: Mathieu Lirzin; +Cc: guix-devel, Alex Kost

Mathieu Lirzin <mthl@openmailbox.org> skribis:

>> Any performance figures?  For instance, time of ‘guix package -s’ before
>> and after?
>
> With the updated patch I have obtained the following results for command
>
>   time ./pre-inst-env guix package -s e
>
> - without patch:
> real	0m25.381s
> user	0m8.740s
> sys	0m0.184s
>
> - with patch:
> real	0m24.556s
> user	0m10.448s
> sys	0m0.220s

Sounds good.

[...]

> +(define (package-description-string package)
> +  "Return a plain-text representation of PACKAGE description field."
> +  (and=> (package-description package)
> +         (compose stexi->plain-text texi-fragment->stexi 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
> @@ -786,10 +795,8 @@ followed by \"+ \", which makes for a valid multi-line field value in the
>    "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: ")))))
> +    (string->recutils
> +     (fill-paragraph str width (string-length "description: "))))

One last thing (I swear!).

AFAICS ‘stexi->plain-text’ already does paragraph filling, so the call
above is redundant (and could break the rendering.)

However, the width of the rendered text is fixed, unlike what
‘string->recutils’ did so far.  To work around that, we’ll have to
monkey-patch the ‘wrap*’ procedure of (texinfo plain-text), along these
lines:

  (define %text-width
    (make-parameter (or (and=> (getenv "WIDTH") string->number)
                        80)))

  (set! (@@ (texinfo plain-text) wrap*)
        (lambda strings
          ... #:line-width (%text-width) ...))

and then in ‘package->recutils’, we need to ‘parameterize’ that.

We need a similar hack for #:initial-indent, that would allow us to
mimic the 3rd argument of ‘fill-paragraph’.

Could you try it?

> From 3c69e9f79f4d5bd5a75d4c083769caf32c1a63ec Mon Sep 17 00:00:00 2001
> From: Mathieu Lirzin <mthl@openmailbox.org>
> Date: Thu, 27 Aug 2015 17:51:11 +0200
> Subject: [PATCH] website: packages: Support Texinfo's markup.
>
> * website/www/packages.scm (package->sxml): Adapt to new Texinfo's
>   markup in package description.

LGTM!

Thanks,
Ludo’.

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: Texinfo in descriptions?
  2015-08-31 21:21                       ` Ludovic Courtès
@ 2015-09-01 16:41                         ` Mathieu Lirzin
  2015-09-02 21:27                         ` Mathieu Lirzin
  1 sibling, 0 replies; 49+ messages in thread
From: Mathieu Lirzin @ 2015-09-01 16:41 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel, Alex Kost

ludo@gnu.org (Ludovic Courtès) writes:

> AFAICS ‘stexi->plain-text’ already does paragraph filling, so the call
> above is redundant (and could break the rendering.)
>
> However, the width of the rendered text is fixed, unlike what
> ‘string->recutils’ did so far.  To work around that, we’ll have to
> monkey-patch the ‘wrap*’ procedure of (texinfo plain-text), along these
> lines:
>
>   (define %text-width
>     (make-parameter (or (and=> (getenv "WIDTH") string->number)
>                         80)))
>
>   (set! (@@ (texinfo plain-text) wrap*)
>         (lambda strings
>           ... #:line-width (%text-width) ...))
>
> and then in ‘package->recutils’, we need to ‘parameterize’ that.
>
> We need a similar hack for #:initial-indent, that would allow us to
> mimic the 3rd argument of ‘fill-paragraph’.
>
> Could you try it?

With my limited knowledge, it's not trivial to implement such thing. But
I will try to do something and hopefully learn new things! :)

--
Mathieu Lirzin

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: Texinfo in descriptions?
  2015-08-31 21:21                       ` Ludovic Courtès
  2015-09-01 16:41                         ` Mathieu Lirzin
@ 2015-09-02 21:27                         ` Mathieu Lirzin
  2015-09-03 22:12                           ` Ludovic Courtès
  1 sibling, 1 reply; 49+ messages in thread
From: Mathieu Lirzin @ 2015-09-02 21:27 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel, Alex Kost

[-- Attachment #1: Type: text/plain, Size: 965 bytes --]

ludo@gnu.org (Ludovic Courtès) writes:

> One last thing (I swear!).
>
> AFAICS ‘stexi->plain-text’ already does paragraph filling, so the call
> above is redundant (and could break the rendering.)
>
> However, the width of the rendered text is fixed, unlike what
> ‘string->recutils’ did so far.  To work around that, we’ll have to
> monkey-patch the ‘wrap*’ procedure of (texinfo plain-text), along these
> lines:
>
>   (define %text-width
>     (make-parameter (or (and=> (getenv "WIDTH") string->number)
>                         80)))
>
>   (set! (@@ (texinfo plain-text) wrap*)
>         (lambda strings
>           ... #:line-width (%text-width) ...))
>
> and then in ‘package->recutils’, we need to ‘parameterize’ that.
>
> We need a similar hack for #:initial-indent, that would allow us to
> mimic the 3rd argument of ‘fill-paragraph’.

Thanks for noticing this problem.  Here is an updated patch.  


[-- Attachment #2: 0001-ui-Add-package-description-string.patch --]
[-- Type: text/x-diff, Size: 8626 bytes --]

From e691c2080929dd1390184ab4669de8b2695a237f Mon Sep 17 00:00:00 2001
From: Mathieu Lirzin <mthl@openmailbox.org>
Date: Fri, 7 Aug 2015 00:10:43 +0200
Subject: [PATCH] ui: Add package-description-string.

Provide support for Texinfo's markup in package description.

* guix/ui.scm (%text-width, %initial-indent): New parameters.
  (package-description-string): New variable.
  (package->recutils): Use them.
* emacs/guix-main.scm (%package-param-alist): Use it.
* gnu/packages/databases.scm (perl-dbd-pg): Adapt to Texinfo's markup.
* gnu/packages/perl.scm (perl-devel-globaldestruction)
  (perl-devel-lexalias, perl-exporter-lite): Likewise.
* gnu/packages/python.scm (python2-empy): Likewise.
---
 emacs/guix-main.scm        |  2 +-
 gnu/packages/databases.scm |  2 +-
 gnu/packages/perl.scm      |  6 +++---
 gnu/packages/python.scm    |  2 +-
 guix/ui.scm                | 47 +++++++++++++++++++++++++++++++++-------------
 5 files changed, 40 insertions(+), 19 deletions(-)

diff --git a/emacs/guix-main.scm b/emacs/guix-main.scm
index fe224fb..73173f2 100644
--- a/emacs/guix-main.scm
+++ b/emacs/guix-main.scm
@@ -281,7 +281,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/databases.scm b/gnu/packages/databases.scm
index cbac16e..1710d0e 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -578,7 +578,7 @@ columns, primary keys, unique constraints and relationships.")
        ("postgresql" ,postgresql)))
     (home-page "http://search.cpan.org/dist/DBD-Pg")
     (synopsis "DBI PostgreSQL interface")
-    (description "")
+    (description #f)
     (license (package-license perl))))
 
 (define-public perl-dbd-sqlite
diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index f784798..0236d05 100644
--- a/gnu/packages/perl.scm
+++ b/gnu/packages/perl.scm
@@ -1665,7 +1665,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
@@ -1909,7 +1909,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.")
@@ -1953,7 +1953,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 940efec..07275d7 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -1171,7 +1171,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 8de8e3c..11465c5 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
@@ -767,6 +772,29 @@ 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)))
+
+(define %initial-indent
+  (make-parameter ""))
+
+(set! (@@ (texinfo plain-text) wrap*)
+      ;; Monkey patch this private procedure to let 'package->recutils'
+      ;; parameterize the fill of description field correctly.
+      (lambda strings
+        (fill-string (string-concatenate strings)
+                     #:line-width (%text-width)
+                     #:initial-indent (%initial-indent))))
+
+(define (package-description-string package)
+  "Return a plain-text representation of PACKAGE description field."
+  (and=> (package-description package)
+         (compose (cut string-trim-right <> #\newline)
+                  stexi->plain-text
+                  texi-fragment->stexi
+                  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
@@ -779,18 +807,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<?)) " ")))
@@ -834,9 +853,11 @@ 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%"
+          (and=> (parameterize ((%text-width width)
+                                (%initial-indent "description: "))
+                   (package-description-string p))
+                 string->recutils)))
 
 (define (string->generations str)
   "Return the list of generations matching a pattern in STR.  This function
-- 
2.5.0


[-- Attachment #3: Type: text/plain, Size: 19 bytes --]


--
Mathieu Lirzin

^ permalink raw reply related	[flat|nested] 49+ messages in thread

* Re: Texinfo in descriptions?
  2015-09-02 21:27                         ` Mathieu Lirzin
@ 2015-09-03 22:12                           ` Ludovic Courtès
  2015-09-04 19:43                             ` Mathieu Lirzin
  0 siblings, 1 reply; 49+ messages in thread
From: Ludovic Courtès @ 2015-09-03 22:12 UTC (permalink / raw)
  To: Mathieu Lirzin; +Cc: guix-devel, Alex Kost

Mathieu Lirzin <mthl@openmailbox.org> skribis:

> From e691c2080929dd1390184ab4669de8b2695a237f Mon Sep 17 00:00:00 2001
> From: Mathieu Lirzin <mthl@openmailbox.org>
> Date: Fri, 7 Aug 2015 00:10:43 +0200
> Subject: [PATCH] ui: Add package-description-string.
>
> Provide support for Texinfo's markup in package description.
>
> * guix/ui.scm (%text-width, %initial-indent): New parameters.
>   (package-description-string): New variable.
>   (package->recutils): Use them.
> * emacs/guix-main.scm (%package-param-alist): Use it.
> * gnu/packages/databases.scm (perl-dbd-pg): Adapt to Texinfo's markup.
> * gnu/packages/perl.scm (perl-devel-globaldestruction)
>   (perl-devel-lexalias, perl-exporter-lite): Likewise.
> * gnu/packages/python.scm (python2-empy): Likewise.

[...]

> +++ b/gnu/packages/databases.scm
> @@ -578,7 +578,7 @@ columns, primary keys, unique constraints and relationships.")
>         ("postgresql" ,postgresql)))
>      (home-page "http://search.cpan.org/dist/DBD-Pg")
>      (synopsis "DBI PostgreSQL interface")
> -    (description "")
> +    (description #f)

Weird, and doesn’t really match the commit log.  Maybe this hunk can be
removed?

> +(set! (@@ (texinfo plain-text) wrap*)
> +      ;; Monkey patch this private procedure to let 'package->recutils'
           ^
Please prepend “XXX” here to make the kludge more visible.  (Eventually
we should fix it in Guile.)

I tried adding an @itemize list in a description and noticed that the
initial indent is not working the way I thought:

--8<---------------cut here---------------start------------->8---
$ ./pre-inst-env guix package --show=emacs-let-alist
name: emacs-let-alist
version: 1.0.4
outputs: out
systems: x86_64-linux i686-linux armhf-linux mips64el-linux
dependencies: emacs-no-x-24.5
location: gnu/packages/emacs.scm:491:2
homepage: http://elpa.gnu.org/packages/let-alist.html
license: GPL 3+
synopsis: Easily let-bind values of an assoc-list by their names
description: This package offers a single Emacs Lisp macro, `let-alist'.  This
+ macro takes a first argument, whose value must be an alist (association list),
+ and a body.
+ 
+ des* iption: one
+ 
+ des* iption: two
+ 
+ des* iption: three
+ 
+ description: The macro expands to a let form containing the body, where each
+ dotted symbol inside body is let-bound to their cdrs in the alist.  Only those
+ present in the body are let-bound and this search is done at compile time.
--8<---------------cut here---------------end--------------->8---

Notice how “description:” is repeated for each @item and for the next
paragraph.

I wonder if using ‘fill-paragraph’ instead of ‘fill-string’ would solve
this.

Could you look into it?

Sorry for not noticing earlier!

Thanks,
Ludo’.

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: Texinfo in descriptions?
  2015-09-03 22:12                           ` Ludovic Courtès
@ 2015-09-04 19:43                             ` Mathieu Lirzin
  2015-09-06 13:51                               ` Ludovic Courtès
  0 siblings, 1 reply; 49+ messages in thread
From: Mathieu Lirzin @ 2015-09-04 19:43 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel, Alex Kost

[-- Attachment #1: Type: text/plain, Size: 5350 bytes --]

ludo@gnu.org (Ludovic Courtès) writes:

> Mathieu Lirzin <mthl@openmailbox.org> skribis:
>
>> From e691c2080929dd1390184ab4669de8b2695a237f Mon Sep 17 00:00:00 2001
>> From: Mathieu Lirzin <mthl@openmailbox.org>
>> Date: Fri, 7 Aug 2015 00:10:43 +0200
>> Subject: [PATCH] ui: Add package-description-string.
>>
>> Provide support for Texinfo's markup in package description.
>>
>> * guix/ui.scm (%text-width, %initial-indent): New parameters.
>>   (package-description-string): New variable.
>>   (package->recutils): Use them.
>> * emacs/guix-main.scm (%package-param-alist): Use it.
>> * gnu/packages/databases.scm (perl-dbd-pg): Adapt to Texinfo's markup.
>> * gnu/packages/perl.scm (perl-devel-globaldestruction)
>>   (perl-devel-lexalias, perl-exporter-lite): Likewise.
>> * gnu/packages/python.scm (python2-empy): Likewise.
>
> [...]
>
>> +++ b/gnu/packages/databases.scm
>> @@ -578,7 +578,7 @@ columns, primary keys, unique constraints and relationships.")
>>         ("postgresql" ,postgresql)))
>>      (home-page "http://search.cpan.org/dist/DBD-Pg")
>>      (synopsis "DBI PostgreSQL interface")
>> -    (description "")
>> +    (description #f)
>
> Weird, and doesn’t really match the commit log.  Maybe this hunk can be
> removed?

I get an error with "guix package -s perl-dbd-pg" without this change

--8<---------------cut here---------------start------------->8---
Backtrace:
In unknown file:
   ?: 19 [apply-smob/1 #<catch-closure 1cfa9a0>]
In ice-9/boot-9.scm:
  63: 18 [call-with-prompt prompt0 ...]
In ice-9/eval.scm:
 432: 17 [eval # #]
In ice-9/boot-9.scm:
2401: 16 [save-module-excursion #<procedure 1d18940 at ice-9/boot-9.scm:4045:3 ()>]
4050: 15 [#<procedure 1d18940 at ice-9/boot-9.scm:4045:3 ()>]
1724: 14 [%start-stack load-stack ...]
1729: 13 [#<procedure 1d2eea0 ()>]
In unknown file:
   ?: 12 [primitive-load "/home/mthl/src/gnu/guix/scripts/guix"]
In guix/ui.scm:
1058: 11 [run-guix-command package "-s" "perl-dbd-pg"]
In ice-9/boot-9.scm:
 157: 10 [catch srfi-34 #<procedure 3b1a180 at guix/ui.scm:384:2 ()> ...]
 157: 9 [catch system-error ...]
In guix/scripts/package.scm:
 995: 8 [#<procedure 3b1e6f0 at guix/scripts/package.scm:994:4 ()>]
 967: 7 [process-query (# # # # ...)]
In ice-9/boot-9.scm:
 157: 6 [catch system-error ...]
In srfi/srfi-1.scm:
 619: 5 [for-each #<procedure 3b1e630 at guix/scripts/package.scm:968:22 (t-139858)> ...]
In guix/ui.scm:
 859: 4 [package->recutils # #<output: file /dev/pts/0> 80]
 790: 3 [texi->plain-text "description: Project-Id-Version: guix-packages 0.8\nReport-Msgid-Bugs-To: ludo@gnu.org\nPOT-Creation-Date: 2015-07-21 21:35+0200\nPO-Revision-Date: 2014-12-20 22:00+0100\nLast-Translator: Rémy Chevalier <remychevalier@laposte.net>\nLanguage-Team: French <traduc@traduc.org>\nLanguage: fr\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\n"]
In unknown file:
   ?: 2 [call-with-input-string "description: Project-Id-Version: guix-packages 0.8\nReport-Msgid-Bugs-To: ludo@gnu.org\nPOT-Creation-Date: 2015-07-21 21:35+0200\nPO-Revision-Date: 2014-12-20 22:00+0100\nLast-Translator: Rémy Chevalier <remychevalier@laposte.net>\nLanguage-Team: French <traduc@traduc.org>\nLanguage: fr\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\n" ...]
In texinfo.scm:
1131: 1 [parse #<input: string 4517ea0>]
 965: 0 [loop #<input: string 4517ea0> (*fragment*) ...]

texinfo.scm:965:23: In procedure loop:
texinfo.scm:965:23: Throw to key `parser-error' with args `(#f "Unknown command" gnu)'.
--8<---------------cut here---------------end--------------->8---


It's not directly related to texinfo description since

 (package-description-string perl-dbd-pg) => "" 

but caused by the fact there is this in "po/packages/fr.po"...

--8<---------------cut here---------------start------------->8---
msgid ""
msgstr ""
"Project-Id-Version: guix-packages 0.8\n"
"Report-Msgid-Bugs-To: ludo@gnu.org\n"
"POT-Creation-Date: 2014-11-10 15:37+0100\n"
"PO-Revision-Date: 2014-12-20 22:00+0100\n"
"Last-Translator: Rémy Chevalier <remychevalier@laposte.net>\n"
"Language-Team: French <traduc@traduc.org>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
--8<---------------cut here---------------end--------------->8---

which fails to be parsed by texinfo. 

What is your recommandation about this?

>
>> +(set! (@@ (texinfo plain-text) wrap*)
>> +      ;; Monkey patch this private procedure to let 'package->recutils'
>            ^
> Please prepend “XXX” here to make the kludge more visible.  (Eventually
> we should fix it in Guile.)

Done.

> I tried adding an @itemize list in a description and noticed that the
> initial indent is not working the way I thought:
> [...]

I should have test such case before proposing a patch sorry about that.

> I wonder if using ‘fill-paragraph’ instead of ‘fill-string’ would solve
> this.

I don't remember exactly the result I got with that but it wasn't
convincing.

> Could you look into it?

Here is "something" that seems to work. The idea is to append
"description: " to package description before 'stexi->plain-text' fills
the text.


[-- Attachment #2: 0001-ui-Add-package-description-string.patch --]
[-- Type: text/x-diff, Size: 8848 bytes --]

From 88f95bf594ded0e63b842e23bc06cbcd250d9660 Mon Sep 17 00:00:00 2001
From: Mathieu Lirzin <mthl@openmailbox.org>
Date: Fri, 7 Aug 2015 00:10:43 +0200
Subject: [PATCH] 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/databases.scm (perl-dbd-pg): Adapt to Texinfo's markup.
* gnu/packages/perl.scm (perl-devel-globaldestruction)
  (perl-devel-lexalias, perl-exporter-lite): Likewise.
* gnu/packages/python.scm (python2-empy): Likewise.
---
 emacs/guix-main.scm        |  2 +-
 gnu/packages/databases.scm |  2 +-
 gnu/packages/perl.scm      |  6 +++---
 gnu/packages/python.scm    |  2 +-
 guix/ui.scm                | 50 ++++++++++++++++++++++++++++++++++------------
 5 files changed, 43 insertions(+), 19 deletions(-)

diff --git a/emacs/guix-main.scm b/emacs/guix-main.scm
index 8d3a881..712f519 100644
--- a/emacs/guix-main.scm
+++ b/emacs/guix-main.scm
@@ -282,7 +282,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/databases.scm b/gnu/packages/databases.scm
index cbac16e..1710d0e 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -578,7 +578,7 @@ columns, primary keys, unique constraints and relationships.")
        ("postgresql" ,postgresql)))
     (home-page "http://search.cpan.org/dist/DBD-Pg")
     (synopsis "DBI PostgreSQL interface")
-    (description "")
+    (description #f)
     (license (package-license perl))))
 
 (define-public perl-dbd-sqlite
diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index c528516..12fed2b 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 313c625..5f3babf 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 8de8e3c..876a63b 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
@@ -767,6 +772,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
@@ -779,18 +806,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<?)) " ")))
@@ -834,9 +852,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
-- 
2.5.1


[-- Attachment #3: Type: text/plain, Size: 39 bytes --]


What do you think?

--
Mathieu Lirzin

^ permalink raw reply related	[flat|nested] 49+ messages in thread

* Re: Texinfo in descriptions?
  2015-09-04 19:43                             ` Mathieu Lirzin
@ 2015-09-06 13:51                               ` Ludovic Courtès
  2015-09-06 20:10                                 ` Alex Kost
  0 siblings, 1 reply; 49+ messages in thread
From: Ludovic Courtès @ 2015-09-06 13:51 UTC (permalink / raw)
  To: Mathieu Lirzin; +Cc: guix-devel, Alex Kost

Mathieu Lirzin <mathieu.lirzin@etu.u-bordeaux.fr> skribis:

> ludo@gnu.org (Ludovic Courtès) writes:

[...]

>>> +++ b/gnu/packages/databases.scm
>>> @@ -578,7 +578,7 @@ columns, primary keys, unique constraints and relationships.")
>>>         ("postgresql" ,postgresql)))
>>>      (home-page "http://search.cpan.org/dist/DBD-Pg")
>>>      (synopsis "DBI PostgreSQL interface")
>>> -    (description "")
>>> +    (description #f)
>>
>> Weird, and doesn’t really match the commit log.  Maybe this hunk can be
>> removed?
>
> I get an error with "guix package -s perl-dbd-pg" without this change

[...]

> In guix/ui.scm:
>  859: 4 [package->recutils # #<output: file /dev/pts/0> 80]
>  790: 3 [texi->plain-text "description: Project-Id-Version: guix-packages 0.8\nReport-Msgid-Bugs-To: ludo@gnu.org\nPOT-Creation-Date: 2015-07-21 21:35+0200\nPO-Revision-Date: 2014-12-20 22:00+0100\nLast-Translator: Rémy Chevalier <remychevalier@laposte.net>\nLanguage-Team: French <traduc@traduc.org>\nLanguage: fr\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\n"]
> In unknown file:
>    ?: 2 [call-with-input-string "description: Project-Id-Version: guix-packages 0.8\nReport-Msgid-Bugs-To: ludo@gnu.org\nPOT-Creation-Date: 2015-07-21 21:35+0200\nPO-Revision-Date: 2014-12-20 22:00+0100\nLast-Translator: Rémy Chevalier <remychevalier@laposte.net>\nLanguage-Team: French <traduc@traduc.org>\nLanguage: fr\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\n" ...]
> In texinfo.scm:
> 1131: 1 [parse #<input: string 4517ea0>]
>  965: 0 [loop #<input: string 4517ea0> (*fragment*) ...]
>
> texinfo.scm:965:23: In procedure loop:
> texinfo.scm:965:23: Throw to key `parser-error' with args `(#f "Unknown command" gnu)'.

It looks as though (P_ "") returns the header of the PO file, an indeed

This also happens on ‘master’ for all the supported languages:

--8<---------------cut here---------------start------------->8---
$ ./pre-inst-env guix package --show=perl-dbd-pg
name: perl-dbd-pg
version: 3.5.1
outputs: out
systems: x86_64-linux i686-linux armhf-linux mips64el-linux
dependencies: perl-dbi-1.631 perl-dbi-1.631 postgresql-9.3.8
location: gnu/packages/databases.scm:562:2
homepage: http://search.cpan.org/dist/DBD-Pg
license: GPL 1+
synopsis: DBI PostgreSQL interface
description: Project-Id-Version: guix-packages 0.8.1 Report-Msgid-Bugs-To:
+ ludo@gnu.org POT-Creation-Date: 2015-01-27 00:07+0100 PO-Revision-Date:
+ 2015-02-05 09:41-0300 Last-Translator: Felipe Castro <fefcas@gmail.com>
+ Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net> Language:
+ eo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8
+ Content-Transfer-Encoding: 8bit X-Generator: Poedit 1.6.10
--8<---------------cut here---------------end--------------->8---

Here’s a reduced case (where bindtextdomain is passed by $localedir):

--8<---------------cut here---------------start------------->8---
$ echo $LANGUAGE
eo
$ ./pre-inst-env guile -c '(bindtextdomain "guix-packages" "/home/ludo/soft/share/locale") (setlocale LC_ALL "") (pk (gettext "" "guix-packages"))'

;;; ("Project-Id-Version: guix-packages 0.8.1\nReport-Msgid-Bugs-To: ludo@gnu.org\nPOT-Creation-Date: 2015-01-27 00:07+0100\nPO-Revision-Date: 2015-02-05 09:41-0300\nLast-Translator: Felipe Castro <fefcas@gmail.com>\nLanguage-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\nLanguage: eo\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nX-Generator: Poedit 1.6.10\n")
--8<---------------cut here---------------end--------------->8---

Same with the ‘gettext’ command:

--8<---------------cut here---------------start------------->8---
$ TEXTDOMAINDIR=$HOME/soft/share/locale gettext guix-packages ""
Project-Id-Version: guix-packages 0.8.1
Report-Msgid-Bugs-To: ludo@gnu.org
POT-Creation-Date: 2015-01-27 00:07+0100
PO-Revision-Date: 2015-02-05 09:41-0300
Last-Translator: Felipe Castro <fefcas@gmail.com>
Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>
Language: eo
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Generator: Poedit 1.6.10
--8<---------------cut here---------------end--------------->8---

Although libc’s manual doesn’t mention it (info "(libc) Translation with
gettext"), gettext(3) states:

  When an empty string is used for msgid, the functions may return a
  nonempty string.

I have changed ‘P_’ to return the empty string when passed the empty
string.  I left ‘_’ and ‘N_’ unchanged because they normally shouldn’t
end up being passed the empty string.

>> Could you look into it?
>
> Here is "something" that seems to work. The idea is to append
> "description: " to package description before 'stexi->plain-text' fills
> the text.

Sounds reasonable.

> From 88f95bf594ded0e63b842e23bc06cbcd250d9660 Mon Sep 17 00:00:00 2001
> From: Mathieu Lirzin <mthl@openmailbox.org>
> Date: Fri, 7 Aug 2015 00:10:43 +0200
> Subject: [PATCH] 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/databases.scm (perl-dbd-pg): Adapt to Texinfo's markup.
> * gnu/packages/perl.scm (perl-devel-globaldestruction)
>   (perl-devel-lexalias, perl-exporter-lite): Likewise.
> * gnu/packages/python.scm (python2-empy): Likewise.

Looks good.  OK to commit after removing the change for ‘perl-dbd-pg’.

Alex: We should maybe disable the paragraph filling code in guix.el so
that it doesn’t mess up with formatting?

Thank you!

Ludo’.

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: Texinfo in descriptions?
  2015-09-06 13:51                               ` Ludovic Courtès
@ 2015-09-06 20:10                                 ` Alex Kost
  2015-09-06 21:31                                   ` Ludovic Courtès
  0 siblings, 1 reply; 49+ messages in thread
From: Alex Kost @ 2015-09-06 20:10 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel, Mathieu Lirzin

Ludovic Courtès (2015-09-06 16:51 +0300) wrote:

> Alex: We should maybe disable the paragraph filling code in guix.el so
> that it doesn’t mess up with formatting?

I don't mind (if you remember I didn't actually like such filling¹, and
I've never used it).  So we can change the default value of
‘guix-package-info-fill-heading’ variable.

[1] https://lists.gnu.org/archive/html/guix-devel/2015-07/msg00387.html

-- 
Alex

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: Texinfo in descriptions?
  2015-09-06 20:10                                 ` Alex Kost
@ 2015-09-06 21:31                                   ` Ludovic Courtès
  2015-09-07 15:50                                     ` Alex Kost
  0 siblings, 1 reply; 49+ messages in thread
From: Ludovic Courtès @ 2015-09-06 21:31 UTC (permalink / raw)
  To: Alex Kost; +Cc: guix-devel, Mathieu Lirzin

Alex Kost <alezost@gmail.com> skribis:

> Ludovic Courtès (2015-09-06 16:51 +0300) wrote:
>
>> Alex: We should maybe disable the paragraph filling code in guix.el so
>> that it doesn’t mess up with formatting?
>
> I don't mind (if you remember I didn't actually like such filling¹, and
> I've never used it).  So we can change the default value of
> ‘guix-package-info-fill-heading’ variable.

Yes, though ideally the elisp code would provide Scheme code the current
value of ‘fill-column’ so that text is filled using the right width.
WDYT?

Ludo’.

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: Texinfo in descriptions?
  2015-09-06 21:31                                   ` Ludovic Courtès
@ 2015-09-07 15:50                                     ` Alex Kost
  2015-09-07 15:59                                       ` Ludovic Courtès
  0 siblings, 1 reply; 49+ messages in thread
From: Alex Kost @ 2015-09-07 15:50 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel

Ludovic Courtès (2015-09-07 00:31 +0300) wrote:

> Alex Kost <alezost@gmail.com> skribis:
>
>> Ludovic Courtès (2015-09-06 16:51 +0300) wrote:
>>
>>> Alex: We should maybe disable the paragraph filling code in guix.el so
>>> that it doesn’t mess up with formatting?
>>
>> I don't mind (if you remember I didn't actually like such filling¹, and
>> I've never used it).  So we can change the default value of
>> ‘guix-package-info-fill-heading’ variable.
>
> Yes, though ideally the elisp code would provide Scheme code the current
> value of ‘fill-column’ so that text is filled using the right width.
> WDYT?

Do you mean that ‘package-description-string’ should take an optional
'fill-column' argument, so that it can be called from the elisp side?

If so, I'm afraid currently there is no way to have such fine tuning for
the received package parameters.  The package (or generation) data is
received all at once using ‘guix-get-entries’, for example:

(guix-get-entries guix-current-profile 'package 'name '("r"))
(guix-get-entries guix-current-profile 'generation 'last '(3))

As you can see there is no place to specify fill-column there.  But I
have noted this thing, perhaps it will become possible one day.

-- 
Alex

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: Texinfo in descriptions?
  2015-09-07 15:50                                     ` Alex Kost
@ 2015-09-07 15:59                                       ` Ludovic Courtès
  0 siblings, 0 replies; 49+ messages in thread
From: Ludovic Courtès @ 2015-09-07 15:59 UTC (permalink / raw)
  To: Alex Kost; +Cc: guix-devel

Alex Kost <alezost@gmail.com> skribis:

> Ludovic Courtès (2015-09-07 00:31 +0300) wrote:
>
>> Alex Kost <alezost@gmail.com> skribis:
>>
>>> Ludovic Courtès (2015-09-06 16:51 +0300) wrote:
>>>
>>>> Alex: We should maybe disable the paragraph filling code in guix.el so
>>>> that it doesn’t mess up with formatting?
>>>
>>> I don't mind (if you remember I didn't actually like such filling¹, and
>>> I've never used it).  So we can change the default value of
>>> ‘guix-package-info-fill-heading’ variable.
>>
>> Yes, though ideally the elisp code would provide Scheme code the current
>> value of ‘fill-column’ so that text is filled using the right width.
>> WDYT?
>
> Do you mean that ‘package-description-string’ should take an optional
> 'fill-column' argument, so that it can be called from the elisp side?

Yes.

> If so, I'm afraid currently there is no way to have such fine tuning for
> the received package parameters.  The package (or generation) data is
> received all at once using ‘guix-get-entries’, for example:
>
> (guix-get-entries guix-current-profile 'package 'name '("r"))
> (guix-get-entries guix-current-profile 'generation 'last '(3))
>
> As you can see there is no place to specify fill-column there.  But I
> have noted this thing, perhaps it will become possible one day.

Oh I see.  Thanks for checking anyway.

Ludo’.

^ permalink raw reply	[flat|nested] 49+ messages in thread

end of thread, other threads:[~2015-09-07 15:59 UTC | newest]

Thread overview: 49+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-07-16 11:17 [PATCH] gnu packages: Clean up synopses and descriptions Alex Kost
2015-07-16  9:40 ` Eric Bavier
2015-07-16 15:55   ` Alex Kost
2015-07-16 19:08     ` Ludovic Courtès
2015-07-17 12:41       ` Alex Kost
2015-07-17 21:24         ` Ludovic Courtès
2015-07-18 10:07           ` Alex Kost
2015-07-16 11:52 ` Mathieu Lirzin
2015-07-16 15:50   ` Ludovic Courtès
2015-07-16 21:33     ` Mathieu Lirzin
2015-07-17 21:18       ` Texinfo in descriptions? Ludovic Courtès
2015-07-21 21:37         ` Mathieu Lirzin
2015-07-22 13:35           ` Ludovic Courtès
2015-07-22 21:24             ` Ludovic Courtès
2015-07-22 22:08               ` Andreas Enge
2015-07-23  9:49                 ` Mathieu Lirzin
2015-07-23 13:57                   ` Ludovic Courtès
2015-07-23 15:09                     ` Daniel Pimentel
2015-07-23 18:00                       ` Andreas Enge
2015-08-25 22:09                     ` Mathieu Lirzin
2015-08-26  7:57                       ` Andy Wingo
2015-08-27 19:48                         ` Mathieu Lirzin
2015-07-23 13:54                 ` Ludovic Courtès
2015-08-27 21:04               ` Mathieu Lirzin
2015-08-28 21:47                 ` Mathieu Lirzin
2015-08-30 17:23                   ` Ludovic Courtès
2015-08-30 19:06                     ` Alex Kost
2015-08-30 20:42                     ` Mathieu Lirzin
2015-08-31 21:21                       ` Ludovic Courtès
2015-09-01 16:41                         ` Mathieu Lirzin
2015-09-02 21:27                         ` Mathieu Lirzin
2015-09-03 22:12                           ` Ludovic Courtès
2015-09-04 19:43                             ` Mathieu Lirzin
2015-09-06 13:51                               ` Ludovic Courtès
2015-09-06 20:10                                 ` Alex Kost
2015-09-06 21:31                                   ` Ludovic Courtès
2015-09-07 15:50                                     ` Alex Kost
2015-09-07 15:59                                       ` Ludovic Courtès
2015-08-30 10:10                 ` Alex Kost
2015-08-30 12:24                   ` Mathieu Lirzin
2015-08-30 15:19                     ` Alex Kost
2015-07-17 12:35     ` [PATCHES] gnu packages: Clean up synopses and descriptions Alex Kost
2015-07-17 21:07       ` Mathieu Lirzin
2015-07-17 21:30       ` Ludovic Courtès
2015-07-18 10:08         ` Alex Kost
2015-07-18 21:13           ` Andreas Enge
2015-07-19  9:58             ` Alex Kost
2015-07-16 16:03   ` [PATCH] " Alex Kost
2015-07-16 20:02     ` Mathieu Lirzin

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).