X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Ftext-interface.cc;h=c51e925b9d9690cb51c03e0a47b5e46215e279c9;hb=11cf086eaba246f043d553a8bafcdbf1b47b9117;hp=47171b0949c2fbc5ccd9ac35f92c426edb8e6af0;hpb=688f5f1711d8ca07338385a2ae0191b1a8aae315;p=lilypond.git diff --git a/lily/text-interface.cc b/lily/text-interface.cc index 47171b0949..c51e925b9d 100644 --- a/lily/text-interface.cc +++ b/lily/text-interface.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2011 Han-Wen Nienhuys + Copyright (C) 1998--2012 Han-Wen Nienhuys Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify @@ -33,9 +33,8 @@ #include "warn.hh" static void -replace_special_characters (string *str, SCM props) +replace_special_characters (string &str, SCM props) { - vsize i = 0; SCM replacement_alist = ly_chain_assoc_get (ly_symbol2scm ("replacement-alist"), props, SCM_EOL); @@ -47,18 +46,21 @@ replace_special_characters (string *str, SCM props) (scm_string_length (scm_caar (s)))); } - while (i <= str->size ()) + for (vsize i = 0; i < str.size (); i++) { + /* Don't match in mid-UTF-8 */ + if ((str[i] & 0xc0) == 0x80) + continue; for (vsize j = max_length + 1; j--;) { - string dummy = str->substr (i, j); - string ligature = robust_scm2string - (ly_assoc_get (ly_string2scm (dummy), - replacement_alist, SCM_BOOL_F), ""); - if (ligature != "") - str->replace (i, j, ligature); + if (j > str.size () - i) + continue; + string dummy = str.substr (i, j); + SCM ligature = ly_assoc_get (ly_string2scm (dummy), + replacement_alist, SCM_BOOL_F); + if (scm_is_true (ligature)) + str.replace (i, j, robust_scm2string (ligature, "")); } - i += utf8_char_len ((*str)[i]); } } @@ -75,7 +77,7 @@ Text_interface::interpret_string (SCM layout_smob, Output_def *layout = unsmob_output_def (layout_smob); Font_metric *fm = select_encoded_font (layout, props); - replace_special_characters (&str, props); + replace_special_characters (str, props); /* We want to filter strings with a music font that pass through