summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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)))
;;;