From 556b8f79cbe6b89388a37c3e72037f54229d462d Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Sat, 14 Oct 2006 23:47:03 +0000 Subject: [PATCH] (LY_DEFINE): move ly_camel_case_to_lisp_identifier to here. Use vector iso. char[] --- ChangeLog | 3 +++ lily/general-scheme.cc | 29 +++++++++++++++++++++++++++++ lily/music-scheme.cc | 24 ------------------------ 3 files changed, 32 insertions(+), 24 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6e3e17f7cc..5b48a3c217 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2006-10-15 Han-Wen Nienhuys + * lily/general-scheme.cc (LY_DEFINE): move + ly_camel_case_to_lisp_identifier to here. Use vector iso. char[] + * Documentation/topdocs/NEWS.tely (Top): add note for string-finger feature. diff --git a/lily/general-scheme.cc b/lily/general-scheme.cc index 6b96729d42..2ede20deb1 100644 --- a/lily/general-scheme.cc +++ b/lily/general-scheme.cc @@ -323,3 +323,32 @@ LY_DEFINE(ly_hash_table_keys, "ly:hash-table-keys", 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 to foo-bar 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); + + vector out; + + /* don't add '-' before first character */ + out.push_back (tolower (in[0])); + + for (size_t inpos = 1; inpos < in.size (); inpos++) + { + if (isupper (in[inpos])) + out.push_back ('-'); + out.push_back (tolower (in[inpos])); + } + + string result (&out[0], out.size ()); + return ly_symbol2scm (result.c_str ()); +} diff --git a/lily/music-scheme.cc b/lily/music-scheme.cc index dfe4f47c16..27e5db9880 100644 --- a/lily/music-scheme.cc +++ b/lily/music-scheme.cc @@ -215,27 +215,3 @@ LY_DEFINE (ly_transpose_key_alist, "ly:transpose-key-alist", return scm_reverse_x (newlist, SCM_EOL); } -/* - TODO: does this belong here? -*/ -LY_DEFINE (ly_camel_case_to_lisp_identifier, "ly:camel-case->lisp-identifier", - 1, 0, 0, (SCM name_sym), - "Convert music name to corresponding event class name.") -{ - /* UGH. There should be a better way. */ - const string in = ly_symbol2string (name_sym); - /* this should be sufficient */ - char out[in.size() * 2 + 2]; - /* don't add '-' before first character */ - out[0] = tolower (in[0]); - size_t outpos = 1; - for (size_t inpos = 1; inpos < in.size (); inpos++) - { - if (isupper (in[inpos])) - out[outpos++] = '-'; - out[outpos++] = tolower (in[inpos]); - } - out[outpos] = 0; - - return ly_symbol2scm (out); -} -- 2.39.5