From: ludo@gnu.org (Ludovic Courtès)
To: guile-devel@gnu.org
Cc: bug-texinfo@gnu.org
Subject: Re: makeinfo swallows page breaks
Date: Thu, 21 Mar 2013 19:25:59 +0100 [thread overview]
Message-ID: <87boacboeg.fsf@gnu.org> (raw)
In-Reply-To: <8738vpirz4.fsf@gnu.org> ("Ludovic \=\?utf-8\?Q\?Court\=C3\=A8s\=22'\?\= \=\?utf-8\?Q\?s\?\= message of "Thu, 21 Mar 2013 00:14:39 +0100")
[-- Attachment #1: Type: text/plain, Size: 571 bytes --]
ludo@gnu.org (Ludovic Courtès) skribis:
> Alternately, would you suggest using a different approach?
Attached is a patch to use Guile’s Texinfo support [0] to build said
file. Guile’s Texinfo parser is incomplete but sufficient to handle
those docstrings.
It solves an actual bug for anyone using Texinfo 5.x. It also seems to
be the most profitable solution for us Guile hackers in the long run.
And, it’s much faster:
makeinfo 4.13 takes 0.1s
makeinfo 5.1 takes 11.7s
Guile takes 1.3s
OK to commit?
Thanks,
Ludo’.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: the patch --]
[-- Type: text/x-patch, Size: 5902 bytes --]
From 84b2457ed9fdf866a354465c67e282f8fbb30eb3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= <ludo@gnu.org>
Date: Thu, 21 Mar 2013 19:17:13 +0100
Subject: [PATCH] Build `guile-procedures.txt' using (texinfo) instead of
`makeinfo'.
* Makefile.am (schemelibdir, schemelib_DATA): New variables.
(libguile/guile-procedures.txt): New target.
(EXTRA_DIST): Add libguile/texi-fragments-to-docstrings.
* libguile/Makefile.am (guile-procedures.txt): Remove target.
(schemelibdir, schemelib_DATA): Remove.
* libguile/texi-fragments-to-docstrings: New file.
---
Makefile.am | 17 ++++++++--
libguile/Makefile.am | 16 ----------
libguile/texi-fragments-to-docstrings | 55 +++++++++++++++++++++++++++++++++
3 files changed, 70 insertions(+), 18 deletions(-)
create mode 100644 libguile/texi-fragments-to-docstrings
diff --git a/Makefile.am b/Makefile.am
index 3aa5ddd..737897b 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,7 +1,7 @@
## Process this file with automake to produce Makefile.in.
##
## Copyright (C) 1998, 1999, 2000, 2001, 2002, 2006, 2007,
-## 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+## 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
##
## This file is part of GUILE.
##
@@ -42,6 +42,18 @@ SUBDIRS = \
libguileincludedir = $(pkgincludedir)/$(GUILE_EFFECTIVE_VERSION)
libguileinclude_HEADERS = libguile.h
+schemelibdir = $(pkgdatadir)/$(GUILE_EFFECTIVE_VERSION)
+schemelib_DATA = libguile/guile-procedures.txt
+
+# Build it from here so that all the modules are compiled by the time we
+# build it.
+libguile/guile-procedures.txt: libguile/guile-procedures.texi
+ $(AM_V_GEN) \
+ $(top_builddir)/meta/guile --no-auto-compile \
+ "$(srcdir)/libguile/texi-fragments-to-docstrings" \
+ "$(builddir)/libguile/guile-procedures.texi" \
+ > libguile/guile-procedures.txt
+
EXTRA_DIST = LICENSE HACKING GUILE-VERSION \
m4/ChangeLog-2008 \
m4/gnulib-cache.m4 \
@@ -50,7 +62,8 @@ EXTRA_DIST = LICENSE HACKING GUILE-VERSION \
gnulib-local/lib/localcharset.h.diff \
gnulib-local/lib/localcharset.c.diff \
gnulib-local/m4/clock_time.m4.diff \
- gnulib-local/build-aux/git-version-gen.diff
+ gnulib-local/build-aux/git-version-gen.diff \
+ libguile/texi-fragments-to-docstrings
TESTS = check-guile
TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
diff --git a/libguile/Makefile.am b/libguile/Makefile.am
index d77bdfe..450d955 100644
--- a/libguile/Makefile.am
+++ b/libguile/Makefile.am
@@ -713,25 +713,9 @@ guile.texi: $(alldotdocfiles) guile$(EXEEXT)
guile-procedures.texi: $(alldotdocfiles) guile$(EXEEXT)
$(AM_V_GEN)$(dotdoc2texi) > $@ || { rm $@; false; }
-if HAVE_MAKEINFO
-
-guile-procedures.txt: guile-procedures.texi
- rm -f $@
- makeinfo --force -o $@ guile-procedures.texi || test -f $@
-
-else
-
-guile-procedures.txt: guile-procedures.texi
- cp guile-procedures.texi $@
-
-endif
-
c-tokenize.c: c-tokenize.lex
flex -t $(srcdir)/c-tokenize.lex > $@ || { rm $@; false; }
-schemelibdir = $(pkgdatadir)/$(GUILE_EFFECTIVE_VERSION)
-schemelib_DATA = guile-procedures.txt
-
## Add -MG to make the .x magic work with auto-dep code.
MKDEP = gcc -M -MG $(DEFS) $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS)
diff --git a/libguile/texi-fragments-to-docstrings b/libguile/texi-fragments-to-docstrings
new file mode 100644
index 0000000..b72390b
--- /dev/null
+++ b/libguile/texi-fragments-to-docstrings
@@ -0,0 +1,55 @@
+;;; -*- mode: scheme; coding: utf-8; -*-
+;;;
+;;; Copyright (C) 2013 Free Software Foundation, Inc.
+;;;
+;;; This library is free software; you can redistribute it and/or
+;;; modify it under the terms of the GNU Lesser General Public
+;;; License as published by the Free Software Foundation; either
+;;; version 3 of the License, or (at your option) any later version.
+;;;
+;;; This library 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
+;;; Lesser General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU Lesser 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
+
+\f
+;;;
+;;; Read Texinfo fragments from stdin (docstrings of Guile's primitives
+;;; in the format of `guile-procedures.texi'), and write to stdout a
+;;; textual rendering thereof. The output preserves page breaks (^L)
+;;; found in the input, as per the Guile Documentation Format
+;;; version 2---see (ice-9 documentation).
+;;;
+
+(use-modules (texinfo)
+ (texinfo plain-text)
+ (srfi srfi-1)
+ (ice-9 match)
+ (rnrs io ports))
+
+(define (docstring-fragments->strings str)
+ "Return the list resulting from the split of STR at each page
+break (^L)"
+ (string-tokenize str (char-set-complement (char-set #\page))))
+
+(match (command-line)
+ ((_ texi-file)
+ (let* ((fragments (remove (compose string-null? string-trim-both)
+ (call-with-input-file texi-file
+ (compose docstring-fragments->strings
+ get-string-all))))
+ (stexi (map texi-fragment->stexi fragments)))
+ (format #t "Produced by GNU Guile ~a from `~a'.~%~%"
+ (version) texi-file)
+ (for-each (lambda (stexi)
+ (display #\page)
+ (display (stexi->plain-text stexi)))
+ stexi)))
+ ((command args ...)
+ (format (current-error-port) "invalid arguments: ~s~%" args)
+ (format (current-error-port) "Usage: ~a TEXINFO-FILE~%" command)
+ (exit 1)))
--
1.7.10.4
next prev parent reply other threads:[~2013-03-21 18:25 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-20 23:14 makeinfo swallows page breaks Ludovic Courtès
2013-03-21 18:25 ` Ludovic Courtès [this message]
2013-03-21 18:58 ` Mike Gran
2013-03-21 20:31 ` Ludovic Courtès
2013-03-21 21:56 ` Karl Berry
2013-03-22 10:14 ` Andy Wingo
2013-03-22 10:33 ` Ludovic Courtès
2013-03-22 10:56 ` Ludovic Courtès
2013-03-22 21:42 ` Ludovic Courtès
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/guile/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87boacboeg.fsf@gnu.org \
--to=ludo@gnu.org \
--cc=bug-texinfo@gnu.org \
--cc=guile-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).