summary refs log tree commit diff
path: root/src/guile
diff options
context:
space:
mode:
authorLudovic Courtès2011-03-10 18:57:41 +0100
committerLudovic Courtès2011-03-10 18:57:41 +0100
commit65f2f4532fb0f04292d8207b801d128fa5e226d1 (patch)
tree62096efbc9ea9e44becd0270db8043116ce8a031 /src/guile
parent8e42aef17f1e0e44fcd4aef39ee3f387e644c12b (diff)
downloadskribilo-65f2f4532fb0f04292d8207b801d128fa5e226d1.tar.gz
skribilo-65f2f4532fb0f04292d8207b801d128fa5e226d1.tar.lz
skribilo-65f2f4532fb0f04292d8207b801d128fa5e226d1.zip
Set `%default-port-encoding' to "UTF-8".
* src/guile/skribilo/utils/syntax.scm (default-to-utf-8): New macro.

* src/guile/skribilo.scm (skribilo): Use it around `(doskribe)'.
Diffstat (limited to 'src/guile')
-rw-r--r--src/guile/skribilo.scm41
-rw-r--r--src/guile/skribilo/utils/syntax.scm15
2 files changed, 34 insertions, 22 deletions
diff --git a/src/guile/skribilo.scm b/src/guile/skribilo.scm
index 985e0cd..8bd3b9a 100644
--- a/src/guile/skribilo.scm
+++ b/src/guile/skribilo.scm
@@ -1,6 +1,6 @@
 ;;; skribilo.scm  --  The Skribilo document processor.
 ;;;
-;;; Copyright 2005, 2006, 2007, 2008, 2009  Ludovic Courtès <ludo@gnu.org>
+;;; Copyright 2005, 2006, 2007, 2008, 2009, 2011  Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright 2003, 2004  Erick Gallesio - I3S-CNRS/ESSI <eg@unice.fr>
 ;;;
 ;;;
@@ -375,24 +375,27 @@ options."
       (if (and output-file (file-exists? output-file))
           (delete-file output-file))
 
-      (parameterize ((*destination-file* output-file)
-                     (*source-file*      input-file)
-                     (*skribilo-output-port*
-                      (if (string? output-file)
-                          (open-output-file output-file)
-                          (current-output-port))))
-
-        (setvbuf (*skribilo-output-port*) _IOFBF 16384)
-
-        (if input-file
-            (with-input-from-file input-file
-              (lambda ()
-                (set-correct-file-encoding!)
-                (doskribe user-module)))
-            (doskribe user-module))
-
-        ;; Make sure the output port is flushed before we leave.
-        (force-output (*skribilo-output-port*))))))
+      ;; Choose UTF-8 as the default encoding so that string ports will
+      ;; accept all of Unicode.
+      (default-to-utf-8
+        (parameterize ((*destination-file* output-file)
+                       (*source-file*      input-file)
+                       (*skribilo-output-port*
+                        (if (string? output-file)
+                            (open-output-file output-file)
+                            (current-output-port))))
+
+          (setvbuf (*skribilo-output-port*) _IOFBF 16384)
+
+          (if input-file
+              (with-input-from-file input-file
+                (lambda ()
+                  (set-correct-file-encoding!)
+                  (doskribe user-module)))
+              (doskribe user-module))
+
+          ;; Make sure the output port is flushed before we leave.
+          (force-output (*skribilo-output-port*)))))))
 
 
 ;;; Local Variables:
diff --git a/src/guile/skribilo/utils/syntax.scm b/src/guile/skribilo/utils/syntax.scm
index 5a42b09..471ea14 100644
--- a/src/guile/skribilo/utils/syntax.scm
+++ b/src/guile/skribilo/utils/syntax.scm
@@ -1,6 +1,6 @@
 ;;; syntax.scm  --  Syntactic candy for Skribilo modules. -*- coding: utf-8 -*-
 ;;;
-;;; Copyright 2005, 2006, 2007, 2008, 2009, 2010  Ludovic Courtès <ludo@gnu.org>
+;;; Copyright 2005, 2006, 2007, 2008, 2009, 2010, 2011  Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;;
 ;;; This program is free software; you can redistribute it and/or modify
@@ -24,6 +24,7 @@
   :use-module (system reader confinement)
   :export (%skribilo-module-reader skribilo-module-syntax
            set-correct-file-encoding!
+           default-to-utf-8
            _ N_
            unwind-protect unless when))
 
@@ -94,10 +95,18 @@
        ;; Use the encoding specified by the `coding:' comment.
        (let ((e (false-if-exception (file-encoding port))))
          (and (string? e)
-              (set-port-encoding! port e)))))))
+              (set-port-encoding! port e))))))
+
+  (define-syntax default-to-utf-8
+    (syntax-rules ()
+      ((_ body ...)
+       (with-fluids ((%default-port-encoding "UTF-8"))
+         body ...)))))
  (else
   (define-macro (set-correct-file-encoding! . p)
-    #f)))
+    #f)
+
+  (define-macro (default-to-utf-8 . rest) #t)))
 
 
 ;;;