summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2020-01-29 14:56:17 +0100
committerLudovic Courtès <ludo@gnu.org>2020-02-12 10:33:02 +0100
commit149d229e3cbe7ff3cb3cc45ec0df69825e494f39 (patch)
treedb793b3462c3addd2ed727de304df842e3cb681d
parentf361584a15358dc52ecb2981d4c47ab507c6a02a (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.texi8
-rw-r--r--module/texinfo/plain-text.scm11
-rw-r--r--test-suite/Makefile.am1
-rw-r--r--test-suite/tests/texinfo.plain-text.test34
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."))))))