From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mathieu Lirzin Subject: Re: Texinfo in descriptions? Date: Thu, 27 Aug 2015 23:04:14 +0200 Message-ID: <87a8tcfnox.fsf@openmailbox.org> References: <87wpy0nygt.fsf@gmail.com> <87y4ige2ux.fsf@openmailbox.org> <87wpy0t83c.fsf@gnu.org> <87r3o7pz3h.fsf@openmailbox.org> <87y4ietrdz.fsf_-_@gnu.org> <874mkx8a5o.fsf@openmailbox.org> <87wpxs9ux0.fsf@gnu.org> <87h9ov51j9.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:40981) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZV4Lx-0007tX-54 for guix-devel@gnu.org; Thu, 27 Aug 2015 17:05:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZV4Ls-0002tf-6G for guix-devel@gnu.org; Thu, 27 Aug 2015 17:04:57 -0400 In-Reply-To: <87h9ov51j9.fsf@gnu.org> ("Ludovic \=\?utf-8\?Q\?Court\=C3\=A8s\=22'\?\= \=\?utf-8\?Q\?s\?\= message of "Wed, 22 Jul 2015 23:24:10 +0200") List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org To: guix-devel@gnu.org Cc: Alex Kost --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable ludo@gnu.org (Ludovic Court=C3=A8s) writes: > With Benno being OK, we should start looking at implementing the change. > The various parts that I can think of are: > > =E2=80=A2 Having a =E2=80=98package-description-string=E2=80=99 procedu= re that would return > the description rendered as a string, using the (stexi) modules. > > =E2=80=A2 =E2=80=98--search=E2=80=99 could use the raw description (inc= luding markup). > However, =E2=80=98package->recutils=E2=80=99 must use =E2=80=98packag= e-description-string=E2=80=99 > 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. --=-=-= Content-Type: text/x-diff; charset=utf-8 Content-Disposition: attachment; filename=0001-packages-Add-package-description-string.patch Content-Transfer-Encoding: quoted-printable >From 665c92dc5e9976719ac7a6e427253b6ee65c78d8 Mon Sep 17 00:00:00 2001 From: Mathieu Lirzin 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 o= lder perls") (description "Devel::GlobalDestruction provides a function returning t= he -equivalent of \"${^GLOBAL_PHASE} eq 'DESTRUCT'\" for older perls.") +equivalent of \"$@{^GLOBAL_PHASE@} eq 'DESTRUCT'\" for older perls.") (license (package-license perl)))) =20 (define-public perl-devel-lexalias @@ -1909,7 +1909,7 @@ constructors, which speeds code up at runtime by a si= gnificant amount. String eval is not without its issues however - it's difficult to control the sco= pe it's used in (which determines which variables are in scope inside the eva= l), and it's easy to miss compilation errors, since eval catches them and stic= ks -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 =C2=A9 2012, 2013, 2014, 2015 Ludovic Court=C3=A8s +;;; Copyright =C2=A9 2015 Mathieu Lirzin ;;; Copyright =C2=A9 2014, 2015 Mark H Weaver ;;; ;;; 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))) =20 +(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 =C2=A9 2013 Mark H Weaver ;;; Copyright =C2=A9 2013 Nikita Karetnikov ;;; Copyright =C2=A9 2014 Alex Kost +;;; Copyright =C2=A9 2015 Mathieu Lirzin ;;; Copyright =C2=A9 2014 Deck Pickard ;;; ;;; 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 =C2=A9 2013, 2014, 2015 Mark H Weaver ;;; Copyright =C2=A9 2014 Eric Bavier ;;; Copyright =C2=A9 2014 Ian Denhardt +;;; Copyright =C2=A9 2015 Mathieu Lirzin ;;; ;;; 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)))))) =20 +(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 #\.))) --=20 2.1.4 --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable > > =E2=80=A2 guix.el, guix-web, and the web site need to do the right thin= g when > displaying descriptions. I've succeed to do something for the website but with the same aftertaste. --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=0001-website-packages-Support-Texinfo-s-markup.patch >From 66ddc73d11fd6b9b5fb77021a04e42086096fc79 Mon Sep 17 00:00:00 2001 From: Mathieu Lirzin 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 --=-=-= Content-Type: text/plain 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 --=-=-=--