- SCM f = me->get_paper ()->lookup_variable (ly_symbol2scm ("markup-to-properties"));
-
- SCM markup = ly_car (markup_text);
- SCM text = ly_cdr (markup_text);
-
- /* ARGRGRRGRARGRA
- */
-
- SCM abbrev = me->get_paper ()->lookup_variable (ly_symbol2scm ("abbreviation-alist"));
- SCM style = me->get_paper ()->lookup_variable (ly_symbol2scm ("style-alist"));
-
- SCM p = gh_cons (scm_call_3 (f, abbrev, style, markup), alist_chain);
-
- Real staff_space = Staff_symbol_referencer::staff_space (me);
-
- /*
- Line mode is default.
- */
- Axis axis = X_AXIS;
-
- SCM a = ly_assoc_chain (ly_symbol2scm ("axis"), p);
- if (gh_pair_p (a) && ly_axis_p (ly_cdr (a)))
- axis = (Axis)gh_scm2int (ly_cdr (a));
-
- Real baseline_skip = 0;
- SCM b = ly_assoc_chain (ly_symbol2scm ("baseline-skip"), p);
- if (gh_pair_p (b) && gh_number_p (ly_cdr (b)))
- baseline_skip = gh_scm2double (ly_cdr (b)) * staff_space;
-
- Real kern[2] = {0,0};
-
- SCM k = ly_assoc_chain (ly_symbol2scm ("kern"), p);
- if (gh_pair_p (k) && gh_number_p (ly_cdr (k)))
- kern[axis] = gh_scm2double (ly_cdr (k)) * staff_space;
-
- Real raise = 0;
- SCM r = ly_assoc_chain (ly_symbol2scm ("raise"), p);
- if (gh_pair_p (r) && gh_number_p (ly_cdr (r)))
- raise = gh_scm2double (ly_cdr (r)) * staff_space;
-
-
- Interval extent;
- bool extent_b = false;
- SCM e = ly_assoc_chain (ly_symbol2scm ("extent"), p);
- if (gh_pair_p (e) && ly_number_pair_p (ly_cdr (e)))
- {
- extent = Interval (gh_scm2double (ly_cadr (e)) * staff_space,
- gh_scm2double (ly_cddr (e)) * staff_space);
- extent_b = true;
- }
-
- Offset o (kern[X_AXIS], raise - kern[Y_AXIS]);
-
- Molecule mol = Lookup::filledbox (Box (Interval (0,0), Interval (0,0)));
-
- SCM cp = ly_deep_copy (p);
- if (raise)
- {
- SCM cr = ly_assoc_chain (ly_symbol2scm ("raise"), cp);
- scm_set_cdr_x (cr, gh_int2scm (0));
- }
-
- while (gh_pair_p (text))
- {
- Molecule m = text2molecule (me, ly_car (text), cp);
-
- if (!m.empty_b ())
- {
- m.translate_axis (mol.extent (axis)[axis == X_AXIS ? RIGHT : DOWN]
- - (axis == Y_AXIS ? baseline_skip : 0),
- axis);
- mol.add_molecule (m);
- }
- text = ly_cdr (text);
- }
-
-
- /* Set extend to markup evented value. */
- if (extent_b)
- {
- Box b = mol.extent_box ();
- SCM expr = mol.get_expr ();
-
- b[axis] = extent;
- mol = Molecule (b, expr);
- }
-
- mol.translate (o);
-
- return mol;