X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Flily-guile.cc;h=fea8836250486100480bb20aa99adf45f07f40ab;hb=ce40a498e9f6977a5d65af8fbe5d904c3b29ec37;hp=e5cdbc77f2732aef18d0e38794ccbf950e9aa710;hpb=00e3e15364b9d3c94cda1bcab9f889bb95f6832d;p=lilypond.git diff --git a/lily/lily-guile.cc b/lily/lily-guile.cc index e5cdbc77f2..fea8836250 100644 --- a/lily/lily-guile.cc +++ b/lily/lily-guile.cc @@ -1,10 +1,21 @@ /* - 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 + Copyright (C) 1998--2010 Jan Nieuwenhuizen Han-Wen Nienhuys + + 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 . */ #include "lily-guile.hh" @@ -89,7 +100,7 @@ gulp_file_to_string (string fn, bool must_exist, int size) string result (&chars[0], chars.size ()); if (be_verbose_global) - progress_indication ("]"); + progress_indication ("]\n"); return result; } @@ -111,8 +122,13 @@ string 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 @@ -126,30 +142,16 @@ ly_string2scm (string const &str) 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); } @@ -178,7 +180,6 @@ ly_scm_hash (SCM s) return scm_ihashv (s, ~1u); } - bool is_axis (SCM s) { @@ -571,15 +572,16 @@ robust_scm2int (SCM k, int o) 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 @@ -634,10 +636,10 @@ mangle_cxx_identifier (string cxx_id) 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, "__", "::"); - cxx_id = replace_all (cxx_id, '_', '-'); + replace_all (&cxx_id, "_less?", ""); + replace_all (&cxx_id, "__", "::"); + replace_all (&cxx_id, '_', '-'); return cxx_id; @@ -661,8 +663,9 @@ parse_symbol_list (char const *symbols) while (isspace (*symbols)) *symbols++; string s = symbols; - replace_all (s, '\n', ' '); - replace_all (s, '\t', ' '); + replace_all (&s, '\n', ' '); + replace_all (&s, '\t', ' '); + replace_all (&s, " ", " "); return ly_string_array_to_scm (string_split (s, ' ')); }