summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--po/POTFILES.in3
-rw-r--r--src/guile/skribilo/engine/info.scm30
2 files changed, 31 insertions, 2 deletions
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 7754e67..8b9cae1 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,6 +1,6 @@
 # List of source files which contain translatable strings.
 #
-# Copyright 2007, 2008  Ludovic Courtès <ludo@gnu.org>
+# Copyright 2007, 2008, 2009  Ludovic Courtès <ludo@gnu.org>
 
 src/guile/skribilo/utils/syntax.scm
 src/guile/skribilo/biblio/template.scm
@@ -13,4 +13,5 @@ src/guile/skribilo/source.scm
 src/guile/skribilo/sui.scm
 src/guile/skribilo/verify.scm
 src/guile/skribilo/engine/lout.scm
+src/guile/skribilo/engine/info.scm
 src/guile/skribilo/reader/rss-2.scm
diff --git a/src/guile/skribilo/engine/info.scm b/src/guile/skribilo/engine/info.scm
index 811017b..2744f4e 100644
--- a/src/guile/skribilo/engine/info.scm
+++ b/src/guile/skribilo/engine/info.scm
@@ -1,6 +1,6 @@
 ;;; info.scm  --  GNU Info engine.
 ;;;
-;;; Copyright 2008  Ludovic Courtès <ludo@gnu.org>
+;;; Copyright 2008, 2009  Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright 2001, 2002  Manuel Serrano
 ;;;
 ;;;
@@ -31,6 +31,7 @@
   :autoload   (skribilo utils justify) (output-justified make-justifier
                                         with-justification)
   :autoload   (skribilo utils text-table) (table->ascii)
+  :autoload   (srfi srfi-1)            (fold)
   :use-module (srfi srfi-8)
   :use-module (srfi srfi-13)
 
@@ -150,11 +151,38 @@
              (ast->string title)))))
 
 ;*---------------------------------------------------------------------*/
+;*    check-node-title-conflicts ...                                   */
+;*---------------------------------------------------------------------*/
+(define (check-node-title-conflicts doc e)
+  ;; Check whether Info node titles are unique and issue a warning if they're
+  ;; not.  Since we compute node titles based on the `:title' option of
+  ;; sections, we can't guarantee uniqueness so the best we can do is report
+  ;; about it.
+  (let ((sections (search-down %block? doc)))
+    (fold (lambda (section section+title)
+            (let* ((title      (block-title section e))
+                   (same-named (assoc title section+title string=?)))
+              (if (pair? same-named)
+                  (begin
+                    (skribe-warning/ast 1 section
+                                        (format #f
+                                                (_ "Info node title `~A' already used")
+                                                title))
+                    (skribe-warning/ast 1 (cdr same-named)
+                                        (_ "previous occurrence was here"))
+                    section+title)
+                  (alist-cons title section section+title))))
+          '()
+          sections)
+    #t))
+
+;*---------------------------------------------------------------------*/
 ;*    info ::%document ...                                             */
 ;*---------------------------------------------------------------------*/
 (markup-writer 'document info-engine
   :options '(:title :author :ending)
   :action (lambda (doc e)
+            (check-node-title-conflicts doc e)
             (let ((title     (markup-option doc :title))
                   (authors   (markup-option doc :author))
                   (body      (markup-body doc))