From 149d229e3cbe7ff3cb3cc45ec0df69825e494f39 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Wed, 29 Jan 2020 14:56:17 +0100 Subject: texinfo: Add '*line-width*' fluid to control line wrapping. * module/texinfo/plain-text.scm (*line-width*): New variable. (wrap*): Honor it. * doc/ref/texinfo.texi (texinfo plain-text): Document it. * test-suite/tests/texinfo.plain-text.test: New file. * test-suite/Makefile.am (SCM_TESTS): Add it. --- doc/ref/texinfo.texi | 8 +++++++- module/texinfo/plain-text.scm | 11 +++++++---- test-suite/Makefile.am | 1 + test-suite/tests/texinfo.plain-text.test | 34 ++++++++++++++++++++++++++++++++ 4 files changed, 49 insertions(+), 5 deletions(-) create mode 100644 test-suite/tests/texinfo.plain-text.test diff --git a/doc/ref/texinfo.texi b/doc/ref/texinfo.texi index 5006fd427..64a866b23 100644 --- a/doc/ref/texinfo.texi +++ b/doc/ref/texinfo.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Guile Reference Manual. -@c Copyright (C) 2013 Free Software Foundation, Inc. +@c Copyright (C) 2013, 2020 Free Software Foundation, Inc. @c See the file guile.texi for copying conditions. @c Note: Don't use "Texinfo" as the node name here because this leads to @@ -452,6 +452,12 @@ Transform @var{tree} into plain text. Returns a string. @end defun +@defvr {Scheme Variable} *line-width* +This fluid (@pxref{Fluids and Dynamic States}) specifies the length of +line for the purposes of line wrapping in the @code{stexi->plain-text} +conversion. +@end defvr + @node texinfo serialize @subsection (texinfo serialize) @subsubsection Overview diff --git a/module/texinfo/plain-text.scm b/module/texinfo/plain-text.scm index 809cdb7b3..6b7885ada 100644 --- a/module/texinfo/plain-text.scm +++ b/module/texinfo/plain-text.scm @@ -1,6 +1,6 @@ ;;;; (texinfo plain-text) -- rendering stexinfo as plain text ;;;; -;;;; Copyright (C) 2009, 2010, 2011, 2013 Free Software Foundation, Inc. +;;;; Copyright (C) 2009, 2010, 2011, 2013, 2020 Free Software Foundation, Inc. ;;;; Copyright (C) 2003,2004,2009 Andy Wingo ;;;; ;;;; This library is free software; you can redistribute it and/or @@ -32,7 +32,8 @@ #:use-module (srfi srfi-1) #:use-module (srfi srfi-13) #:use-module (ice-9 match) - #:export (stexi->plain-text)) + #:export (stexi->plain-text + *line-width*)) ;; The return value is a string. (define (arg-ref key %-args) @@ -52,6 +53,7 @@ (define *indent* (make-fluid "")) (define *itemizer* (make-fluid (make-ticker "* "))) +(define *line-width* (make-fluid 72)) (define-macro (with-indent n . body) `(with-fluids ((*indent* (string-append (fluid-ref *indent*) @@ -69,9 +71,10 @@ ,@body)) (define (wrap* . strings) - (let ((indent (fluid-ref *indent*))) + (let ((indent (fluid-ref *indent*)) + (width (fluid-ref *line-width*))) (fill-string (string-concatenate strings) - #:line-width 72 #:initial-indent indent + #:line-width width #:initial-indent indent #:subsequent-indent indent))) (define (wrap . strings) (string-append (apply wrap* strings) "\n\n")) diff --git a/test-suite/Makefile.am b/test-suite/Makefile.am index e15b92aff..9c58bdff5 100644 --- a/test-suite/Makefile.am +++ b/test-suite/Makefile.am @@ -180,6 +180,7 @@ SCM_TESTS = tests/00-initial-env.test \ tests/texinfo.test \ tests/texinfo.docbook.test \ tests/texinfo.html.test \ + tests/texinfo.plain-text.test \ tests/texinfo.serialize.test \ tests/texinfo.string-utils.test \ tests/threads.test \ diff --git a/test-suite/tests/texinfo.plain-text.test b/test-suite/tests/texinfo.plain-text.test new file mode 100644 index 000000000..565da8c7d --- /dev/null +++ b/test-suite/tests/texinfo.plain-text.test @@ -0,0 +1,34 @@ +;;;; texinfo.plain-text.test -*- scheme -*- +;;;; +;;;; Copyright (C) 2020 Free Software Foundation, Inc. +;;;; +;;;; This program is free software; you can redistribute it and/or +;;;; modify it under the terms of the GNU General Public License as +;;;; published by the Free Software Foundation; either version 3 of the +;;;; License, or (at your option) any later version. +;;;; +;;;; This program is distributed in the hope that it will be useful, +;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;;;; General Public License for more details. +;;;; +;;;; You should have received a copy of the GNU General Public License +;;;; along with this library; if not, write to the Free Software +;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +;;;; 02110-1301 USA + +(define-module (test-suite test-plain-text) + #:use-module (test-suite lib) + #:use-module (texinfo plain-text)) + +(with-test-prefix "stexi->plain-text" + (pass-if-equal "one paragraph, default line width" + "This is another sentence. That too.\n\n" + (stexi->plain-text + '(*fragment* (para "This is another sentence. That too.")))) + + (pass-if-equal "one paragraph, *line-width* set" + "This is another sentence.\nThat too.\n\n" + (with-fluids ((*line-width* 26)) + (stexi->plain-text + '(*fragment* (para "This is another sentence. That too.")))))) -- cgit v1.2.3