/*
- lily-guile.cc -- implement assorted SCM interface functions
+ This file is part of LilyPond, the GNU music typesetter.
- source file of the GNU LilyPond music typesetter
-
- (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1998--2010 Jan Nieuwenhuizen <janneke@gnu.org>
Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+ LilyPond is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ LilyPond is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
*/
#include "lily-guile.hh"
string result (&chars[0], chars.size ());
if (be_verbose_global)
- progress_indication ("]");
+ progress_indication ("]\n");
return result;
}
ly_scm2string (SCM str)
{
assert (scm_is_string (str));
- return string (scm_i_string_chars (str),
- (int) scm_i_string_length (str));
+ string result;
+ size_t len = scm_c_string_length (str);
+ if (len) {
+ result.resize(len);
+ scm_to_locale_stringbuf(str, &result.at(0), len);
+ }
+ return result;
}
SCM
char *
ly_scm2newstr (SCM str, size_t *lenp)
{
- LY_ASSERT_TYPE (scm_is_string, str, 1);
-
- size_t len = scm_i_string_length (str);
- if (char *new_str = (char *) malloc ((len + 1) * sizeof (char)))
- {
- memcpy (new_str, scm_i_string_chars (str), len);
- new_str[len] = '\0';
-
- if (lenp)
- *lenp = len;
-
- return new_str;
- }
- return 0;
+ char* p = scm_to_locale_stringn(str, lenp);
+ return p;
}
-
/*
PAIRS
*/
-SCM
+SCM
index_get_cell (SCM s, Direction d)
{
-
assert (d);
return (d == LEFT) ? scm_car (s) : scm_cdr (s);
}
return scm_ihashv (s, ~1u);
}
-
bool
is_axis (SCM s)
{
SCM
ly_rational2scm (Rational r)
{
- return scm_divide (scm_from_int (r.numerator ()), scm_from_int (r.denominator ()));
+ return scm_divide (scm_from_int64 (r.numerator ()),
+ scm_from_int64 (r.denominator ()));
}
Rational
ly_scm2rational (SCM r)
{
- return Rational (scm_to_int (scm_numerator (r)),
- scm_to_int (scm_denominator (r)));
+ return Rational (scm_to_int64 (scm_numerator (r)),
+ scm_to_int64 (scm_denominator (r)));
}
Rational
else if (cxx_id.substr (cxx_id.length () - 2) == "_x")
cxx_id = cxx_id.replace (cxx_id.length () - 2, 2, "!");
- cxx_id = replace_all (cxx_id, "_less?", "<?");
- cxx_id = replace_all (cxx_id, "_2_", "->");
- cxx_id = replace_all (cxx_id, "__", "::");
- cxx_id = replace_all (cxx_id, '_', '-');
+ replace_all (&cxx_id, "_less?", "<?");
+ replace_all (&cxx_id, "_2_", "->");
+ replace_all (&cxx_id, "__", "::");
+ replace_all (&cxx_id, '_', '-');
return cxx_id;
while (isspace (*symbols))
*symbols++;
string s = symbols;
- replace_all (s, '\n', ' ');
- replace_all (s, '\t', ' ');
- replace_all (s, " ", " ");
+ replace_all (&s, '\n', ' ');
+ replace_all (&s, '\t', ' ');
+ replace_all (&s, " ", " ");
return ly_string_array_to_scm (string_split (s, ' '));
}