Skip to content

Commit

Permalink
fix #102071: sym not processed in line properties
Browse files Browse the repository at this point in the history
  • Loading branch information
MarcSabatella authored and lasconic committed Mar 21, 2016
1 parent 8814553 commit 9f2b6c3
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 8 deletions.
40 changes: 40 additions & 0 deletions libmscore/text.cpp
Expand Up @@ -2898,6 +2898,46 @@ QString Text::convertToHtml(const QString& s, const TextStyle& st)
return QString("<html><body style=\"font-family:'%1'; font-size:%2pt;\">%3</body></html>").arg(family).arg(size).arg(s);
}

//---------------------------------------------------------
// tagEscape
//---------------------------------------------------------

QString Text::tagEscape(QString s)
{
QStringList tags = { "sym", "b", "i", "u", "sub", "sup" };
for (QString tag : tags) {
QString openTag = "<" + tag + ">";
QString openProxy = "!!" + tag + "!!";
QString closeTag = "</" + tag + ">";
QString closeProxy = "!!/" + tag + "!!";
s.replace(openTag, openProxy);
s.replace(closeTag, closeProxy);
}
s = Xml::xmlString(s);
for (QString tag : tags) {
QString openTag = "<" + tag + ">";
QString openProxy = "!!" + tag + "!!";
QString closeTag = "</" + tag + ">";
QString closeProxy = "!!/" + tag + "!!";
s.replace(openProxy, openTag);
s.replace(closeProxy, closeTag);
}
return s;
}

//---------------------------------------------------------
// unEscape
//---------------------------------------------------------

QString Text::unEscape(QString s)
{
s.replace("&lt;", "<");
s.replace("&gt;", ">");
s.replace("&amp;", "&");
s.replace("&quot;", "\"");
return s;
}

//---------------------------------------------------------
// accessibleInfo
//---------------------------------------------------------
Expand Down
2 changes: 2 additions & 0 deletions libmscore/text.h
Expand Up @@ -322,6 +322,8 @@ class Text : public Element {
virtual void textChanged() {}
QString convertFromHtml(const QString& ss) const;
static QString convertToHtml(const QString&, const TextStyle&);
static QString tagEscape(QString s);
static QString unEscape(QString s);

void undoSetText(const QString& s) { undoChangeProperty(P_ID::TEXT, s); }
virtual QString accessibleInfo() override;
Expand Down
12 changes: 6 additions & 6 deletions mscore/lineproperties.cpp
Expand Up @@ -54,9 +54,9 @@ LineProperties::LineProperties(TextLine* l, QWidget* parent)
otl = l;
tl = l->clone();

beginText->setText(otl->beginText());
continueText->setText(otl->continueText());
endText->setText(otl->endText());
beginText->setText(Text::unEscape(otl->beginText()));
continueText->setText(Text::unEscape(otl->continueText()));
endText->setText(Text::unEscape(otl->endText()));

setTextPlace(otl->beginTextPlace(), beginTextPlace);
setTextPlace(otl->continueTextPlace(), continueTextPlace);
Expand Down Expand Up @@ -138,15 +138,15 @@ void LineProperties::accept()
otl->undoChangeProperty(P_ID::END_TEXT_PLACE, int(pt));

if (beginText->text() != otl->beginText())
otl->undoChangeProperty(P_ID::BEGIN_TEXT, Xml::xmlString(beginText->text()));
otl->undoChangeProperty(P_ID::BEGIN_TEXT, Text::tagEscape(beginText->text()));
else if (otl->beginText().isEmpty())
otl->setBeginText("");
if (continueText->text() != otl->continueText())
otl->undoChangeProperty(P_ID::CONTINUE_TEXT, Xml::xmlString(continueText->text()));
otl->undoChangeProperty(P_ID::CONTINUE_TEXT, Text::tagEscape(continueText->text()));
else if (otl->continueText().isEmpty())
otl->setContinueText("");
if (endText->text() != otl->endText())
otl->undoChangeProperty(P_ID::END_TEXT, Xml::xmlString(endText->text()));
otl->undoChangeProperty(P_ID::END_TEXT, Text::tagEscape(endText->text()));
else if (otl->endText().isEmpty())
otl->setEndText("");

Expand Down
4 changes: 2 additions & 2 deletions mscore/propertymenu.cpp
Expand Up @@ -414,14 +414,14 @@ void ScoreView::elementPropertyAction(const QString& cmd, Element* e)
else if (cmd == "v-props") {
VoltaSegment* vs = static_cast<VoltaSegment*>(e);
VoltaProperties vp;
vp.setText(vs->volta()->text());
vp.setText(Text::unEscape(vs->volta()->text()));
vp.setEndings(vs->volta()->endings());
int rv = vp.exec();
if (rv) {
QString txt = vp.getText();
QList<int> l = vp.getEndings();
if (txt != vs->volta()->text())
vs->volta()->undoChangeProperty(P_ID::BEGIN_TEXT, Xml::xmlString(txt));
vs->volta()->undoChangeProperty(P_ID::BEGIN_TEXT, Text::tagEscape(txt));
if (l != vs->volta()->endings())
vs->volta()->undoChangeProperty(P_ID::VOLTA_ENDING, QVariant::fromValue(l));
}
Expand Down

0 comments on commit 9f2b6c3

Please sign in to comment.