/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1998--2010 Jan Nieuwenhuizen <janneke@gnu.org>
+ Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
#include "version.hh"
#include "warn.hh"
-
/*
symbols/strings.
*/
ly_scm_write_string (SCM s)
{
SCM port = scm_mkstrport (SCM_INUM0,
- scm_make_string (SCM_INUM0, SCM_UNDEFINED),
- SCM_OPN | SCM_WRTNG,
- "ly_write2string");
+ scm_make_string (SCM_INUM0, SCM_UNDEFINED),
+ SCM_OPN | SCM_WRTNG,
+ "ly_write2string");
// SCM write = scm_eval_3 (ly_symbol2scm ("write"), s, SCM_EOL);
SCM write = scm_primitive_eval (ly_symbol2scm ("write"));
/*
Ugh. this is not very efficient.
*/
- SCM str = scm_symbol_to_string (s);
- return ly_scm2string (str);
+ return ly_scm2string (scm_symbol_to_string (s));
+}
+
+string
+robust_symbol2string (SCM sym, string str)
+{
+ return scm_is_symbol (sym) ? ly_symbol2string (sym) : str;
}
string
if (s == "")
{
if (must_exist)
- {
- string e = _f ("cannot find file: `%s'", fn);
- e += " ";
- e += _f ("(load path: `%s')", global_path.to_string ());
- error (e);
- /* unreachable */
- }
+ {
+ string e = _f ("cannot find file: `%s'", fn);
+ e += " ";
+ e += _f ("(load path: `%s')", global_path.to_string ());
+ error (e);
+ /* unreachable */
+ }
return s;
}
- if (be_verbose_global)
- progress_indication ("[" + s);
+ debug_output ("[" + s, true);
vector<char> chars = gulp_file (s, size);
string result (&chars[0], chars.size ());
- if (be_verbose_global)
- progress_indication ("]\n");
+ debug_output ("]\n", false);
return result;
}
assert (scm_is_string (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);
- }
+ if (len)
+ {
+ result.resize (len);
+ scm_to_locale_stringbuf (str, &result.at (0), len);
+ }
return result;
}
ly_string2scm (string const &str)
{
return scm_from_locale_stringn (str.c_str (),
- str.length ());
+ str.length ());
}
-
char *
-ly_scm2newstr (SCM str, size_t *lenp)
+ly_scm2str0 (SCM str)
{
- char* p = scm_to_locale_stringn(str, lenp);
- return p;
+ return scm_to_locale_string (str);
}
/*
PAIRS
*/
-SCM
+SCM
index_get_cell (SCM s, Direction d)
{
assert (d);
is_number_pair (SCM p)
{
return scm_is_pair (p)
- && scm_is_number (scm_car (p)) && scm_is_number (scm_cdr (p));
+ && scm_is_number (scm_car (p)) && scm_is_number (scm_cdr (p));
}
-
unsigned int
ly_scm_hash (SCM s)
{
bool
is_axis (SCM s)
{
- if (scm_is_number (s))
+ if (scm_is_integer (s))
{
int i = scm_to_int (s);
return i == 0 || i == 1;
Interval
ly_scm2interval (SCM p)
{
- return Interval (scm_to_double (scm_car (p)), scm_to_double (scm_cdr (p)));
+ return Interval (scm_to_double (scm_car (p)),
+ scm_to_double (scm_cdr (p)));
}
Drul_array<Real>
ly_scm2realdrul (SCM p)
{
return Drul_array<Real> (scm_to_double (scm_car (p)),
- scm_to_double (scm_cdr (p)));
+ scm_to_double (scm_cdr (p)));
}
SCM
return scm_cons (scm_from_double (i[LEFT]), scm_from_double (i[RIGHT]));
}
-
Interval
robust_scm2interval (SCM k, Drul_array<Real> v)
{
ly_scm2offset (SCM s)
{
return Offset (scm_to_double (scm_car (s)),
- scm_to_double (scm_cdr (s)));
+ scm_to_double (scm_cdr (s)));
}
Offset
return os;
}
-
-
-
/*
ALIST
*/
-
-bool
-alist_equal_p (SCM a, SCM b)
-{
- for (SCM s = a;
- scm_is_pair (s); s = scm_cdr (s))
- {
- SCM key = scm_caar (s);
- SCM val = scm_cdar (s);
- SCM l = scm_assoc (key, b);
-
- if (l == SCM_BOOL_F
- || !ly_is_equal (scm_cdr (l), val))
-
- return false;
- }
- return true;
-}
-
SCM
ly_alist_vals (SCM alist)
{
return scm_car (l);
}
-
SCM
ly_deep_copy (SCM src)
{
{
int len = scm_c_vector_length (src);
SCM nv = scm_c_make_vector (len, SCM_UNDEFINED);
- for (int i = 0;i < len; i++)
- {
- SCM si = scm_from_int (i);
- scm_vector_set_x (nv, si, ly_deep_copy (scm_vector_ref (src, si)));
- }
+ for (int i = 0; i < len; i++)
+ {
+ SCM si = scm_from_int (i);
+ scm_vector_set_x (nv, si, ly_deep_copy (scm_vector_ref (src, si)));
+ }
}
return src;
}
string realval = ly_scm_write_string (val);
if (realval.length () > 200)
realval = realval.substr (0, 100)
- + "\n :\n :\n"
- + realval.substr (realval.length () - 100);
+ + "\n :\n :\n"
+ + realval.substr (realval.length () - 100);
return realval;
}
#if 0
return false;
#else
- /*
- This is used for autoBeamSettings.
+ /*
+ This is used for autoBeamSettings.
- TODO: deprecate the use of \override and \revert for
- autoBeamSettings?
+ TODO: deprecate the use of \override and \revert for
+ autoBeamSettings?
- or use a symbol autoBeamSettingS?
- */
- return true;
+ or use a symbol autoBeamSettingS?
+ */
+ return true;
#endif
SCM type = scm_object_property (sym, type_symbol);
if (type != SCM_EOL && !ly_is_procedure (type))
{
warning (_f ("cannot find property type-check for `%s' (%s).",
- ly_symbol2string (sym).c_str (),
- ly_symbol2string (type_symbol).c_str ())
- + " " + _ ("perhaps a typing error?"));
+ ly_symbol2string (sym).c_str (),
+ ly_symbol2string (type_symbol).c_str ())
+ + " " + _ ("perhaps a typing error?"));
/* Be strict when being anal :) */
if (do_internal_type_checking_global)
- scm_throw (ly_symbol2scm ("ly-file-failed"), scm_list_3 (ly_symbol2scm ("typecheck"),
- sym, val));
+ scm_throw (ly_symbol2scm ("ly-file-failed"), scm_list_3 (ly_symbol2scm ("typecheck"),
+ sym, val));
warning (_ ("doing assignment anyway"));
}
else
{
if (val != SCM_EOL
- && ly_is_procedure (type)
- && scm_call_1 (type, val) == SCM_BOOL_F)
- {
- ok = false;
- SCM typefunc = ly_lily_module_constant ("type-name");
- SCM type_name = scm_call_1 (typefunc, type);
-
- warning (_f ("type check for `%s' failed; value `%s' must be of type `%s'",
- ly_symbol2string (sym).c_str (),
- print_scm_val (val),
- ly_scm2string (type_name).c_str ()));
- progress_indication ("\n");
- }
+ && ly_is_procedure (type)
+ && scm_call_1 (type, val) == SCM_BOOL_F)
+ {
+ ok = false;
+ SCM typefunc = ly_lily_module_constant ("type-name");
+ SCM type_name = scm_call_1 (typefunc, type);
+
+ warning (_f ("type check for `%s' failed; value `%s' must be of type `%s'",
+ ly_symbol2string (sym).c_str (),
+ print_scm_val (val),
+ ly_scm2string (type_name).c_str ()));
+ progress_indication ("\n");
+ }
}
return ok;
}
for (SCM i = list; scm_is_pair (i); i = scm_cdr (i))
{
if (!scm_is_pair (scm_cdr (i))
- || !ly_is_equal (scm_car (i), scm_cadr (i)))
- unique = scm_cons (scm_car (i), unique);
+ || !ly_is_equal (scm_car (i), scm_cadr (i)))
+ unique = scm_cons (scm_car (i), unique);
}
return scm_reverse_x (unique, SCM_EOL);
}
-
/* Split list at member s, removing s.
Return (BEFORE . AFTER) */
SCM
SCM i = scm_car (after);
after = scm_cdr (after);
if (ly_is_equal (i, s))
- break;
+ break;
before = scm_cons (i, before);
}
return scm_cons (scm_reverse_x (before, SCM_EOL), after);
return x;
}
+vector<Real>
+ly_scm2floatvector (SCM l)
+{
+ vector<Real> floats;
+ for (SCM s = l; scm_is_pair (s); s = scm_cdr (s))
+ floats.push_back (robust_scm2double (scm_car (s), 0.0));
+ return floats;
+}
+
+SCM
+ly_floatvector2scm (vector<Real> v)
+{
+ SCM l = SCM_EOL;
+ SCM *tail = &l;
+ for (vsize i = 0; i < v.size (); i++)
+ {
+ *tail = scm_cons (scm_from_double (v[i]), SCM_EOL);
+ tail = SCM_CDRLOC (*tail);
+ }
+ return l;
+}
string
robust_scm2string (SCM k, string s)
return o;
}
+vsize
+robust_scm2vsize (SCM k, vsize o)
+{
+ if (scm_integer_p (k) == SCM_BOOL_T)
+ {
+ int i = scm_to_int (k);
+ if (i >= 0)
+ return (vsize) i;
+ }
+ return o;
+}
SCM
ly_rational2scm (Rational r)
{
return scm_divide (scm_from_int64 (r.numerator ()),
- scm_from_int64 (r.denominator ()));
+ scm_from_int64 (r.denominator ()));
}
-
Rational
ly_scm2rational (SCM r)
{
return Rational (scm_to_int64 (scm_numerator (r)),
- scm_to_int64 (scm_denominator (r)));
+ scm_to_int64 (scm_denominator (r)));
}
Rational
return scm_call_1 (func, tab);
}
-
/*
C++ interfacing.
*/
replace_all (&cxx_id, "__", "::");
replace_all (&cxx_id, '_', '-');
-
return cxx_id;
}
-
-
SCM
ly_string_array_to_scm (vector<string> a)
{
SCM s = SCM_EOL;
- for (vsize i = a.size (); i ; i--)
+ for (vsize i = a.size (); i; i--)
s = scm_cons (ly_symbol2scm (a[i - 1].c_str ()), s);
return s;
}