]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/general-scheme.cc
Merge with git+ssh://jneem@git.sv.gnu.org/srv/git/lilypond.git
[lilypond.git] / lily / general-scheme.cc
index 5beda8355e9f5ec2940e8cbd0e5ecdc59b68bca4..2ba1cb3b368661b333a7c354d3747b7790d72a4e 100644 (file)
@@ -167,7 +167,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);
 }
@@ -236,7 +236,7 @@ LY_DEFINE (ly_output_formats, "ly:output-formats",
 
 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];
 
@@ -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<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 ());
+}