From bdac16a4154f502c77fb58eb399d72f86f80a5be Mon Sep 17 00:00:00 2001 From: Igor Korsukov Date: Thu, 9 Jun 2022 13:23:24 +0300 Subject: [PATCH] replased QString to String --- src/engraving/libmscore/articulation.cpp | 2 +- src/engraving/libmscore/articulation.h | 2 +- src/engraving/libmscore/engravingobject.cpp | 2 +- src/engraving/libmscore/engravingobject.h | 2 +- src/engraving/libmscore/fermata.cpp | 2 +- src/engraving/libmscore/fermata.h | 2 +- src/engraving/libmscore/fret.h | 2 +- src/engraving/libmscore/harmony.cpp | 7 +++--- src/engraving/libmscore/harmony.h | 2 +- src/engraving/libmscore/textbase.cpp | 2 +- src/engraving/libmscore/textbase.h | 2 +- src/engraving/rw/compat/read206.cpp | 4 ++-- src/engraving/rw/compat/read302.cpp | 2 +- src/engraving/rw/read400.cpp | 6 +++--- src/engraving/rw/xmlreader.cpp | 24 ++++++++++----------- src/engraving/rw/xmlreader.h | 20 ++++++++--------- src/engraving/rw/xmlwriter.cpp | 7 +++--- src/engraving/rw/xmlwriter.h | 10 +++------ src/engraving/types/symnames.cpp | 2 +- src/engraving/types/symnames.h | 2 +- src/framework/global/tests/string_tests.cpp | 9 ++++++++ src/framework/global/types/string.cpp | 21 ++++++++++++++---- src/framework/global/types/string.h | 21 +++++++++++------- src/notation/view/widgets/selectdialog.cpp | 2 +- src/palette/internal/palettecell.cpp | 2 +- 25 files changed, 91 insertions(+), 68 deletions(-) diff --git a/src/engraving/libmscore/articulation.cpp b/src/engraving/libmscore/articulation.cpp index bf877447fd..c3a64f2d86 100644 --- a/src/engraving/libmscore/articulation.cpp +++ b/src/engraving/libmscore/articulation.cpp @@ -206,7 +206,7 @@ void Articulation::write(XmlWriter& xml) const // typeUserName //--------------------------------------------------------- -QString Articulation::typeUserName() const +String Articulation::typeUserName() const { return SymNames::translatedUserNameForSymId(symId()); } diff --git a/src/engraving/libmscore/articulation.h b/src/engraving/libmscore/articulation.h index 847bdf492e..57b407d90c 100644 --- a/src/engraving/libmscore/articulation.h +++ b/src/engraving/libmscore/articulation.h @@ -117,7 +117,7 @@ public: SymId symId() const { return _symId; } void setSymId(SymId id); int subtype() const override; - QString typeUserName() const override; + String typeUserName() const override; String articulationName() const; // type-name of articulation; used for midi rendering static String symId2ArticulationName(SymId symId); diff --git a/src/engraving/libmscore/engravingobject.cpp b/src/engraving/libmscore/engravingobject.cpp index f178da6176..e4399d2dd0 100644 --- a/src/engraving/libmscore/engravingobject.cpp +++ b/src/engraving/libmscore/engravingobject.cpp @@ -778,7 +778,7 @@ const char* EngravingObject::typeName() const return Factory::name(type()); } -QString EngravingObject::typeUserName() const +String EngravingObject::typeUserName() const { return qtrc("elementName", Factory::userName(type())); } diff --git a/src/engraving/libmscore/engravingobject.h b/src/engraving/libmscore/engravingobject.h index f80b6961af..d6c3e4258b 100644 --- a/src/engraving/libmscore/engravingobject.h +++ b/src/engraving/libmscore/engravingobject.h @@ -221,7 +221,7 @@ public: inline ElementType type() const { return m_type; } inline bool isType(ElementType t) const { return t == m_type; } const char* typeName() const; - virtual QString typeUserName() const; + virtual String typeUserName() const; EngravingObject* parent() const; void setParent(EngravingObject* p); diff --git a/src/engraving/libmscore/fermata.cpp b/src/engraving/libmscore/fermata.cpp index dd6d21a6a9..c7e3cabb6e 100644 --- a/src/engraving/libmscore/fermata.cpp +++ b/src/engraving/libmscore/fermata.cpp @@ -145,7 +145,7 @@ int Fermata::subtype() const // typeUserName //--------------------------------------------------------- -QString Fermata::typeUserName() const +String Fermata::typeUserName() const { return SymNames::translatedUserNameForSymId(symId()); } diff --git a/src/engraving/libmscore/fermata.h b/src/engraving/libmscore/fermata.h index 0fab7f6a03..1c8964b6e4 100644 --- a/src/engraving/libmscore/fermata.h +++ b/src/engraving/libmscore/fermata.h @@ -68,7 +68,7 @@ public: void setSymId(SymId id) { _symId = id; } FermataType fermataType() const; int subtype() const override; - QString typeUserName() const override; + String typeUserName() const override; void layout() override; diff --git a/src/engraving/libmscore/fret.h b/src/engraving/libmscore/fret.h index a56b6b7261..49e535f239 100644 --- a/src/engraving/libmscore/fret.h +++ b/src/engraving/libmscore/fret.h @@ -222,7 +222,7 @@ public: bool showNut() const { return _showNut; } void setShowNut(bool val) { _showNut = val; } - QString harmonyText() const { return _harmony ? _harmony->plainText() : QString(); } + String harmonyText() const { return _harmony ? _harmony->plainText() : String(); } qreal centerX() const; void setHarmony(QString harmonyText); diff --git a/src/engraving/libmscore/harmony.cpp b/src/engraving/libmscore/harmony.cpp index 7736a93bb0..be9c12cc30 100644 --- a/src/engraving/libmscore/harmony.cpp +++ b/src/engraving/libmscore/harmony.cpp @@ -26,6 +26,7 @@ #include #include "containers.h" +#include "translation.h" #include "draw/fontmetrics.h" #include "draw/brush.h" #include "draw/pen.h" @@ -2074,13 +2075,13 @@ void Harmony::setHarmonyType(HarmonyType val) // typeUserName //--------------------------------------------------------- -QString Harmony::typeUserName() const +String Harmony::typeUserName() const { switch (_harmonyType) { case HarmonyType::ROMAN: - return QObject::tr("Roman numeral"); + return qtrc("engraving", "Roman numeral"); case HarmonyType::NASHVILLE: - return QObject::tr("Nashville number"); + return qtrc("engraving", "Nashville number"); case HarmonyType::STANDARD: break; } diff --git a/src/engraving/libmscore/harmony.h b/src/engraving/libmscore/harmony.h index d88ff532cd..9d222991b0 100644 --- a/src/engraving/libmscore/harmony.h +++ b/src/engraving/libmscore/harmony.h @@ -223,7 +223,7 @@ public: mu::PointF calculateBoundingRect(); qreal xShapeOffset() const; - QString typeUserName() const override; + String typeUserName() const override; QString accessibleInfo() const override; QString generateScreenReaderInfo() const; QString screenReaderInfo() const override; diff --git a/src/engraving/libmscore/textbase.cpp b/src/engraving/libmscore/textbase.cpp index 189c493cfb..71bd3b976a 100644 --- a/src/engraving/libmscore/textbase.cpp +++ b/src/engraving/libmscore/textbase.cpp @@ -2525,7 +2525,7 @@ void TextBase::resetFormatting() // return plain text with symbols //--------------------------------------------------------- -QString TextBase::plainText() const +String TextBase::plainText() const { QString s; diff --git a/src/engraving/libmscore/textbase.h b/src/engraving/libmscore/textbase.h index c1f01230be..481a51d668 100644 --- a/src/engraving/libmscore/textbase.h +++ b/src/engraving/libmscore/textbase.h @@ -353,7 +353,7 @@ public: void setPlainText(const QString& t) { setXmlText(plainToXmlText(t)); } virtual void setXmlText(const QString&); QString xmlText() const; - QString plainText() const; + String plainText() const; void resetFormatting(); void insertText(EditData&, const QString&); diff --git a/src/engraving/rw/compat/read206.cpp b/src/engraving/rw/compat/read206.cpp index c41c8616c7..7962065b3d 100644 --- a/src/engraving/rw/compat/read206.cpp +++ b/src/engraving/rw/compat/read206.cpp @@ -1319,7 +1319,7 @@ private: void TextReaderContext206::copyProperties(XmlReader& original, XmlReader& derived) { - derived.setDocName(original.getDocName()); + derived.setDocName(original.docName()); derived.setContext(original.context()); } @@ -3345,7 +3345,7 @@ bool Read206::readScore206(Score* score, XmlReader& e, ReadContext& ctx) } if (e.error() != XmlStreamReader::NoError) { LOGD("%s: xml read error at line %lld col %lld: %s", - qPrintable(e.getDocName()), e.lineNumber(), e.columnNumber(), e.name().ascii()); + qPrintable(e.docName()), e.lineNumber(), e.columnNumber(), e.name().ascii()); MScore::lastError = QObject::tr("XML read error at line %1, column %2: %3").arg(e.lineNumber()).arg(e.columnNumber()).arg( e.name().ascii()); return false; diff --git a/src/engraving/rw/compat/read302.cpp b/src/engraving/rw/compat/read302.cpp index 179a6fd9c3..5aa90c7006 100644 --- a/src/engraving/rw/compat/read302.cpp +++ b/src/engraving/rw/compat/read302.cpp @@ -226,7 +226,7 @@ bool Read302::readScore302(Score* score, XmlReader& e, ReadContext& ctx) e.context()->reconnectBrokenConnectors(); if (e.error() != XmlStreamReader::NoError) { LOGD("%s: xml read error at line %lld col %lld: %s", - qPrintable(e.getDocName()), e.lineNumber(), e.columnNumber(), e.name().ascii()); + qPrintable(e.docName()), e.lineNumber(), e.columnNumber(), e.name().ascii()); if (e.error() == XmlStreamReader::CustomError) { MScore::lastError = e.errorString(); } else { diff --git a/src/engraving/rw/read400.cpp b/src/engraving/rw/read400.cpp index 666e4f1ad7..1a3748a398 100644 --- a/src/engraving/rw/read400.cpp +++ b/src/engraving/rw/read400.cpp @@ -43,7 +43,7 @@ using namespace mu::engraving::rw; bool Read400::read400(Score* score, XmlReader& e, ReadContext& ctx) { if (!e.readNextStartElement()) { - LOGD("%s: xml file is empty", qPrintable(e.getDocName())); + LOGD("%s: xml file is empty", qPrintable(e.docName())); return false; } @@ -65,7 +65,7 @@ bool Read400::read400(Score* score, XmlReader& e, ReadContext& ctx) } } } else { - LOGD("%s: invalid structure of xml file", qPrintable(e.getDocName())); + LOGD("%s: invalid structure of xml file", qPrintable(e.docName())); return false; } @@ -222,7 +222,7 @@ bool Read400::readScore400(Score* score, XmlReader& e, ReadContext& ctx) ctx.reconnectBrokenConnectors(); if (e.error() != XmlStreamReader::NoError) { LOGD("%s: xml read error at line %lld col %lld: %s", - qPrintable(e.getDocName()), e.lineNumber(), e.columnNumber(), e.name().ascii()); + qPrintable(e.docName()), e.lineNumber(), e.columnNumber(), e.name().ascii()); if (e.error() == XmlStreamReader::CustomError) { MScore::lastError = e.errorString(); } else { diff --git a/src/engraving/rw/xmlreader.cpp b/src/engraving/rw/xmlreader.cpp index 24ff67479c..03a5a63b73 100644 --- a/src/engraving/rw/xmlreader.cpp +++ b/src/engraving/rw/xmlreader.cpp @@ -130,14 +130,15 @@ Fraction XmlReader::readFraction() Q_ASSERT(tokenType() == XmlStreamReader::StartElement); int z = intAttribute("z", 0); int n = intAttribute("n", 1); - const QString& s(readText()); - if (!s.isEmpty()) { - int i = s.indexOf('/'); - if (i == -1) { + AsciiStringView s = readAsciiText(); + if (!s.empty()) { + size_t i = s.indexOf('/'); + if (i == mu::nidx) { return Fraction::fromTicks(s.toInt()); } else { - z = s.leftRef(i).toInt(); - n = s.midRef(i + 1).toInt(); + String str = String::fromAscii(s.ascii()); + z = str.left(i).toInt(); + n = str.mid(i + 1).toInt(); } } return Fraction(z, n); @@ -153,10 +154,11 @@ void XmlReader::unknown() if (XmlStreamReader::error()) { LOGD("%s ", qPrintable(errorString())); } - if (!docName.isEmpty()) { - LOGD("tag in <%s> line %ld col %lld: %s", qPrintable(docName), lineNumber() + _offsetLines, columnNumber(), name().ascii()); + if (!m_docName.isEmpty()) { + LOGD("tag in <%s> line %ld col %lld: %s", qPrintable(m_docName.toUtf8().constChar()), lineNumber() + m_offsetLines, + columnNumber(), name().ascii()); } else { - LOGD("line %lld col %ld: %s", lineNumber() + _offsetLines, columnNumber(), name().ascii()); + LOGD("line %lld col %ld: %s", lineNumber() + m_offsetLines, columnNumber(), name().ascii()); } skipCurrentElement(); } @@ -218,9 +220,6 @@ void XmlReader::htmlToString(int level, String* s) String XmlReader::readXml() { - static int count = 0; - ++count; - String s; int level = 1; for (XmlStreamReader::TokenType t = readNext(); t != XmlStreamReader::EndElement; t = readNext()) { @@ -243,7 +242,6 @@ String XmlReader::readXml() return s; } } - LOGI() << count << "| " << s; return s; } diff --git a/src/engraving/rw/xmlreader.h b/src/engraving/rw/xmlreader.h index dd206595cb..6ec0b95507 100644 --- a/src/engraving/rw/xmlreader.h +++ b/src/engraving/rw/xmlreader.h @@ -58,19 +58,19 @@ public: double readDouble(bool* ok = nullptr) { return XmlStreamReader::readDouble(ok); } double readDouble(double min, double max); - mu::PointF readPoint(); - mu::SizeF readSize(); - mu::ScaleF readScale(); - mu::RectF readRect(); - mu::draw::Color readColor(); + PointF readPoint(); + SizeF readSize(); + ScaleF readScale(); + RectF readRect(); + draw::Color readColor(); Fraction readFraction(); String readXml(); - void setDocName(const QString& s) { docName = s; } - QString getDocName() const { return docName; } + void setDocName(const String& s) { m_docName = s; } + String docName() const { return m_docName; } // for reading old files (< 3.01) - void setOffsetLines(qint64 val) { _offsetLines = val; } + void setOffsetLines(qint64 val) { m_offsetLines = val; } ReadContext* context() const; void setContext(ReadContext* context); @@ -79,8 +79,8 @@ private: void htmlToString(int level, String*); - QString docName; // used for error reporting - qint64 _offsetLines = 0; + String m_docName; // used for error reporting + qint64 m_offsetLines = 0; mutable ReadContext* m_context = nullptr; mutable bool m_selfContext = false; }; diff --git a/src/engraving/rw/xmlwriter.cpp b/src/engraving/rw/xmlwriter.cpp index 6080d37cf6..8c18e8cdfc 100644 --- a/src/engraving/rw/xmlwriter.cpp +++ b/src/engraving/rw/xmlwriter.cpp @@ -20,11 +20,12 @@ * along with this program. If not, see . */ -#include "xml.h" - -#include "libmscore/property.h" +#include "xmlwriter.h" #include "types/typesconv.h" +#include "rw/writecontext.h" +#include "libmscore/engravingitem.h" +#include "libmscore/property.h" #include "log.h" diff --git a/src/engraving/rw/xmlwriter.h b/src/engraving/rw/xmlwriter.h index 0a3e641fd9..d976d4a683 100644 --- a/src/engraving/rw/xmlwriter.h +++ b/src/engraving/rw/xmlwriter.h @@ -27,16 +27,12 @@ #include "containers.h" #include "io/iodevice.h" - -#include "infrastructure/draw/color.h" -#include "libmscore/connector.h" -#include "libmscore/stafftype.h" -#include "libmscore/interval.h" -#include "libmscore/engravingitem.h" - #include "serialization/xmlstreamwriter.h" +#include "libmscore/property.h" + namespace mu::engraving { +class EngravingObject; class WriteContext; class XmlWriter : public XmlStreamWriter { diff --git a/src/engraving/types/symnames.cpp b/src/engraving/types/symnames.cpp index a7bf1deba6..de9637e994 100644 --- a/src/engraving/types/symnames.cpp +++ b/src/engraving/types/symnames.cpp @@ -40,7 +40,7 @@ const char* SymNames::userNameForSymId(SymId id) return s_symUserNames.at(size_t(id)); } -QString SymNames::translatedUserNameForSymId(SymId id) +String SymNames::translatedUserNameForSymId(SymId id) { return mu::qtrc("symUserNames", userNameForSymId(id)); } diff --git a/src/engraving/types/symnames.h b/src/engraving/types/symnames.h index 3d094578c3..b406de43ff 100644 --- a/src/engraving/types/symnames.h +++ b/src/engraving/types/symnames.h @@ -33,7 +33,7 @@ namespace mu::engraving { struct SymNames { static AsciiStringView nameForSymId(SymId id); static const char* userNameForSymId(SymId id); - static QString translatedUserNameForSymId(SymId id); + static String translatedUserNameForSymId(SymId id); static SymId symIdByName(const AsciiStringView& name, SymId def = SymId::noSym); static SymId symIdByName(const QString& name, SymId def = SymId::noSym); diff --git a/src/framework/global/tests/string_tests.cpp b/src/framework/global/tests/string_tests.cpp index 2605de6c20..2da3509102 100644 --- a/src/framework/global/tests/string_tests.cpp +++ b/src/framework/global/tests/string_tests.cpp @@ -248,6 +248,15 @@ TEST_F(Global_Types_StringTests, String_SubStr) //! CHECK EXPECT_EQ(newStr, u"3abc"); } + + { + //! GIVEN Some String + String str = u"123abc"; + //! DO + String newStr = str.left(2); + //! CHECK + EXPECT_EQ(newStr, u"12"); + } } TEST_F(Global_Types_StringTests, String_Trimmed) diff --git a/src/framework/global/types/string.cpp b/src/framework/global/types/string.cpp index 3c6ebec780..4804e3ee62 100644 --- a/src/framework/global/types/string.cpp +++ b/src/framework/global/types/string.cpp @@ -110,8 +110,7 @@ char16_t Char::fromAscii(char c) char Char::toAscii(bool* ok) const { - UNUSED(ok); - return toAscii(m_ch); + return toAscii(m_ch, ok); } // ============================ @@ -413,6 +412,11 @@ String String::mid(size_t pos, size_t count) const return s; } +String String::left(size_t n) const +{ + return mid(0, n); +} + String String::trimmed() const { String s = *this; @@ -420,6 +424,10 @@ String String::trimmed() const return s; } +String String::simplified() const +{ +} + String String::toXmlEscaped(char16_t c) { switch (c) { @@ -509,13 +517,18 @@ AsciiChar AsciiStringView::at(size_t i) const } bool AsciiStringView::contains(char ch) const +{ + return indexOf(ch) != mu::nidx; +} + +size_t AsciiStringView::indexOf(char ch) const { for (size_t i = 0; i < m_size; ++i) { if (m_data[i] == ch) { - return true; + return i; } } - return false; + return mu::nidx; } int AsciiStringView::toInt(bool* ok, int base) const diff --git a/src/framework/global/types/string.h b/src/framework/global/types/string.h index cfdeb30341..a3cb85e81e 100644 --- a/src/framework/global/types/string.h +++ b/src/framework/global/types/string.h @@ -28,6 +28,7 @@ #include #include +#include "containers.h" #include "bytearray.h" #include "global/logstream.h" @@ -108,8 +109,6 @@ class String { public: - static const size_t npos = static_cast(-1); - String(); String(const char16_t* str); String(const Char& ch); @@ -132,9 +131,9 @@ public: String& operator +=(const char16_t* s); inline String& operator +=(char16_t s) { return append(s); } - inline String operator+(const mu::String& s) const { mu::String t(*this); t += s; return t; } - inline String operator+(const char16_t* s) const { mu::String t(*this); t += s; return t; } - inline String operator+(char16_t s) const { mu::String t(*this); t += s; return t; } + inline String operator+(const mu::String& s) const { String t(*this); t += s; return t; } + inline String operator+(const char16_t* s) const { String t(*this); t += s; return t; } + inline String operator+(char16_t s) const { String t(*this); t += s; return t; } String& append(Char ch); String& append(const String& s); @@ -171,8 +170,11 @@ public: StringList split(const Char& ch) const; String& replace(const String& before, const String& after); - String mid(size_t pos, size_t count = npos) const; + String mid(size_t pos, size_t count = mu::nidx) const; + String left(size_t n) const; + String trimmed() const; + String simplified() const; String toXmlEscaped() const; static String toXmlEscaped(const String& str); static String toXmlEscaped(char16_t c); @@ -203,8 +205,6 @@ class AsciiStringView { public: - static const size_t npos = static_cast(-1); - constexpr AsciiStringView() = default; constexpr AsciiStringView(const char* str) : m_size(str ? std::char_traits::length(str) : 0), m_data(str) {} @@ -239,6 +239,7 @@ public: bool empty() const; AsciiChar at(size_t i) const; bool contains(char ch) const; + size_t indexOf(char ch) const; int toInt(bool* ok = nullptr, int base = 10) const; double toDouble(bool* ok = nullptr) const; @@ -276,4 +277,8 @@ inline mu::logger::Stream& operator<<(mu::logger::Stream& s, const mu::AsciiStri return s; } +#ifndef muPrintable +# define muPrintable(string) string.toUtf8().constChar() +#endif + #endif // MU_GLOBAL_STRING_H diff --git a/src/notation/view/widgets/selectdialog.cpp b/src/notation/view/widgets/selectdialog.cpp index f4c13d547e..d638cf875e 100644 --- a/src/notation/view/widgets/selectdialog.cpp +++ b/src/notation/view/widgets/selectdialog.cpp @@ -47,7 +47,7 @@ SelectDialog::SelectDialog(QWidget* parent) setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint); m_element = contextItem(globalContext()->currentNotation()->interaction()); - type->setText(qApp->translate("elementName", m_element->typeUserName().toUtf8())); + type->setText(qtrc("elementName", m_element->typeUserName())); switch (m_element->type()) { case ElementType::ACCIDENTAL: diff --git a/src/palette/internal/palettecell.cpp b/src/palette/internal/palettecell.cpp index 8c0db7d6d1..a61a2893b9 100644 --- a/src/palette/internal/palettecell.cpp +++ b/src/palette/internal/palettecell.cpp @@ -305,7 +305,7 @@ PaletteCellPtr PaletteCell::fromElementMimeData(const QByteArray& data) } } - const QString name = (element->isFretDiagram()) ? toFretDiagram(element.get())->harmonyText() : element->typeUserName(); + const String name = (element->isFretDiagram()) ? toFretDiagram(element.get())->harmonyText() : element->typeUserName(); return std::make_shared(element, name); }