print: In R7RS |...| symbols, print most graphic characters unescaped.
[bpt/guile.git] / module / texinfo.scm
index 2ffd853..91bb46d 100644 (file)
@@ -1,6 +1,6 @@
 ;;;; (texinfo) -- parsing of texinfo into SXML
 ;;;;
-;;;;   Copyright (C) 2009, 2010, 2011, 2012  Free Software Foundation, Inc.
+;;;;   Copyright (C) 2009, 2010, 2011, 2012, 2013  Free Software Foundation, Inc.
 ;;;;    Copyright (C) 2004, 2009 Andy Wingo <wingo at pobox dot com>
 ;;;;    Copyright (C) 2001,2002 Oleg Kiselyov <oleg at pobox dot com>
 ;;;;
@@ -187,6 +187,7 @@ lambda. Only present for @code{INLINE-ARGS}, @code{EOL-ARGS},
     (sample             INLINE-TEXT)
     (samp               INLINE-TEXT)
     (code               INLINE-TEXT)
+    (math               INLINE-TEXT)
     (kbd                INLINE-TEXT)
     (key                INLINE-TEXT)
     (var                INLINE-TEXT)
@@ -215,7 +216,8 @@ lambda. Only present for @code{INLINE-ARGS}, @code{EOL-ARGS},
     (value              INLINE-ARGS . (key))
     (ref                INLINE-ARGS . (node #:opt name section info-file manual))
     (xref               INLINE-ARGS . (node #:opt name section info-file manual))
-    (pxref              INLINE-ARGS . (node #:opt name section info-file manual))
+    (pxref              INLINE-TEXT-ARGS
+                        . (node #:opt name section info-file manual))
     (url                ALIAS       . uref)
     (uref               INLINE-ARGS . (url #:opt title replacement))
     (anchor             INLINE-ARGS . (name))
@@ -384,8 +386,14 @@ Examples:
 
 ;; Like a DTD for texinfo
 (define (command-spec command)
-  (or (assq command texi-command-specs)
-      (parser-error #f "Unknown command" command)))
+  (let ((spec (assq command texi-command-specs)))
+    (cond
+     ((not spec)
+      (parser-error #f "Unknown command" command))
+     ((eq? (cadr spec) 'ALIAS)
+      (command-spec (cddr spec)))
+     (else
+      spec))))
 
 (define (inline-content? content)
   (case content
@@ -477,7 +485,7 @@ Examples:
   (assert-curr-char '(#\@) "start of the command" port)
   (let ((peeked (peek-char port)))
     (cond
-     ((memq peeked '(#\! #\. #\? #\@ #\\ #\{ #\}))
+     ((memq peeked '(#\! #\: #\. #\? #\@ #\\ #\{ #\}))
       ;; @-commands that escape characters
       (make-token 'STRING (string (read-char port))))
      (else
@@ -647,11 +655,10 @@ Examples:
     (arguments->attlist port (read-arguments port stop-char) arg-names))
 
   (let* ((spec (command-spec command))
+         (command (car spec))
          (type (cadr spec))
          (arg-names (cddr spec)))
     (case type
-      ((ALIAS)
-       (complete-start-command arg-names port))
       ((INLINE-TEXT)
        (assert-curr-char '(#\{) "Inline element lacks {" port)
        (values command '() type))
@@ -954,7 +961,9 @@ Examples:
                          (loop port expect-eof? end-para need-break? seed)))
                       ((START)          ; Start of an @-command
                        (let* ((head (token-head token))
-                              (type (cadr (command-spec head)))
+                              (spec (command-spec head))
+                              (head (car spec))
+                              (type (cadr spec))
                               (inline? (inline-content? type))
                               (seed ((if (and inline? (not need-break?))
                                          identity end-para) seed))
@@ -1045,8 +1054,9 @@ Examples:
    (lambda (command args content seed)      ; fdown
      '())
    (lambda (command args parent-seed seed)  ; fup
-     (let ((seed (reverse-collect-str-drop-ws seed))
-           (spec (command-spec command)))
+     (let* ((seed (reverse-collect-str-drop-ws seed))
+            (spec (command-spec command))
+            (command (car spec)))
        (if (eq? (cadr spec) 'INLINE-TEXT-ARGS)
            (cons (list command (cons '% (parse-inline-text-args #f spec seed)))
                  parent-seed)
@@ -1062,8 +1072,10 @@ Examples:
   (let ((parser (make-dom-parser)))
     ;; duplicate arguments->attlist to avoid unnecessary splitting
     (lambda (command port)
-      (let ((args (cdar (parser '*ENVIRON-ARGS* port '())))
-            (arg-names (cddr (command-spec command))))
+      (let* ((args (cdar (parser '*ENVIRON-ARGS* port '())))
+             (spec (command-spec command))
+             (command (car spec))
+             (arg-names (cddr spec)))
         (cond
          ((not arg-names)
           (if (null? args) '()