X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fgeneral-scheme.cc;h=142e7c2befa8179363c96a2ff10ea261faf655c1;hb=9e69cb84d6ee5b0a861cd97869b10e3bdf0c833c;hp=d5f07b53d029df439fa6d6a44cd4f150abec9e8f;hpb=4ecdbd7d70ca7441be4dddd15ac01cc255bc2a35;p=lilypond.git diff --git a/lily/general-scheme.cc b/lily/general-scheme.cc index d5f07b53d0..142e7c2bef 100644 --- a/lily/general-scheme.cc +++ b/lily/general-scheme.cc @@ -3,13 +3,12 @@ source file of the GNU LilyPond music typesetter - (c) 1998--2005 Jan Nieuwenhuizen - Han-Wen Nienhuys + (c) 1998--2006 Jan Nieuwenhuizen + Han-Wen Nienhuys */ #include "config.hh" -#include /* isinf */ #include #include /* memset */ using namespace std; @@ -17,7 +16,6 @@ using namespace std; #include "international.hh" #include "libc-extension.hh" #include "lily-guile.hh" -#include "string.hh" #include "misc.hh" #include "warn.hh" #include "version.hh" @@ -32,12 +30,12 @@ LY_DEFINE (ly_find_file, "ly:find-file", { SCM_ASSERT_TYPE (scm_is_string (name), name, SCM_ARG1, __FUNCTION__, "string"); - String nm = ly_scm2string (name); - String file_name = global_path.find (nm); - if (file_name.is_empty ()) + string nm = ly_scm2string (name); + string file_name = global_path.find (nm); + if (file_name.empty ()) return SCM_BOOL_F; - return scm_makfrom0str (file_name.to_str0 ()); + return scm_makfrom0str (file_name.c_str ()); } /* @@ -57,8 +55,8 @@ LY_DEFINE (ly_gulp_file, "ly:gulp-file", sz = scm_to_int (size); } - String contents = gulp_file_to_string (ly_scm2string (name), true, sz); - return scm_from_locale_stringn (contents.get_str0 (), contents.length ()); + string contents = gulp_file_to_string (ly_scm2string (name), true, sz); + return scm_from_locale_stringn (contents.c_str (), contents.length ()); } LY_DEFINE (ly_error, "ly:error", @@ -168,7 +166,7 @@ LY_DEFINE (ly_number2string, "ly:number->string", snprintf (str, sizeof (str), "%08.4f", r); } else - snprintf (str, sizeof (str), "%d", scm_to_int (s)); + snprintf (str, sizeof (str), "%d", int (scm_to_int (s))); return scm_makfrom0str (str); } @@ -210,14 +208,14 @@ LY_DEFINE (ly_gettext, "ly:gettext", { SCM_ASSERT_TYPE (scm_is_string (string), string, SCM_ARG1, __FUNCTION__, "string"); - return scm_makfrom0str (_ (scm_i_string_chars (string)).to_str0 ()); + return scm_makfrom0str (_ (scm_i_string_chars (string)).c_str ()); } LY_DEFINE (ly_output_backend, "ly:output-backend", 0, 0, 0, (), "Return name of output backend.") { - return scm_makfrom0str (output_backend_global.to_str0 ()); + return scm_makfrom0str (output_backend_global.c_str ()); } LY_DEFINE (ly_output_formats, "ly:output-formats", @@ -225,19 +223,19 @@ LY_DEFINE (ly_output_formats, "ly:output-formats", "Formats passed to --format as a list of strings, " "used for the output.") { - Array output_formats = split_string (output_format_global, ','); + vector output_formats = string_split (output_format_global, ','); SCM lst = SCM_EOL; int output_formats_count = output_formats.size (); for (int i = 0; i < output_formats_count; i++) - lst = scm_cons (scm_makfrom0str (output_formats[i].to_str0 ()), lst); + lst = scm_cons (scm_makfrom0str (output_formats[i].c_str ()), lst); return lst; } LY_DEFINE (ly_wchar_to_utf_8, "ly:wide-char->utf-8", 1, 0, 0, (SCM wc), - "Encode the Unicode codepoint @var{wc} as UTF-8") + "Encode the Unicode codepoint @var{wc}, an integer, as UTF-8") { char buf[5]; @@ -274,7 +272,7 @@ LY_DEFINE (ly_effective_prefix, "ly:effective-prefix", 0, 0, 0, (), "Return effective prefix.") { - return scm_makfrom0str (prefix_directory.to_str0 ()); + return scm_makfrom0str (prefix_directory.c_str ()); } LY_DEFINE (ly_chain_assoc_get, "ly:chain-assoc-get", @@ -308,3 +306,36 @@ LY_DEFINE (ly_stderr_redirect, "ly:stderr-redirect", freopen (ly_scm2newstr (file_name, 0), m, stderr); return SCM_UNSPECIFIED; } + +static SCM +accumulate_symbol (void *closure, SCM key, SCM val, SCM result) +{ + (void) closure; + (void) val; + return scm_cons (key, result); +} + +LY_DEFINE(ly_hash_table_keys, "ly:hash-table-keys", + 1,0,0, (SCM tab), + "return a list of keys in @var{tab}") +{ + return scm_internal_hash_fold ((Hash_closure_function) & accumulate_symbol, + NULL, SCM_EOL, tab); +} + +LY_DEFINE (ly_camel_case_to_lisp_identifier, "ly:camel-case->lisp-identifier", + 1, 0, 0, (SCM name_sym), + "Convert FooBar_Bla to foo-bar-bla style symbol.") +{ + SCM_ASSERT_TYPE(scm_is_symbol (name_sym), name_sym, + SCM_ARG1, __FUNCTION__, "symbol"); + + /* + TODO: should use strings instead? + */ + + const string in = ly_symbol2string (name_sym); + string result = camel_case_to_lisp_identifier (in); + + return ly_symbol2scm (result.c_str ()); +}