From d266c260e569d3372fa09c121a04755e6d3c3bbb Mon Sep 17 00:00:00 2001
From: Ludovic Courtès
Date: Thu, 10 May 2012 23:47:01 +0200
Subject: info/latex/lout: Set the output port's encoding.

* src/guile/skribilo/engine/html.scm (document): Fix typo in comment.

* src/guile/skribilo/engine/info.scm (document)[guile-2]: Set the
  current output port's encoding to "UTF-8".
* src/guile/skribilo/engine/latex.scm (latex-engine)[encoding]: New
  custom.
  (document): Set the output port's encoding to that.  When that
  encoding is "UTF-8", add the right \usepackage.
* src/guile/skribilo/engine/lout.scm (lout-engine)[encoding]: New
  custom.
  (document): Set the output encoding.  Emit `@SysInclude { latin2 }'
  for ISO-8859-2.
---
 src/guile/skribilo/engine/html.scm  |  2 +-
 src/guile/skribilo/engine/info.scm  |  7 ++++++-
 src/guile/skribilo/engine/latex.scm | 13 ++++++++++++-
 src/guile/skribilo/engine/lout.scm  | 18 ++++++++++++++++++
 4 files changed, 37 insertions(+), 3 deletions(-)

(limited to 'src')

diff --git a/src/guile/skribilo/engine/html.scm b/src/guile/skribilo/engine/html.scm
index ae414b6..1621595 100644
--- a/src/guile/skribilo/engine/html.scm
+++ b/src/guile/skribilo/engine/html.scm
@@ -611,7 +611,7 @@
 
                  (cond-expand
                   (guile-2
-                   ;; Make sure the output is suitable encoded.
+                   ;; Make sure the output is suitably encoded.
                    (and=> (engine-custom e 'charset)
                           (lambda (charset)
                             (set-port-encoding! (current-output-port)
diff --git a/src/guile/skribilo/engine/info.scm b/src/guile/skribilo/engine/info.scm
index ec92ce5..592e1fe 100644
--- a/src/guile/skribilo/engine/info.scm
+++ b/src/guile/skribilo/engine/info.scm
@@ -1,7 +1,7 @@
 ;;; info.scm  --  GNU Info engine.
 ;;; -*- coding: iso-8859-1 -*-
 ;;;
-;;; Copyright 2008, 2009  Ludovic Courtès <ludo@gnu.org>
+;;; Copyright 2008, 2009, 2012  Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright 2001, 2002  Manuel Serrano
 ;;;
 ;;;
@@ -186,6 +186,11 @@
   :options '(:title :author :ending)
   :action (lambda (doc e)
             (check-node-title-conflicts doc e)
+
+            (cond-expand
+             (guile-2 (set-port-encoding! (current-output-port) "UTF-8"))
+             (else #t))
+
             (let ((title     (markup-option doc :title))
                   (authors   (markup-option doc :author))
                   (body      (markup-body doc))
diff --git a/src/guile/skribilo/engine/latex.scm b/src/guile/skribilo/engine/latex.scm
index ab19ee4..eeae1fc 100644
--- a/src/guile/skribilo/engine/latex.scm
+++ b/src/guile/skribilo/engine/latex.scm
@@ -1,7 +1,7 @@
 ;;; latex.scm  --  LaTeX engine.
 ;;; -*- coding: iso-8859-1 -*-
 ;;;
-;;; Copyright 2007, 2009  Ludovic Court�s <ludo@gnu.org>
+;;; Copyright 2007, 2009, 2012  Ludovic Court�s <ludo@gnu.org>
 ;;; Copyright 2003, 2004  Manuel Serrano
 ;;;
 ;;;
@@ -356,6 +356,7 @@
 	 :delegate (find-engine 'base)
 	 :filter (make-string-replace latex-encoding)
 	 :custom '((documentclass "\\documentclass{article}")
+                   (encoding "UTF-8")
                    (class-has-chapters? #f)
 		   (usepackage "\\usepackage{epsfig}\n")
 		   (predocument "\\newdimen\\oldframetabcolsep\n\\newdimen\\oldcolortabcolsep\n\\newdimen\\oldpretabcolsep\n")
@@ -517,6 +518,16 @@
 		 (if dc
 		     (begin (display dc) (newline))
 		     (display "\\documentclass{article}\n")))
+
+              (cond-expand
+               (guile-2
+                (let ((encoding (engine-custom e 'encoding)))
+                  (set-port-encoding! (current-output-port) encoding)
+                  (set-port-conversion-strategy! (current-output-port) 'error)
+                  (if (string-ci=? encoding "UTF-8") ; FIXME: other encodings?
+                      (display "\\usepackage[utf8]{inputenc}\n"))))
+               (else #t))
+
 	      (if (latex-color? e)
 		  (display (engine-custom e 'color-usepackage)))
 	      (if (engine-custom e 'hyperref)
diff --git a/src/guile/skribilo/engine/lout.scm b/src/guile/skribilo/engine/lout.scm
index 93a7f5b..7ce8efa 100644
--- a/src/guile/skribilo/engine/lout.scm
+++ b/src/guile/skribilo/engine/lout.scm
@@ -577,6 +577,9 @@
 			 ;; file is deduced from `document-type'.
 			 (document-include auto)
 
+                         ;; Encoding of the output file.
+                         (encoding "ISO-8859-1")
+
 			 (includes "@SysInclude { tbl }\n")
 			 (initial-font "Palatino Base 10p")
 			 (initial-break
@@ -1080,6 +1083,21 @@
 (markup-writer 'document
    :options '(:title :author :ending :keywords :env)
    :before (lambda (n e) ;; `e' is the engine
+             (cond-expand
+              (guile-2
+               ;; Make sure the output is suitably encoded.
+               (let ((encoding (engine-custom e 'encoding)))
+                 (set-port-encoding! (current-output-port) encoding)
+                 (set-port-conversion-strategy! (current-output-port) 'error)
+                 (cond ((string-ci=? encoding "ISO-8859-2")
+                        (display "@SysInclude { latin2 }\n"))
+                       ((not (string-ci=? encoding "ISO-8859-1"))
+                        (raise (condition
+                                (&invalid-argument-error
+                                 (proc-name 'lout)
+                                 (argument encoding))))))))
+              (else #t))
+
 	     (let* ((doc-type (let ((d (engine-custom e 'document-type)))
 				(if (string? d)
 				    (begin
-- 
cgit v1.2.3