2 This file is part of LilyPond, the GNU music typesetter.
4 Copyright (C) 2011 Reinhold Kainhofer <reinhold@kainhofer.com>
6 LilyPond is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
11 LilyPond is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
23 #include "lily-guile.hh"
26 LY_DEFINE (ly_encode_string_for_pdf, "ly:encode-string-for-pdf",
28 "Check whether the string needs to be encoded for PDF output (Latin1,"
29 " PDFDocEncoding or in the most general case UTF-16BE).")
31 LY_ASSERT_TYPE (scm_is_string, str, 1);
32 char *p = ly_scm2str0 (str);
35 gsize bytes_written = 0;
36 g_get_charset (&charset); /* The current locale */
38 /* First, try to convert to ISO-8859-1 (no encodings required) */
39 g = g_convert (p, -1, "ISO-8859-1", charset, 0, &bytes_written, 0);
40 /* If that fails, we have to resolve to full UTF-16BE */
42 char *g_without_BOM = g_convert (p, -1, "UTF-16BE", charset, 0, &bytes_written, 0);
43 /* prepend the BOM manually, g_convert doesn't do it! */
44 g = new char[bytes_written+3];
47 memcpy (&g[2], g_without_BOM, bytes_written+1); // Copy string + \0
53 /* Convert back to SCM object and return it */
55 return scm_from_locale_stringn (g, bytes_written);