From bd65845497110b179456d4bfdf26854791f0a822 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Fri, 24 Jun 2016 17:09:39 +0200 Subject: 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. --- module/texinfo/html.scm | 24 +++++++++++++++++++----- test-suite/Makefile.am | 1 + test-suite/tests/texinfo.html.test | 36 ++++++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+), 5 deletions(-) create mode 100644 test-suite/tests/texinfo.html.test 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")) -- cgit v1.2.3