2006-10-15 Han-Wen Nienhuys <hanwen@lilypond.org>
+ * lily/general-scheme.cc (LY_DEFINE): move
+ ly_camel_case_to_lisp_identifier to here. Use vector<char> iso. char[]
+
* Documentation/topdocs/NEWS.tely (Top): add note for
string-finger feature.
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<char> 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 ());
+}
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);
-}