summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2016-06-24 17:09:39 +0200
committerAndy Wingo <wingo@pobox.com>2016-06-24 17:09:39 +0200
commitbd65845497110b179456d4bfdf26854791f0a822 (patch)
treea99bf2700d35c204ae0dcb67e1e08b06e414dc78
parentd848af9a161b0c37964d582dfb8b52ed5112355f (diff)
downloadguile-bd65845497110b179456d4bfdf26854791f0a822.tar.gz
Fix texinfo->html for @acronym, @itemize
* module/texinfo/html.scm (itemize, acronym, tag-replacements, rules): Fix HTML serialization of @itemize and @acronym. Fixes #21772. * test-suite/tests/texinfo.html.test: New file. * test-suite/Makefile.am: Add new file.
-rw-r--r--module/texinfo/html.scm24
-rw-r--r--test-suite/Makefile.am1
-rw-r--r--test-suite/tests/texinfo.html.test36
3 files changed, 56 insertions, 5 deletions
diff --git a/module/texinfo/html.scm b/module/texinfo/html.scm
index 709744dc3..6a07cffce 100644
--- a/module/texinfo/html.scm
+++ b/module/texinfo/html.scm
@@ -37,10 +37,11 @@
;; margin-top on dd > p)
(define-module (texinfo html)
- :use-module (texinfo)
- :use-module (sxml transform)
- :use-module (srfi srfi-13)
- :export (stexi->shtml add-ref-resolver! urlify))
+ #:use-module (texinfo)
+ #:use-module (sxml transform)
+ #:use-module (ice-9 match)
+ #:use-module (srfi srfi-13)
+ #:export (stexi->shtml add-ref-resolver! urlify))
;; The caller is responsible for carring the returned list.
(define (arg-ref key %-args)
@@ -138,6 +139,18 @@ name, @code{#}, and the node name."
(cdr elts))
elts)))
+(define (itemize tag . elts)
+ `(ul ,@(match elts
+ ;; Strip `bullet' attribute.
+ ((('% . attrs) . elts) elts)
+ (elts elts))))
+
+(define (acronym tag . elts)
+ (match elts
+ ;; FIXME: Need attribute matcher that doesn't depend on attribute
+ ;; order.
+ ((('% ('acronym text) . _)) `(acronym ,text))))
+
(define (table tag args . body)
(let ((formatter (caar (arg-req 'formatter args))))
(cons 'dl
@@ -184,7 +197,6 @@ name, @code{#}, and the node name."
(subheading h4)
(subsubheading h5)
(quotation blockquote)
- (itemize ul)
(item li) ;; itemx ?
(para p)
(*fragment* div) ;; should be ok
@@ -234,6 +246,8 @@ name, @code{#}, and the node name."
(node . ,node) (anchor . ,node)
(table . ,table)
(enumerate . ,enumerate)
+ (itemize . ,itemize)
+ (acronym . ,acronym)
(entry *preorder* . ,entry)
(deftp . ,def) (defcv . ,def) (defivar . ,def) (deftypeivar . ,def)
diff --git a/test-suite/Makefile.am b/test-suite/Makefile.am
index 5b498608f..473501ee2 100644
--- a/test-suite/Makefile.am
+++ b/test-suite/Makefile.am
@@ -176,6 +176,7 @@ SCM_TESTS = tests/00-initial-env.test \
tests/syntax.test \
tests/texinfo.test \
tests/texinfo.docbook.test \
+ tests/texinfo.html.test \
tests/texinfo.serialize.test \
tests/texinfo.string-utils.test \
tests/threads.test \
diff --git a/test-suite/tests/texinfo.html.test b/test-suite/tests/texinfo.html.test
new file mode 100644
index 000000000..02f4d28c3
--- /dev/null
+++ b/test-suite/tests/texinfo.html.test
@@ -0,0 +1,36 @@
+;;;; texinfo.html.test -*- scheme -*-
+;;;;
+;;;; Copyright (C) 2016 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
+
+;;; Commentary:
+;;
+;; Unit tests for (texinfo html).
+;;
+;;; Code:
+
+(define-module (test-suite texinfo-html)
+ #:use-module (test-suite lib)
+ #:use-module (texinfo)
+ #:use-module (texinfo html))
+
+(define (texi-fragment->shtml str)
+ (stexi->shtml (texi-fragment->stexi str)))
+
+(pass-if-equal '(div (ul (li (p "foo"))))
+ (texi-fragment->shtml "@itemize\n@item foo\n@end itemize\n"))
+(pass-if-equal '(div (p (acronym "GNU")))
+ (texi-fragment->shtml "@acronym{GNU}\n"))