fix #285434 : Certain 2.x frame texts imported with no style

This commit is contained in:
AntonioBL 2020-02-27 22:47:32 +01:00
parent a36499a65d
commit 78d9a2978c
7 changed files with 839 additions and 78 deletions

View file

@ -1523,40 +1523,63 @@ bool readNoteProperties206(Note* note, XmlReader& e)
return true;
}
//---------------------------------------------------------
// ReadStyleName206
// For 2.x files, the style tag could be in a different
// position with respect to 3.x files. Since seek
// position is not reliable for readline in QIODevices (for
// example because of non-single-byte characters in at least
// one of the fields; some two-byte characters are counted as
// two single-byte characters and thus the reading could
// start at the wrong position)
//---------------------------------------------------------
static QString ReadStyleName206(XmlReader& e)
{
QString s;
QIODevice* device = e.getDevice();
if (!device || device->isSequential())
return s;
if (!device->isOpen())
device->open(QIODevice::ReadOnly);
const auto pos = device->pos();
const auto pos1 = e.characterOffset();
const QString tagName = e.name().toString();
device->seek(0);
XmlReader streamReader(device);
QString xmltag;
QString name;
for (;;) {
streamReader.readNextStartElement();
name = streamReader.name().toString();
if ((name == tagName) && (streamReader.characterOffset() == pos1)) {
xmltag = streamReader.readXml();
if (xmltag.contains("<style>")) {
QRegExp re("<style>([^<]+)</style>");
if (re.indexIn(xmltag) > -1)
s = re.cap(1);
}
break;
}
if (streamReader.atEnd())
break;
}
device->seek(pos);
return s;
}
//---------------------------------------------------------
// readTextPropertyStyle206
// This reads only the 'style' tag, so that it can be read
// before setting anything else.
//---------------------------------------------------------
static bool readTextPropertyStyle206(XmlReader& e, TextBase* t, Element* be, QStringRef elementName)
static bool readTextPropertyStyle206(XmlReader& e, TextBase* t, Element* be)
{
QString s;
if (e.readAheadAvailable()) {
e.performReadAhead([&s, &elementName](QIODevice& dev) {
const QString closeTag = QString("</").append(elementName.toString()).append(">");
QByteArray arrLine = dev.readLine();
while (!arrLine.isEmpty()) {
QString line(arrLine);
if (line.contains("<style>")) {
QRegExp re("<style>([^<]+)</style>");
if (re.indexIn(line) > -1)
s = re.cap(1);
return;
}
else if (line.contains(closeTag)) {
return;
}
arrLine = dev.readLine();
}
});
}
else
return false;
QString s = ReadStyleName206(e);
if (s.isEmpty())
return true;
return false;
if (!be->isTuplet()) { // Hack
if (excessTextStyles206.find(s) != excessTextStyles206.end()) {
@ -1665,7 +1688,7 @@ static bool readTextProperties206(XmlReader& e, TextBase* t)
static void readText206(XmlReader& e, TextBase* t, Element* be)
{
readTextPropertyStyle206(e, t, be, e.name());
readTextPropertyStyle206(e, t, be);
while (e.readNextStartElement()) {
if (!readTextProperties206(e, t))
e.unknown();
@ -1678,7 +1701,7 @@ static void readText206(XmlReader& e, TextBase* t, Element* be)
static void readTempoText(TempoText* t, XmlReader& e)
{
readTextPropertyStyle206(e, t, t, e.name());
readTextPropertyStyle206(e, t, t);
while (e.readNextStartElement()) {
const QStringRef& tag(e.name());
if (tag == "tempo")
@ -1703,7 +1726,7 @@ static void readTempoText(TempoText* t, XmlReader& e)
static void readMarker(Marker* m, XmlReader& e)
{
readTextPropertyStyle206(e, m, m, e.name());
readTextPropertyStyle206(e, m, m);
Marker::Type mt = Marker::Type::SEGNO;
while (e.readNextStartElement()) {
@ -1725,7 +1748,7 @@ static void readMarker(Marker* m, XmlReader& e)
static void readDynamic(Dynamic* d, XmlReader& e)
{
readTextPropertyStyle206(e, d, d, e.name());
readTextPropertyStyle206(e, d, d);
while (e.readNextStartElement()) {
const QStringRef& tag = e.name();
if (tag == "subtype")
@ -3130,25 +3153,7 @@ static void readMeasure(Measure* m, int staffIdx, XmlReader& e)
// MuseScore 3 has different types for system text and
// staff text while MuseScore 2 didn't.
// We need to decide first which one we should create.
QString styleName;
if (e.readAheadAvailable()) {
e.performReadAhead([&styleName, tag](QIODevice& dev) {
const QString closeTag = QString("</").append(tag).append(">");
QByteArray arrLine = dev.readLine();
while (!arrLine.isEmpty()) {
QString line(arrLine);
if (line.contains("<style>")) {
QRegExp re("<style>([A-z0-9]+)</style>");
if (re.indexIn(line) > -1)
styleName = re.cap(1);
return;
}
if (line.contains(closeTag))
return;
arrLine = dev.readLine();
}
});
}
QString styleName = ReadStyleName206(e);
StaffTextBase* t;
if (styleName == "System" || styleName == "Tempo"
|| styleName == "Marker" || styleName == "Jump"

View file

@ -848,8 +848,8 @@ Score::FileError MasterScore::loadCompressedMsc(QIODevice* io, bool ignoreVersio
}
}
XmlReader e(dbuf);
QBuffer readAheadBuf(&dbuf);
e.setReadAheadDevice(&readAheadBuf);
QBuffer readBuf(&dbuf);
e.setDevice(&readBuf);
e.setDocName(masterScore()->fileInfo()->completeBaseName());
FileError retval = read1(e, ignoreVersionError);
@ -907,7 +907,7 @@ Score::FileError MasterScore::loadMsc(QString name, QIODevice* io, bool ignoreVe
return loadCompressedMsc(io, ignoreVersionError);
else {
XmlReader r(io);
r.setReadAheadDevice(io);
r.setDevice(io);
return read1(r, ignoreVersionError);
}
}

View file

@ -70,8 +70,8 @@ class XmlReader : public QXmlStreamReader {
QString docName; // used for error reporting
// For readahead possibility.
// If needed, must be explicitly set by setReadAheadDevice.
QIODevice* _readAheadDevice = nullptr;
// If needed, must be explicitly set by setDevice.
QIODevice* _readDevice = nullptr;
// Score read context (for read optimizations):
Fraction _tick { Fraction(0, 1) };
@ -205,10 +205,9 @@ class XmlReader : public QXmlStreamReader {
Tid addUserTextStyle(const QString& name);
Tid lookupUserTextStyle(const QString& name);
// Ownership on read ahead device is NOT transferred to XmlReader.
void setReadAheadDevice(QIODevice* dev) { if (!dev->isSequential()) _readAheadDevice = dev; }
bool readAheadAvailable() const { return bool(_readAheadDevice); }
void performReadAhead(std::function<void(QIODevice&)> readAheadRoutine);
// Ownership on read device is NOT transferred to XmlReader.
void setDevice(QIODevice* dev) { if (!dev->isSequential()) _readDevice = dev; }
QIODevice* getDevice() { return _readDevice; }
QList<std::pair<Element*, QPointF>>& fixOffsets() { return _fixOffsets; }
};

View file

@ -547,27 +547,6 @@ Tid XmlReader::lookupUserTextStyle(const QString& name)
return Tid::TEXT_STYLES; // not found
}
//---------------------------------------------------------
// performReadAhead
// If f is called, the device will be non-sequential and
// open. Reading position equals to the current value of
// characterOffset(), but it is possible to seek for any
// other position inside f.
//---------------------------------------------------------
void XmlReader::performReadAhead(std::function<void(QIODevice&)> f)
{
if (!_readAheadDevice || _readAheadDevice->isSequential())
return;
if (!_readAheadDevice->isOpen())
_readAheadDevice->open(QIODevice::ReadOnly);
const auto pos = _readAheadDevice->pos();
_readAheadDevice->seek(characterOffset());
f(*_readAheadDevice);
_readAheadDevice->seek(pos);
}
//---------------------------------------------------------
// addConnectorInfo
//---------------------------------------------------------

View file

@ -0,0 +1,241 @@
<?xml version="1.0" encoding="UTF-8"?>
<museScore version="3.01">
<Score>
<LayerTag id="0" tag="default"></LayerTag>
<currentLayer>0</currentLayer>
<Division>480</Division>
<Style>
<pageWidth>8.27007</pageWidth>
<pageHeight>11.6901</pageHeight>
<pagePrintableWidth>7.08897</pagePrintableWidth>
<pageEvenLeftMargin>0.590551</pageEvenLeftMargin>
<pageOddLeftMargin>0.590551</pageOddLeftMargin>
<pageEvenTopMargin>0.393701</pageEvenTopMargin>
<pageEvenBottomMargin>0.590551</pageEvenBottomMargin>
<pageOddTopMargin>0.393701</pageOddTopMargin>
<pageOddBottomMargin>0.590551</pageOddBottomMargin>
<staffUpperBorder>12</staffUpperBorder>
<staffLowerBorder>3</staffLowerBorder>
<akkoladeDistance>8.5</akkoladeDistance>
<minSystemDistance>9</minSystemDistance>
<maxSystemDistance>9</maxSystemDistance>
<lyricsDashForce>0</lyricsDashForce>
<lyricsOddFramePadding>0</lyricsOddFramePadding>
<lyricsOddFrameWidth>0</lyricsOddFrameWidth>
<lyricsEvenFramePadding>0</lyricsEvenFramePadding>
<lyricsEvenFrameWidth>0</lyricsEvenFrameWidth>
<frameSystemDistance>3</frameSystemDistance>
<doubleBarDistance>0.46</doubleBarDistance>
<endBarDistance>0.65</endBarDistance>
<clefLeftMargin>0.64</clefLeftMargin>
<clefKeyRightMargin>1.75</clefKeyRightMargin>
<barNoteDistance>1.2</barNoteDistance>
<hairpinFramePadding>0</hairpinFramePadding>
<hairpinFrameWidth>0</hairpinFrameWidth>
<pedalFramePadding>0</pedalFramePadding>
<pedalFrameWidth>0</pedalFrameWidth>
<harmonyFretDist>0.5</harmonyFretDist>
<chordSymbolAFramePadding>0</chordSymbolAFramePadding>
<chordSymbolAFrameWidth>0</chordSymbolAFrameWidth>
<showHeader>1</showHeader>
<headerFirstPage>1</headerFirstPage>
<evenHeaderL>$p</evenHeaderL>
<oddHeaderR>$p</oddHeaderR>
<footerOddEven>0</footerOddEven>
<evenFooterL></evenFooterL>
<evenFooterC>$C</evenFooterC>
<oddFooterC>$C</oddFooterC>
<oddFooterR></oddFooterR>
<voltaFontSize>10</voltaFontSize>
<voltaFramePadding>0</voltaFramePadding>
<voltaFrameWidth>0</voltaFrameWidth>
<ottavaHookAbove>0.5</ottavaHookAbove>
<ottavaHookBelow>-0.5</ottavaHookBelow>
<ottavaFontSize>10</ottavaFontSize>
<ottavaFontStyle>2</ottavaFontStyle>
<ottavaFramePadding>0</ottavaFramePadding>
<ottavaFrameWidth>0</ottavaFrameWidth>
<keySigNaturals>1</keySigNaturals>
<tupletVHeadDistance>0</tupletVHeadDistance>
<tupletVStemDistance>0</tupletVStemDistance>
<tupletFontSize>9</tupletFontSize>
<tupletFramePadding>0</tupletFramePadding>
<tupletFrameWidth>0</tupletFrameWidth>
<textLineFramePadding>0</textLineFramePadding>
<textLineFrameWidth>0</textLineFrameWidth>
<defaultFontSpatiumDependent>0</defaultFontSpatiumDependent>
<defaultAlign>left,baseline</defaultAlign>
<defaultFramePadding>0</defaultFramePadding>
<defaultFrameWidth>0</defaultFrameWidth>
<defaultFrameRound>25</defaultFrameRound>
<titleFontStyle>1</titleFontStyle>
<titleFramePadding>0</titleFramePadding>
<titleFrameWidth>0</titleFrameWidth>
<titleFrameRound>25</titleFrameRound>
<subTitleFontSize>13</subTitleFontSize>
<subTitleFramePadding>0</subTitleFramePadding>
<subTitleFrameWidth>0</subTitleFrameWidth>
<subTitleFrameRound>25</subTitleFrameRound>
<composerFontSize>13</composerFontSize>
<composerFontStyle>1</composerFontStyle>
<composerFramePadding>0</composerFramePadding>
<composerFrameWidth>0</composerFrameWidth>
<composerFrameRound>25</composerFrameRound>
<lyricistFontSize>13</lyricistFontSize>
<lyricistFramePadding>0</lyricistFramePadding>
<lyricistFrameWidth>0</lyricistFrameWidth>
<lyricistFrameRound>25</lyricistFrameRound>
<fingeringFramePadding>0</fingeringFramePadding>
<fingeringFrameWidth>0</fingeringFrameWidth>
<fingeringFrameRound>25</fingeringFrameRound>
<lhGuitarFingeringFramePadding>0</lhGuitarFingeringFramePadding>
<lhGuitarFingeringFrameWidth>0</lhGuitarFingeringFrameWidth>
<lhGuitarFingeringFrameRound>25</lhGuitarFingeringFrameRound>
<rhGuitarFingeringFontSize>10</rhGuitarFingeringFontSize>
<rhGuitarFingeringFontStyle>3</rhGuitarFingeringFontStyle>
<rhGuitarFingeringFramePadding>0</rhGuitarFingeringFramePadding>
<rhGuitarFingeringFrameWidth>0</rhGuitarFingeringFrameWidth>
<rhGuitarFingeringFrameRound>25</rhGuitarFingeringFrameRound>
<longInstrumentFontSize>11</longInstrumentFontSize>
<longInstrumentFramePadding>0</longInstrumentFramePadding>
<longInstrumentFrameWidth>0</longInstrumentFrameWidth>
<shortInstrumentFontSize>11</shortInstrumentFontSize>
<shortInstrumentFramePadding>0</shortInstrumentFramePadding>
<shortInstrumentFrameWidth>0</shortInstrumentFrameWidth>
<partInstrumentFramePadding>0</partInstrumentFramePadding>
<partInstrumentFrameWidth>0</partInstrumentFrameWidth>
<partInstrumentFrameRound>25</partInstrumentFrameRound>
<dynamicsFontStyle>0</dynamicsFontStyle>
<dynamicsFramePadding>0</dynamicsFramePadding>
<dynamicsFrameWidth>0</dynamicsFrameWidth>
<expressionFontSize>12</expressionFontSize>
<expressionFramePadding>0</expressionFramePadding>
<expressionFrameWidth>0</expressionFrameWidth>
<tempoFontSize>10</tempoFontSize>
<tempoFontStyle>0</tempoFontStyle>
<tempoFramePadding>0</tempoFramePadding>
<tempoFrameWidth>0</tempoFrameWidth>
<tempoFrameRound>25</tempoFrameRound>
<metronomeFramePadding>0</metronomeFramePadding>
<metronomeFrameWidth>0</metronomeFrameWidth>
<measureNumberAlign>center,bottom</measureNumberAlign>
<measureNumberFramePadding>0</measureNumberFramePadding>
<measureNumberFrameWidth>0</measureNumberFrameWidth>
<translatorAlign>center,top</translatorAlign>
<translatorFramePadding>0</translatorFramePadding>
<translatorFrameWidth>0</translatorFrameWidth>
<systemAlign>left,top</systemAlign>
<systemFramePadding>0</systemFramePadding>
<systemFrameWidth>0</systemFrameWidth>
<systemFrameRound>25</systemFrameRound>
<staffAlign>left,top</staffAlign>
<staffPosAbove x="0" y="-4"/>
<staffFramePadding>0</staffFramePadding>
<staffFrameWidth>0</staffFrameWidth>
<staffFrameRound>25</staffFrameRound>
<rehearsalMarkFontSize>10</rehearsalMarkFontSize>
<rehearsalMarkFramePadding>0.1</rehearsalMarkFramePadding>
<repeatLeftFramePadding>0</repeatLeftFramePadding>
<repeatLeftFrameWidth>0</repeatLeftFrameWidth>
<repeatLeftFrameRound>25</repeatLeftFrameRound>
<repeatRightFontSize>10</repeatRightFontSize>
<repeatRightFramePadding>0</repeatRightFramePadding>
<repeatRightFrameWidth>0</repeatRightFrameWidth>
<repeatRightFrameRound>25</repeatRightFrameRound>
<frameFontSize>11</frameFontSize>
<frameFontSpatiumDependent>1</frameFontSpatiumDependent>
<frameFramePadding>0</frameFramePadding>
<frameFrameWidth>0</frameFrameWidth>
<textLineFontSize>9</textLineFontSize>
<textLineTextAlign>right,center</textLineTextAlign>
<glissandoAlign>center,baseline</glissandoAlign>
<glissandoFramePadding>0</glissandoFramePadding>
<glissandoFrameWidth>0</glissandoFrameWidth>
<bendAlign>center,center</bendAlign>
<bendFramePadding>0</bendFramePadding>
<bendFrameWidth>0</bendFrameWidth>
<headerFontSize>11</headerFontSize>
<headerAlign>center,top</headerAlign>
<headerFramePadding>0</headerFramePadding>
<headerFrameWidth>0</headerFrameWidth>
<footerFontSize>11</footerFontSize>
<footerAlign>center,bottom</footerAlign>
<footerFramePadding>0</footerFramePadding>
<footerFrameWidth>0</footerFrameWidth>
<instrumentChangeAlign>left,bottom</instrumentChangeAlign>
<instrumentChangeFramePadding>0</instrumentChangeFramePadding>
<instrumentChangeFrameWidth>0</instrumentChangeFrameWidth>
<user1Name>Position text</user1Name>
<user1FontSize>9</user1FontSize>
<user1FramePadding>0</user1FramePadding>
<user1FrameWidth>0</user1FrameWidth>
<user2Name>Expression</user2Name>
<user2FontStyle>2</user2FontStyle>
<user2FramePadding>0</user2FramePadding>
<user2FrameWidth>0</user2FrameWidth>
<Spatium>1.94</Spatium>
</Style>
<showInvisible>1</showInvisible>
<showUnprintable>1</showUnprintable>
<showFrames>0</showFrames>
<showMargins>0</showMargins>
<metaTag name="arranger"></metaTag>
<metaTag name="composer">Trad air: Tout le long de la rivière</metaTag>
<metaTag name="copyright"></metaTag>
<metaTag name="lyricist"> P. J. de Béranger</metaTag>
<metaTag name="movementNumber"></metaTag>
<metaTag name="movementTitle">L'Académie et le Caveau</metaTag>
<metaTag name="originalFormat">xml</metaTag>
<metaTag name="poet"></metaTag>
<metaTag name="source"></metaTag>
<metaTag name="translator"></metaTag>
<metaTag name="workNumber"></metaTag>
<metaTag name="workTitle"></metaTag>
<Part>
<Staff id="1">
<StaffType group="pitched">
</StaffType>
</Staff>
<trackName>Tenor</trackName>
<Instrument>
<longName>Tenor</longName>
<trackName>Choir Aahs</trackName>
<Channel>
<program value="0"/>
<controller ctrl="7" value="101"/>
<controller ctrl="10" value="63"/>
</Channel>
</Instrument>
</Part>
<Staff id="1">
<VBox>
<height>25.5926</height>
<bottomGap>0</bottomGap>
<topMargin>3</topMargin>
<Text>
<style>Frame</style>
<text>îèéààéà</text>
</Text>
<Text>
<style>Frame</style>
<offset x="55" y="0.5"/>
<text>éééàè</text>
</Text>
</VBox>
<VBox>
<height>47.762</height>
<topGap>10</topGap>
<bottomGap>0</bottomGap>
<Text>
<style>Frame</style>
<text>êêàééééç*éô</text>
</Text>
<Text>
<style>Frame</style>
<offset x="55" y="0.5"/>
<text>àéùééé</text>
</Text>
</VBox>
</Staff>
</Score>
</museScore>

View file

@ -0,0 +1,536 @@
<?xml version="1.0" encoding="UTF-8"?>
<museScore version="2.06">
<programVersion>2.3.2</programVersion>
<programRevision>4592407</programRevision>
<Score>
<LayerTag id="0" tag="default"></LayerTag>
<currentLayer>0</currentLayer>
<Synthesizer>
</Synthesizer>
<Division>480</Division>
<Style>
<staffUpperBorder>12</staffUpperBorder>
<staffLowerBorder>3</staffLowerBorder>
<akkoladeDistance>8.5</akkoladeDistance>
<minSystemDistance>9</minSystemDistance>
<maxSystemDistance>9</maxSystemDistance>
<frameSystemDistance>3</frameSystemDistance>
<showHeader>1</showHeader>
<headerFirstPage>1</headerFirstPage>
<evenHeaderL>$p</evenHeaderL>
<oddHeaderR>$p</oddHeaderR>
<footerOddEven>0</footerOddEven>
<evenFooterL></evenFooterL>
<evenFooterC>$C</evenFooterC>
<oddFooterC>$C</oddFooterC>
<oddFooterR></oddFooterR>
<ottavaHook>0.5</ottavaHook>
<keySigNaturals>1</keySigNaturals>
<tupletVHeadDistance>0</tupletVHeadDistance>
<tupletVStemDistance>0</tupletVStemDistance>
<TextStyle>
<halign>left</halign>
<valign>baseline</valign>
<offsetType>spatium</offsetType>
<family>FreeSerif</family>
<size>10</size>
</TextStyle>
<TextStyle>
<halign>center</halign>
<valign>top</valign>
<offsetType>absolute</offsetType>
<name>Title</name>
<family>FreeSerif</family>
<size>24</size>
<bold>1</bold>
</TextStyle>
<TextStyle>
<halign>center</halign>
<valign>top</valign>
<xoffset>0</xoffset>
<yoffset>10</yoffset>
<offsetType>absolute</offsetType>
<name>Subtitle</name>
<family>FreeSerif</family>
<size>13</size>
</TextStyle>
<TextStyle>
<halign>right</halign>
<valign>bottom</valign>
<offsetType>absolute</offsetType>
<name>Composer</name>
<family>FreeSerif</family>
<size>13</size>
<bold>1</bold>
</TextStyle>
<TextStyle>
<halign>left</halign>
<valign>bottom</valign>
<offsetType>absolute</offsetType>
<name>Lyricist</name>
<family>FreeSerif</family>
<size>13</size>
</TextStyle>
<TextStyle>
<halign>center</halign>
<valign>baseline</valign>
<xoffset>0</xoffset>
<yoffset>6</yoffset>
<offsetType>spatium</offsetType>
<name>Lyrics Odd Lines</name>
<family>FreeSerif</family>
<size>11</size>
<sizeIsSpatiumDependent>1</sizeIsSpatiumDependent>
</TextStyle>
<TextStyle>
<halign>center</halign>
<valign>baseline</valign>
<xoffset>0</xoffset>
<yoffset>6</yoffset>
<offsetType>spatium</offsetType>
<name>Lyrics Even Lines</name>
<family>FreeSerif</family>
<size>11</size>
<sizeIsSpatiumDependent>1</sizeIsSpatiumDependent>
</TextStyle>
<TextStyle>
<halign>center</halign>
<valign>center</valign>
<offsetType>spatium</offsetType>
<name>Fingering</name>
<family>FreeSerif</family>
<size>8</size>
<sizeIsSpatiumDependent>1</sizeIsSpatiumDependent>
</TextStyle>
<TextStyle>
<halign>right</halign>
<valign>center</valign>
<xoffset>-0.5</xoffset>
<yoffset>0</yoffset>
<offsetType>spatium</offsetType>
<name>LH Guitar Fingering</name>
<family>FreeSerif</family>
<size>8</size>
<sizeIsSpatiumDependent>1</sizeIsSpatiumDependent>
</TextStyle>
<TextStyle>
<halign>center</halign>
<valign>center</valign>
<offsetType>spatium</offsetType>
<name>RH Guitar Fingering</name>
<family>FreeSerif</family>
<size>10</size>
<bold>1</bold>
<italic>1</italic>
<sizeIsSpatiumDependent>1</sizeIsSpatiumDependent>
</TextStyle>
<TextStyle>
<halign>right</halign>
<valign>center</valign>
<offsetType>absolute</offsetType>
<name>Instrument Name (Long)</name>
<family>FreeSerif</family>
<size>11</size>
<sizeIsSpatiumDependent>1</sizeIsSpatiumDependent>
</TextStyle>
<TextStyle>
<halign>right</halign>
<valign>center</valign>
<offsetType>absolute</offsetType>
<name>Instrument Name (Short)</name>
<family>FreeSerif</family>
<size>11</size>
<sizeIsSpatiumDependent>1</sizeIsSpatiumDependent>
</TextStyle>
<TextStyle>
<halign>left</halign>
<valign>top</valign>
<offsetType>absolute</offsetType>
<name>Instrument Name (Part)</name>
<family>FreeSerif</family>
<size>18</size>
</TextStyle>
<TextStyle>
<halign>center</halign>
<valign>baseline</valign>
<xoffset>0</xoffset>
<yoffset>8</yoffset>
<offsetType>spatium</offsetType>
<name>Dynamics</name>
<family>FreeSerif</family>
<size>12</size>
<sizeIsSpatiumDependent>1</sizeIsSpatiumDependent>
</TextStyle>
<TextStyle>
<halign>left</halign>
<valign>baseline</valign>
<xoffset>0</xoffset>
<yoffset>-2</yoffset>
<offsetType>spatium</offsetType>
<name>Technique</name>
<family>FreeSerif</family>
<size>12</size>
<italic>1</italic>
<sizeIsSpatiumDependent>1</sizeIsSpatiumDependent>
</TextStyle>
<TextStyle>
<halign>left</halign>
<valign>baseline</valign>
<xoffset>0</xoffset>
<yoffset>-4</yoffset>
<offsetType>spatium</offsetType>
<name>Tempo</name>
<family>FreeSerif</family>
<size>10</size>
<sizeIsSpatiumDependent>1</sizeIsSpatiumDependent>
<systemFlag>1</systemFlag>
</TextStyle>
<TextStyle>
<halign>left</halign>
<valign>top</valign>
<offsetType>spatium</offsetType>
<name>Metronome</name>
<family>FreeSerif</family>
<size>12</size>
<bold>1</bold>
</TextStyle>
<TextStyle>
<halign>center</halign>
<valign>bottom</valign>
<xoffset>0</xoffset>
<yoffset>-2</yoffset>
<offsetType>spatium</offsetType>
<name>Measure Number</name>
<family>FreeSerif</family>
<size>8</size>
<sizeIsSpatiumDependent>1</sizeIsSpatiumDependent>
</TextStyle>
<TextStyle>
<halign>center</halign>
<valign>top</valign>
<xoffset>0</xoffset>
<yoffset>6</yoffset>
<offsetType>spatium</offsetType>
<name>Translator</name>
<family>FreeSerif</family>
<size>11</size>
</TextStyle>
<TextStyle>
<halign>center</halign>
<valign>center</valign>
<offsetType>absolute</offsetType>
<name>Tuplet</name>
<family>FreeSerif</family>
<size>9</size>
<italic>1</italic>
<sizeIsSpatiumDependent>1</sizeIsSpatiumDependent>
</TextStyle>
<TextStyle>
<halign>left</halign>
<valign>top</valign>
<xoffset>0</xoffset>
<yoffset>-4</yoffset>
<offsetType>spatium</offsetType>
<name>System</name>
<family>FreeSerif</family>
<size>10</size>
<sizeIsSpatiumDependent>1</sizeIsSpatiumDependent>
<systemFlag>1</systemFlag>
</TextStyle>
<TextStyle>
<halign>left</halign>
<valign>top</valign>
<xoffset>0</xoffset>
<yoffset>-4</yoffset>
<offsetType>spatium</offsetType>
<name>Staff</name>
<family>FreeSerif</family>
<size>10</size>
<sizeIsSpatiumDependent>1</sizeIsSpatiumDependent>
</TextStyle>
<TextStyle>
<halign>left</halign>
<valign>baseline</valign>
<offsetType>spatium</offsetType>
<name>Chord Symbol</name>
<family>FreeSerif</family>
<size>12</size>
<sizeIsSpatiumDependent>1</sizeIsSpatiumDependent>
</TextStyle>
<TextStyle>
<halign>center</halign>
<valign>baseline</valign>
<xoffset>0</xoffset>
<yoffset>-3</yoffset>
<offsetType>spatium</offsetType>
<name>Rehearsal Mark</name>
<family>FreeSerif</family>
<size>10</size>
<bold>1</bold>
<sizeIsSpatiumDependent>1</sizeIsSpatiumDependent>
<frameWidthS>0.2</frameWidthS>
<paddingWidthS>0.1</paddingWidthS>
<frameRound>20</frameRound>
<frameColor r="0" g="0" b="0" a="255"/>
<systemFlag>1</systemFlag>
</TextStyle>
<TextStyle>
<halign>left</halign>
<valign>baseline</valign>
<xoffset>0</xoffset>
<yoffset>-2</yoffset>
<offsetType>spatium</offsetType>
<name>Repeat Text Left</name>
<family>FreeSerif</family>
<size>20</size>
<sizeIsSpatiumDependent>1</sizeIsSpatiumDependent>
<systemFlag>1</systemFlag>
</TextStyle>
<TextStyle>
<halign>right</halign>
<valign>baseline</valign>
<xoffset>0</xoffset>
<yoffset>-2</yoffset>
<offsetType>spatium</offsetType>
<name>Repeat Text Right</name>
<family>FreeSerif</family>
<size>10</size>
<sizeIsSpatiumDependent>1</sizeIsSpatiumDependent>
<systemFlag>1</systemFlag>
</TextStyle>
<TextStyle>
<halign>right</halign>
<valign>baseline</valign>
<xoffset>0</xoffset>
<yoffset>-2</yoffset>
<offsetType>spatium</offsetType>
<name>Repeat Text</name>
<family>FreeSerif</family>
<size>12</size>
<sizeIsSpatiumDependent>1</sizeIsSpatiumDependent>
<systemFlag>1</systemFlag>
</TextStyle>
<TextStyle>
<halign>left</halign>
<valign>baseline</valign>
<xoffset>0.5</xoffset>
<yoffset>1.9</yoffset>
<offsetType>spatium</offsetType>
<name>Volta</name>
<family>FreeSerif</family>
<size>10</size>
<bold>1</bold>
<sizeIsSpatiumDependent>1</sizeIsSpatiumDependent>
</TextStyle>
<TextStyle>
<halign>left</halign>
<valign>top</valign>
<offsetType>spatium</offsetType>
<name>Frame</name>
<family>FreeSerif</family>
<size>11</size>
<sizeIsSpatiumDependent>1</sizeIsSpatiumDependent>
</TextStyle>
<TextStyle>
<halign>right</halign>
<valign>center</valign>
<offsetType>spatium</offsetType>
<name>Text Line</name>
<family>FreeSerif</family>
<size>9</size>
<sizeIsSpatiumDependent>1</sizeIsSpatiumDependent>
</TextStyle>
<TextStyle>
<halign>center</halign>
<valign>baseline</valign>
<offsetType>spatium</offsetType>
<name>Glissando</name>
<family>FreeSerif</family>
<size>8</size>
<italic>1</italic>
<sizeIsSpatiumDependent>1</sizeIsSpatiumDependent>
</TextStyle>
<TextStyle>
<halign>left</halign>
<valign>center</valign>
<offsetType>spatium</offsetType>
<name>Ottava</name>
<family>FreeSerif</family>
<size>10</size>
<italic>1</italic>
<sizeIsSpatiumDependent>1</sizeIsSpatiumDependent>
</TextStyle>
<TextStyle>
<halign>left</halign>
<valign>baseline</valign>
<xoffset>0</xoffset>
<yoffset>0.15</yoffset>
<offsetType>spatium</offsetType>
<name>Pedal</name>
<family>FreeSerif</family>
<size>12</size>
<sizeIsSpatiumDependent>1</sizeIsSpatiumDependent>
</TextStyle>
<TextStyle>
<halign>left</halign>
<valign>baseline</valign>
<offsetType>spatium</offsetType>
<name>Hairpin</name>
<family>FreeSerif</family>
<size>12</size>
<italic>1</italic>
<sizeIsSpatiumDependent>1</sizeIsSpatiumDependent>
</TextStyle>
<TextStyle>
<halign>center</halign>
<valign>center</valign>
<offsetType>spatium</offsetType>
<name>Bend</name>
<family>FreeSerif</family>
<size>8</size>
<sizeIsSpatiumDependent>1</sizeIsSpatiumDependent>
</TextStyle>
<TextStyle>
<halign>center</halign>
<valign>top</valign>
<offsetType>spatium</offsetType>
<name>Header</name>
<family>FreeSerif</family>
<size>11</size>
</TextStyle>
<TextStyle>
<halign>center</halign>
<valign>bottom</valign>
<xoffset>0</xoffset>
<yoffset>5</yoffset>
<offsetType>absolute</offsetType>
<name>Footer</name>
<family>FreeSerif</family>
<size>11</size>
</TextStyle>
<TextStyle>
<halign>left</halign>
<valign>bottom</valign>
<xoffset>0</xoffset>
<yoffset>-3</yoffset>
<offsetType>spatium</offsetType>
<name>Instrument Change</name>
<family>FreeSerif</family>
<size>12</size>
<bold>1</bold>
<sizeIsSpatiumDependent>1</sizeIsSpatiumDependent>
</TextStyle>
<TextStyle>
<halign>left</halign>
<valign>top</valign>
<xoffset>0</xoffset>
<yoffset>-4</yoffset>
<offsetType>spatium</offsetType>
<name>Position text</name>
<family>FreeSerif</family>
<size>9</size>
<sizeIsSpatiumDependent>1</sizeIsSpatiumDependent>
</TextStyle>
<TextStyle>
<halign>left</halign>
<valign>top</valign>
<xoffset>0</xoffset>
<yoffset>-4</yoffset>
<offsetType>spatium</offsetType>
<name>Expression</name>
<family>FreeSerif</family>
<size>10</size>
<italic>1</italic>
<sizeIsSpatiumDependent>1</sizeIsSpatiumDependent>
</TextStyle>
<page-layout>
<page-height>1683.38</page-height>
<page-width>1190.89</page-width>
<page-margins type="even">
<left-margin>85.0394</left-margin>
<right-margin>85.0394</right-margin>
<top-margin>56.6929</top-margin>
<bottom-margin>85.0394</bottom-margin>
</page-margins>
<page-margins type="odd">
<left-margin>85.0394</left-margin>
<right-margin>85.0394</right-margin>
<top-margin>56.6929</top-margin>
<bottom-margin>85.0394</bottom-margin>
</page-margins>
</page-layout>
<Spatium>1.94</Spatium>
</Style>
<showInvisible>1</showInvisible>
<showUnprintable>1</showUnprintable>
<showFrames>0</showFrames>
<showMargins>0</showMargins>
<metaTag name="arranger"></metaTag>
<metaTag name="composer">Trad air: Tout le long de la rivière</metaTag>
<metaTag name="copyright"></metaTag>
<metaTag name="creationDate">2016-04-04</metaTag>
<metaTag name="lyricist"> P. J. de Béranger</metaTag>
<metaTag name="movementNumber"></metaTag>
<metaTag name="movementTitle">L'Académie et le Caveau</metaTag>
<metaTag name="originalFormat">xml</metaTag>
<metaTag name="platform">Microsoft Windows</metaTag>
<metaTag name="poet"></metaTag>
<metaTag name="source"></metaTag>
<metaTag name="translator"></metaTag>
<metaTag name="workNumber"></metaTag>
<metaTag name="workTitle"></metaTag>
<PageList>
<Page>
<System>
</System>
<System>
</System>
</Page>
</PageList>
<Part>
<Staff id="1">
<StaffType group="pitched">
</StaffType>
</Staff>
<trackName>Tenor</trackName>
<Instrument>
<longName>Tenor</longName>
<trackName>Choir Aahs</trackName>
<Channel>
<program value="0"/>
<controller ctrl="7" value="101"/>
<controller ctrl="10" value="63"/>
<synti>Zerberus</synti>
</Channel>
</Instrument>
</Part>
<Staff id="1">
<VBox>
<height>25.5926</height>
<topMargin>3</topMargin>
<Text>
<style>Frame</style>
<text>îèéààéà</text>
</Text>
<Text>
<pos x="55" y="0"/>
<style>Frame</style>
<text>éééàè</text>
</Text>
</VBox>
<VBox>
<height>47.762</height>
<topGap>10</topGap>
<Text>
<style>Frame</style>
<text>êêàééééç*éô</text>
</Text>
<Text>
<pos x="55" y="0"/>
<style>Frame</style>
<text>àéùééé</text>
</Text>
</VBox>
</Staff>
</Score>
</museScore>

View file

@ -45,6 +45,7 @@ class TestCompat206 : public QObject, public MTest
void lidEmptyText() { compat("lidemptytext"); }
void intrumentNameAlign() {compat("intrumentNameAlign"); }
void fermata() { compat("fermata"); }
void frame_utf8() { compat("frame_text2"); }
};
//---------------------------------------------------------