From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mathieu Lirzin Subject: Re: Texinfo in descriptions? Date: Fri, 04 Sep 2015 21:43:36 +0200 Message-ID: <87si6uynpz.fsf@etu.u-bordeaux.fr> 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> <87a8tcfnox.fsf@openmailbox.org> <87a8tbf5lu.fsf@openmailbox.org> <87613wlmgv.fsf@gnu.org> <87zj18ik3d.fsf@openmailbox.org> <87egij2lyi.fsf@gnu.org> <87oahk8qbh.fsf@openmailbox.org> <87bndjxicp.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:53720) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZXwtr-00079F-BR for guix-devel@gnu.org; Fri, 04 Sep 2015 15:43:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZXwto-0006ol-23 for guix-devel@gnu.org; Fri, 04 Sep 2015 15:43:51 -0400 In-Reply-To: <87bndjxicp.fsf@gnu.org> ("Ludovic \=\?utf-8\?Q\?Court\=C3\=A8s\=22'\?\= \=\?utf-8\?Q\?s\?\= message of "Fri, 04 Sep 2015 00:12:38 +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: Ludovic =?utf-8?Q?Court=C3=A8s?= Cc: guix-devel@gnu.org, Alex Kost --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable ludo@gnu.org (Ludovic Court=C3=A8s) writes: > Mathieu Lirzin skribis: > >> From e691c2080929dd1390184ab4669de8b2695a237f Mon Sep 17 00:00:00 2001 >> From: Mathieu Lirzin >> 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 relati= onships.") >> ("postgresql" ,postgresql))) >> (home-page "http://search.cpan.org/dist/DBD-Pg") >> (synopsis "DBI PostgreSQL interface") >> - (description "") >> + (description #f) > > Weird, and doesn=E2=80=99t 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 #] 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 #] 4050: 15 [#] 1724: 14 [%start-stack load-stack ...] 1729: 13 [#] 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 # ...] 157: 9 [catch system-error ...] In guix/scripts/package.scm: 995: 8 [#] 967: 7 [process-query (# # # # ...)] In ice-9/boot-9.scm: 157: 6 [catch system-error ...] In srfi/srfi-1.scm: 619: 5 [for-each # ...] In guix/ui.scm: 859: 4 [package->recutils # # 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=C3=A9my = Chevalier \nLanguage-Team: French \nLanguage: fr\nMIME-Version: 1.0\nContent-Type: text/plain; charset= =3DUTF-8\nContent-Transfer-Encoding: 8bit\n"] In unknown file: ?: 2 [call-with-input-string "description: Project-Id-Version: guix-pack= ages 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=C3= =A9my Chevalier \nLanguage-Team: French \nLanguage: fr\nMIME-Version: 1.0\nContent-Type: text/plain; cha= rset=3DUTF-8\nContent-Transfer-Encoding: 8bit\n" ...] In texinfo.scm: 1131: 1 [parse #] 965: 0 [loop # (*fragment*) ...] texinfo.scm:965:23: In procedure loop: texinfo.scm:965:23: Throw to key `parser-error' with args `(#f "Unknown com= mand" gnu)'. --8<---------------cut here---------------end--------------->8--- It's not directly related to texinfo description since (package-description-string perl-dbd-pg) =3D> ""=20 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=C3=A9my Chevalier \n" "Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=3DUTF-8\n" "Content-Transfer-Encoding: 8bit\n" --8<---------------cut here---------------end--------------->8--- which fails to be parsed by texinfo.=20 What is your recommandation about this? > >> +(set! (@@ (texinfo plain-text) wrap*) >> + ;; Monkey patch this private procedure to let 'package->recutils' > ^ > Please prepend =E2=80=9CXXX=E2=80=9D 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 =E2=80=98fill-paragraph=E2=80=99 instead of =E2=80=98fi= ll-string=E2=80=99 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. --=-=-= Content-Type: text/x-diff; charset=utf-8 Content-Disposition: attachment; filename=0001-ui-Add-package-description-string.patch Content-Transfer-Encoding: quoted-printable >From 88f95bf594ded0e63b842e23bc06cbcd250d9660 Mon Sep 17 00:00:00 2001 From: Mathieu Lirzin 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 relations= hips.") ("postgresql" ,postgresql))) (home-page "http://search.cpan.org/dist/DBD-Pg") (synopsis "DBI PostgreSQL interface") - (description "") + (description #f) (license (package-license perl)))) =20 (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 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 @@ -1949,7 +1949,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.") @@ -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 =C2=A9 2013 Mark H Weaver ;;; Copyright =C2=A9 2013 Nikita Karetnikov ;;; Copyright =C2=A9 2014, 2015 Alex Kost +;;; Copyright =C2=A9 2015 Mathieu Lirzin ;;; Copyright =C2=A9 2014 Deck Pickard ;;; ;;; 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. ;;; =20 +(define %text-width + (make-parameter (or (and=3D> (getenv "WIDTH") string->number) + 80))) + +(set! (@@ (texinfo plain-text) wrap*) + ;; XXX: Monkey patch this private procedure to let 'package->recutil= s' + ;; 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=3D> (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))) =20 -(define* (package->recutils p port - #:optional (width (or (and=3D> (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 (package-synopsis p) P_) ""))) - (format port "description: ~a~%" - (and=3D> (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=3D> (package-description p) P_) + "")))) + #\newline)))) =20 (define (string->generations str) "Return the list of generations matching a pattern in STR. This function --=20 2.5.1 --=-=-= Content-Type: text/plain What do you think? -- Mathieu Lirzin --=-=-=--