diff options
author | Ludovic Courtès <ludo@gnu.org> | 2020-01-29 14:56:17 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2020-02-12 10:33:02 +0100 |
commit | 149d229e3cbe7ff3cb3cc45ec0df69825e494f39 (patch) | |
tree | db793b3462c3addd2ed727de304df842e3cb681d | |
parent | f361584a15358dc52ecb2981d4c47ab507c6a02a (diff) |
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.
-rw-r--r-- | doc/ref/texinfo.texi | 8 | ||||
-rw-r--r-- | module/texinfo/plain-text.scm | 11 | ||||
-rw-r--r-- | test-suite/Makefile.am | 1 | ||||
-rw-r--r-- | test-suite/tests/texinfo.plain-text.test | 34 |
4 files changed, 49 insertions, 5 deletions
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 <wingo at pobox dot com> ;;;; ;;;; 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.")))))) |