-/*
- TODO: THIS IS UGLY.
- Since the user has direct access to TeX marcos,
- that currently provide the only way to do
- font selection, accents etc,
- we try some halfbaked attempt to detect this TeX trickery.
- */
-String
-sanitise_TeX_string (String text)
-{
- int brace_count =0;
- for (int i= 0; i < text.length_i (); i++)
- {
- if (text[i] == '\\')
- continue;
-
- if (text[i] == '{')
- brace_count ++;
- else if (text[i] == '}')
- brace_count --;
- }
-
- if(brace_count)
- {
- warning (_f ("Non-matching braces in text `%s', adding braces", text.ch_C()));
-
- if (brace_count < 0)
- {
- text = to_str ('{', -brace_count) + text;
- }
- else
- {
- text = text + to_str ('}', brace_count);
- }
- }
-
- return text;
-}
-
-/**
- TODO!
- */
-String
-sanitise_PS_string (String t)
-{
- return t;
-}
-
-/**
-TODO: move into Text_item
-*/
-Molecule
-Lookup::text (String style, String text, Paper_def *paper_l)
-{
- if (style.empty_b ())
- style = "roman";
-
- int font_mag = 0;
- Real font_h = paper_l->get_var ("font_normal");
- if (paper_l->scope_p_->elem_b ("font_" + style))
- {
- font_h = paper_l->get_var ("font_" + style);
- }
-
-
- if (paper_l->scope_p_->elem_b ("magnification_" + style))
- {
- font_mag = (int)paper_l->get_var ("magnification_" + style);
- }
-
- SCM l = scm_assoc (ly_str02scm (style.ch_C()),
- scm_eval (ly_symbol2scm ("cmr-alist")));
-
- if (l != SCM_BOOL_F)
- {
- style = ly_scm2string (gh_cdr(l)) +to_str ((int)font_h);
- }
-
- Font_metric* metric_l = 0;
-
- if (font_mag)
- metric_l = all_fonts_global_p->find_scaled (style, font_mag);
- else
- metric_l = all_fonts_global_p->find_font (style);
-
-
-
-
- int i = text.index_i ("\\n");
- while (i >=0 )
- {
- text = text.left_str (i) + "\n" + text.right_str (text.length_i () - i - 2);
- i = text.index_i ("\\n");
- }
-
- Array<String> lines = String_convert::split_arr (text, '\n');
-
- Real kern = paper_l->get_var ("line_kern");
-
- for (int i=0; i < lines.size (); i++)
- {
- String str (lines[i]);
- if (output_global_ch == "tex")
- str = sanitise_TeX_string (str);
- else if (output_global_ch == "ps")
- str = sanitise_PS_string (str);
- lines[i] = str;
- }
-
- if (!lines.size())
- return Molecule();
-
- SCM first = gh_list (ly_symbol2scm ("text"),
- ly_str02scm (lines[0].ch_C()),
- SCM_UNDEFINED);
- first = fontify_atom (metric_l, first);
-
-
-
- Molecule mol (metric_l->text_dimension (lines[0]), first);
-
- for (i = 1; i < lines.size (); i++)
- {
- SCM line = (gh_list (ly_symbol2scm ("text"),
- ly_str02scm (lines[i].ch_C ()),
- SCM_UNDEFINED));
- line = fontify_atom (metric_l, line);
- mol.add_at_edge (Y_AXIS, DOWN,
- Molecule (metric_l->text_dimension (lines[i]), line),
- kern);
- }
-
- return mol;
-}
-
-
-