Verovio
Source code documentation
iomei.h
1 // Name: iomei.h
3 // Author: Laurent Pugin
4 // Created: 2011
5 // Copyright (c) Authors and others. All rights reserved.
7 
8 #ifndef __VRV_IOMEI_H__
9 #define __VRV_IOMEI_H__
10 
11 #include <sstream>
12 #include <stack>
13 
14 //----------------------------------------------------------------------------
15 
16 #include "doc.h"
17 #include "iobase.h"
18 
19 //----------------------------------------------------------------------------
20 
21 #include "pugixml.hpp"
22 
23 namespace vrv {
24 
25 class Abbr;
26 class Accid;
27 class Add;
28 class AltSymInterface;
29 class AnchoredText;
30 class Annot;
31 class App;
32 class AreaPosInterface;
33 class Arpeg;
34 class Artic;
35 class BarLine;
36 class Beam;
37 class BeamSpan;
38 class BeatRpt;
39 class BracketSpan;
40 class Breath;
41 class BTrem;
42 class Caesura;
43 class Choice;
44 class Chord;
45 class Clef;
46 class ControlElement;
47 class Corr;
48 class Course;
49 class CpMark;
50 class Custos;
51 class Damage;
52 class Del;
53 class Dot;
54 class Dir;
55 class Div;
56 class DivLine;
57 class DurationInterface;
58 class Dynam;
59 class Ending;
60 class Expan;
61 class Expansion;
62 class F;
63 class Fb;
64 class Fig;
65 class Fing;
66 class Fermata;
67 class FloatingElement;
68 class FTrem;
69 class GenericLayerElement;
70 class Gliss;
71 class GraceGrp;
72 class Graphic;
73 class GrpSym;
74 class Hairpin;
75 class HalfmRpt;
76 class Harm;
77 class KeyAccid;
78 class KeySig;
79 class LinkingInterface;
80 class InstrDef;
81 class Label;
82 class LabelAbbr;
83 class Layer;
84 class LayerDef;
85 class LayerElement;
86 class Lb;
87 class Lem;
88 class Ligature;
89 class Liquescent;
90 class Lv;
91 class Mdiv;
92 class Measure;
93 class Mensur;
94 class MeterSig;
95 class MeterSigGrp;
96 class MNum;
97 class Mordent;
98 class MRest;
99 class MRpt;
100 class MRpt2;
101 class MSpace;
102 class MultiRest;
103 class MultiRpt;
104 class Nc;
105 class Neume;
106 class Note;
107 class Num;
108 class Octave;
109 class Orig;
110 class Oriscus;
111 class Ornam;
112 class Page;
113 class PageElement;
114 class PageMilestoneEnd;
115 class Pages;
116 class Pb;
117 class Pedal;
118 class PgFoot;
119 class PgHead;
120 class Phrase;
121 class PitchInflection;
122 class PitchInterface;
123 class Plica;
124 class PlistInterface;
125 class PositionInterface;
126 class Proport;
127 class Quilisma;
128 class Rdg;
129 class Ref;
130 class Reg;
131 class Reh;
132 class Rend;
133 class RepeatMark;
134 class Rest;
135 class Restore;
136 class RunningElement;
137 class Score;
138 class ScoreDef;
139 class ScoreDefElement;
140 class ScoreDefInterface;
141 class Sb;
142 class Section;
143 class Sic;
144 class Slur;
145 class Space;
146 class Staff;
147 class Stem;
148 class Subst;
149 class Supplied;
150 class Surface;
151 class Svg;
152 class Syl;
153 class Syllable;
154 class Symbol;
155 class SymbolDef;
156 class SymbolTable;
157 class System;
158 class SystemElement;
159 class SystemMilestoneEnd;
160 class TabDurSym;
161 class TabGrp;
162 class Tempo;
163 class Text;
164 class TextDirInterface;
165 class TextElement;
166 class TextLayoutElement;
167 class Tie;
168 class TimePointInterface;
169 class TimeSpanningInterface;
170 class Trill;
171 class Tuning;
172 class Turn;
173 class Tuplet;
174 class Unclear;
175 class Verse;
176 class Zone;
177 
178 // Helper enums
180 enum class MatchLocation { Before, Here, After };
181 enum class RangeMatchLocation { BeforeStart, AtStart, BetweenStartEnd, AtEnd, AfterEnd };
183 
184 //----------------------------------------------------------------------------
185 // MEIOutput
186 //----------------------------------------------------------------------------
187 
193 class MEIOutput : public Output {
194 public:
196  MEIOutput(Doc *doc);
198  virtual ~MEIOutput();
200 
204  bool Export();
205 
209  bool WriteObject(Object *object) override;
211  bool WriteObjectEnd(Object *object) override;
213 
217  std::string GetOutput();
218 
222  void SetScoreBasedMEI(bool scoreBasedMEI) { m_scoreBasedMEI = scoreBasedMEI; }
224  bool GetScoreBasedMEI() const { return m_scoreBasedMEI; }
226 
230  void SetBasic(bool basic) { m_basic = basic; }
232  bool GetBasic() const { return m_basic; }
234 
238  bool HasFilter() const;
240  void SetFirstPage(int page);
241  void SetLastPage(int page);
242  void SetFirstMeasure(const std::string &id);
243  void SetLastMeasure(const std::string &id);
244  void SetMdiv(const std::string &id);
245  void ResetFilter();
247 
251  bool IsScoreBasedMEI() const { return m_scoreBasedMEI; }
253  bool IsPageBasedMEI() const { return !m_scoreBasedMEI; }
255 
259  void SetIndent(int indent) { m_indent = indent; }
260 
264  void SetIgnoreHeader(bool ignoreHeader) { m_ignoreHeader = ignoreHeader; }
265 
269  void SetRemoveIds(bool removeIds) { m_removeIds = removeIds; }
270 
271 private:
275  void Reset();
276 
282  bool IsTreeObject(Object *object) const;
283 
287  bool HasValidFilter() const;
289  bool IsMatchingFilter() const;
290  void UpdateFilter(Object *object);
291  void UpdatePageFilter(Object *object);
292  void UpdateMeasureFilter(Object *object);
293  void UpdateMdivFilter(Object *object);
294  bool ProcessScoreBasedFilter(Object *object);
295  bool ProcessScoreBasedFilterEnd(Object *object);
296  void PruneAttributes(pugi::xml_node node);
298 
302  bool WriteObjectInternal(Object *object, bool useCustomScoreDef);
304  bool WriteObjectInternalEnd(Object *object);
305  void WriteStackedObjects();
306  void WriteStackedObjectsEnd();
308 
312  void WriteCustomScoreDef(ScoreDef *scoreDef);
314  void AdjustStaffDef(StaffDef *staffDef, Measure *measure);
315  bool AdjustLabel(Label *label);
317 
321  bool WriteDoc(Doc *doc);
322 
326  void WriteRevisionDesc(pugi::xml_node meiHead);
327 
331  void WriteXmlId(pugi::xml_node currentNode, Object *object);
332 
336  void WriteMdiv(pugi::xml_node currentNode, Mdiv *mdiv);
338  void WritePages(pugi::xml_node currentNode, Pages *pages);
339  void WriteScore(pugi::xml_node currentNode, Score *score);
341 
345  void WriteSection(pugi::xml_node currentNode, Section *section);
347  void WriteEnding(pugi::xml_node currentNote, Ending *ending);
348  void WriteExpansion(pugi::xml_node currentNote, Expansion *expansion);
349  void WritePb(pugi::xml_node currentNode, Pb *pb);
350  void WriteSb(pugi::xml_node currentNode, Sb *sb);
352 
356  void WritePage(pugi::xml_node currentNode, Page *page);
358  void WritePageElement(pugi::xml_node element, PageElement *object);
359  void WritePageMilestoneEnd(pugi::xml_node currentNode, PageMilestoneEnd *milestoneEnd);
360  void WriteSystem(pugi::xml_node currentNode, System *system);
361  void WriteSystemMilestoneEnd(pugi::xml_node currentNode, SystemMilestoneEnd *milestoneEnd);
362  void WriteScoreDef(pugi::xml_node currentNode, ScoreDef *scoreDef);
363  void WriteGrpSym(pugi::xml_node currentNode, GrpSym *grmSym);
364  void WritePgFoot(pugi::xml_node currentNode, PgFoot *pgFoot);
365  void WritePgHead(pugi::xml_node currentNode, PgHead *pgHead);
366  void WriteDiv(pugi::xml_node currentNode, Div *div);
367  void WriteStaffGrp(pugi::xml_node currentNode, StaffGrp *staffGrp);
368  void WriteStaffDef(pugi::xml_node currentNode, StaffDef *staffDef);
369  void WriteInstrDef(pugi::xml_node currentNode, InstrDef *instrDef);
370  void WriteLabel(pugi::xml_node currentNode, Label *label);
371  void WriteLabelAbbr(pugi::xml_node currentNode, LabelAbbr *labelAbbr);
372  void WriteLayerDef(pugi::xml_node currentNode, LayerDef *layerDef);
373  void WriteTuning(pugi::xml_node currentNode, Tuning *tuning);
374  void WriteCourse(pugi::xml_node currentNode, Course *course);
375  void WriteSymbolTable(pugi::xml_node currentNode, SymbolTable *symbolTable);
376  void WriteMeasure(pugi::xml_node currentNode, Measure *measure);
377  void WriteMeterSigGrp(pugi::xml_node currentNode, MeterSigGrp *meterSigGrp);
378  void WriteFb(pugi::xml_node currentNode, Fb *fb);
379  void WriteStaff(pugi::xml_node currentNode, Staff *staff);
380  void WriteLayer(pugi::xml_node currentNode, Layer *layer);
382 
387  void WriteAccid(pugi::xml_node currentNode, Accid *accid);
389  void WriteArtic(pugi::xml_node currentNode, Artic *artic);
390  void WriteBarLine(pugi::xml_node currentNode, BarLine *barLine);
391  void WriteBeam(pugi::xml_node currentNode, Beam *beam);
392  void WriteBeatRpt(pugi::xml_node currentNode, BeatRpt *beatRpt);
393  void WriteBTrem(pugi::xml_node currentNode, BTrem *bTrem);
394  void WriteChord(pugi::xml_node currentNode, Chord *chord);
395  void WriteClef(pugi::xml_node currentNode, Clef *clef);
396  void WriteCustos(pugi::xml_node currentNode, Custos *custos);
397  void WriteDivLine(pugi::xml_node currentNode, DivLine *divLine);
398  void WriteDot(pugi::xml_node currentNode, Dot *dot);
399  void WriteFTrem(pugi::xml_node currentNode, FTrem *fTrem);
400  void WriteGenericLayerElement(pugi::xml_node currentNode, GenericLayerElement *element);
401  void WriteGraceGrp(pugi::xml_node currentNode, GraceGrp *graceGrp);
402  void WriteHalfmRpt(pugi::xml_node currentNode, HalfmRpt *halfmRpt);
403  void WriteKeyAccid(pugi::xml_node currentNode, KeyAccid *keyAccid);
404  void WriteKeySig(pugi::xml_node currentNode, KeySig *keySig);
405  void WriteLigature(pugi::xml_node currentNode, Ligature *ligature);
406  void WriteLiquescent(pugi::xml_node currentNode, Liquescent *liquescent);
407  void WriteMensur(pugi::xml_node currentNode, Mensur *mensur);
408  void WriteMeterSig(pugi::xml_node currentNode, MeterSig *meterSig);
409  void WriteMRest(pugi::xml_node currentNode, MRest *mRest);
410  void WriteMRpt(pugi::xml_node currentNode, MRpt *mRpt);
411  void WriteMRpt2(pugi::xml_node currentNode, MRpt2 *mRpt2);
412  void WriteMSpace(pugi::xml_node currentNode, MSpace *mSpace);
413  void WriteMultiRest(pugi::xml_node currentNode, MultiRest *multiRest);
414  void WriteMultiRpt(pugi::xml_node currentNode, MultiRpt *multiRpt);
415  void WriteNc(pugi::xml_node currentNode, Nc *nc);
416  void WriteNeume(pugi::xml_node currentNode, Neume *neume);
417  void WriteNote(pugi::xml_node currentNode, Note *note);
418  void WriteOriscus(pugi::xml_node currentNode, Oriscus *oriscus);
419  void WritePlica(pugi::xml_node currentNode, Plica *plica);
420  void WriteProport(pugi::xml_node currentNode, Proport *proport);
421  void WriteQuilisma(pugi::xml_node currentNode, Quilisma *quilisma);
422  void WriteRest(pugi::xml_node currentNode, Rest *rest);
423  void WriteSpace(pugi::xml_node currentNode, Space *space);
424  void WriteStem(pugi::xml_node currentNode, Stem *stem);
425  void WriteSyllable(pugi::xml_node currentNode, Syllable *syllable);
426  void WriteTabDurSym(pugi::xml_node currentNode, TabDurSym *tabDurSym);
427  void WriteTabGrp(pugi::xml_node currentNode, TabGrp *tabGrp);
428  void WriteTuplet(pugi::xml_node currentNode, Tuplet *tuplet);
430 
434  void WriteAnchoredText(pugi::xml_node currentNode, AnchoredText *anchoredText);
436  void WriteArpeg(pugi::xml_node currentNode, Arpeg *arpeg);
437  void WriteBeamSpan(pugi::xml_node currentNode, BeamSpan *beamSpan);
438  void WriteBracketSpan(pugi::xml_node currentNode, BracketSpan *bracketSpan);
439  void WriteBreath(pugi::xml_node currentNode, Breath *breath);
440  void WriteCaesura(pugi::xml_node currentNode, Caesura *caesura);
441  void WriteCpMark(pugi::xml_node currentNode, CpMark *cpMark);
442  void WriteDir(pugi::xml_node currentNode, Dir *dir);
443  void WriteDynam(pugi::xml_node currentNode, Dynam *dynam);
444  void WriteFermata(pugi::xml_node currentNode, Fermata *fermata);
445  void WriteFing(pugi::xml_node currentNode, Fing *fing);
446  void WriteGliss(pugi::xml_node currentNode, Gliss *gliss);
447  void WriteHairpin(pugi::xml_node currentNode, Hairpin *hairpin);
448  void WriteHarm(pugi::xml_node currentNode, Harm *harm);
449  void WriteLv(pugi::xml_node currentNode, Lv *lv);
450  void WriteMNum(pugi::xml_node currentNode, MNum *mnum);
451  void WriteMordent(pugi::xml_node currentNode, Mordent *mordent);
452  void WriteOctave(pugi::xml_node currentNode, Octave *octave);
453  void WriteOrnam(pugi::xml_node currentNode, Ornam *ornam);
454  void WritePedal(pugi::xml_node currentNode, Pedal *pedal);
455  void WritePhrase(pugi::xml_node currentNode, Phrase *phrase);
456  void WritePitchInflection(pugi::xml_node currentNode, PitchInflection *pitchInflection);
457  void WriteReh(pugi::xml_node currentNode, Reh *reh);
458  void WriteRepeatMark(pugi::xml_node currentNode, RepeatMark *repeatMark);
459  void WriteSlur(pugi::xml_node currentNode, Slur *slur);
460  void WriteTempo(pugi::xml_node currentNode, Tempo *tempo);
461  void WriteTie(pugi::xml_node currentNode, Tie *tie);
462  void WriteTrill(pugi::xml_node currentNode, Trill *trill);
463  void WriteTurn(pugi::xml_node currentNode, Turn *turn);
465 
469  void WriteF(pugi::xml_node currentNode, F *f);
471  void WriteFig(pugi::xml_node currentNode, Fig *fig);
472  void WriteLb(pugi::xml_node currentNode, Lb *lb);
473  void WriteNum(pugi::xml_node currentNode, Num *num);
474  void WriteRend(pugi::xml_node currentNode, Rend *rend);
475  void WriteSvg(pugi::xml_node currentNode, Svg *svg);
476  void WriteSymbol(pugi::xml_node currentNode, Symbol *symbol);
477  void WriteSymbolDef(pugi::xml_node currentNode, SymbolDef *symbolDef);
478  void WriteText(pugi::xml_node currentNode, Text *text);
480 
484  void WriteAbbr(pugi::xml_node currentNode, Abbr *abbr);
486  void WriteAdd(pugi::xml_node currentNode, Add *add);
487  void WriteAnnot(pugi::xml_node currentNode, Annot *annot);
488  void WriteApp(pugi::xml_node currentNode, App *app);
489  void WriteChoice(pugi::xml_node currentNode, Choice *choice);
490  void WriteCorr(pugi::xml_node currentNode, Corr *corr);
491  void WriteDamage(pugi::xml_node currentNode, Damage *damage);
492  void WriteDel(pugi::xml_node currentNode, Del *del);
493  void WriteExpan(pugi::xml_node currentNode, Expan *expan);
494  void WriteLem(pugi::xml_node currentNode, Lem *lem);
495  void WriteOrig(pugi::xml_node currentNode, Orig *orig);
496  void WriteRdg(pugi::xml_node currentNode, Rdg *rdg);
497  void WriteRef(pugi::xml_node currentNode, Ref *Ref);
498  void WriteReg(pugi::xml_node currentNode, Reg *Reg);
499  void WriteRestore(pugi::xml_node currentNode, Restore *restore);
500  void WriteSic(pugi::xml_node currentNode, Sic *sic);
501  void WriteSubst(pugi::xml_node currentNode, Subst *subst);
502  void WriteSupplied(pugi::xml_node currentNode, Supplied *supplied);
503  void WriteUnclear(pugi::xml_node currentNode, Unclear *unclear);
505 
509  void WriteVerse(pugi::xml_node currentNode, Verse *verse);
511  void WriteSyl(pugi::xml_node currentNode, Syl *syl);
512  void WriteZone(pugi::xml_node currentNode, Zone *zone);
513  void WriteSurface(pugi::xml_node currentNode, Surface *surface);
514  void WriteFacsimile(pugi::xml_node currentNode, Facsimile *facsimile);
515  void WriteGraphic(pugi::xml_node currentNode, Graphic *graphic);
517 
521  void WriteUnsupportedAttr(pugi::xml_node currentNode, Object *object);
522 
527  void WriteControlElement(pugi::xml_node element, ControlElement *object);
529  void WriteEditorialElement(pugi::xml_node element, EditorialElement *object);
530  void WriteLayerElement(pugi::xml_node element, LayerElement *object);
531  void WriteTextLayoutElement(pugi::xml_node element, TextLayoutElement *object);
532  void WriteRunningElement(pugi::xml_node element, RunningElement *object);
533  void WriteScoreDefElement(pugi::xml_node element, ScoreDefElement *object);
534  void WriteSystemElement(pugi::xml_node element, SystemElement *object);
535  void WriteTextElement(pugi::xml_node element, TextElement *object);
536  //
537  void WriteAltSymInterface(pugi::xml_node currentNode, AltSymInterface *interface);
538  void WriteAreaPosInterface(pugi::xml_node currentNode, AreaPosInterface *interface);
539  void WriteDurationInterface(pugi::xml_node currentNode, DurationInterface *interface);
540  void WriteLinkingInterface(pugi::xml_node currentNode, LinkingInterface *interface);
541  void WriteFacsimileInterface(pugi::xml_node element, FacsimileInterface *interface);
542  void WritePitchInterface(pugi::xml_node currentNode, PitchInterface *interface);
543  void WritePlistInterface(pugi::xml_node currentNode, PlistInterface *interface);
544  void WritePositionInterface(pugi::xml_node currentNode, PositionInterface *interface);
545  void WriteScoreDefInterface(pugi::xml_node currentNode, ScoreDefInterface *interface);
546  void WriteTextDirInterface(pugi::xml_node currentNode, TextDirInterface *interface);
547  void WriteTimePointInterface(pugi::xml_node currentNode, TimePointInterface *interface);
548  void WriteTimeSpanningInterface(pugi::xml_node currentNode, TimeSpanningInterface *interface);
550 
556  std::u32string EscapeSMuFL(std::u32string data);
557 
559  std::string IDToMeiStr(Object *element);
561  std::string DocTypeToStr(DocType type);
563 
564 public:
565  //
566 private:
567  std::ostringstream m_streamStringOutput;
568  int m_indent;
569  bool m_scoreBasedMEI;
571  bool m_basic;
572  pugi::xml_node m_mei;
573 
575  pugi::xml_node m_currentNode;
577  std::list<pugi::xml_node> m_nodeStack;
579  std::stack<Object *> m_boundaries;
581  std::deque<Object *> m_objectStack;
582 
584  bool m_hasFilter;
586  MatchLocation m_filterMatchLocation;
587  Object *m_firstFilterMatch;
588  int m_firstPage;
589  int m_currentPage;
590  int m_lastPage;
591  std::string m_firstMeasureID;
592  std::string m_lastMeasureID;
593  RangeMatchLocation m_measureFilterMatchLocation;
594  std::string m_mdivID;
595  MatchLocation m_mdivFilterMatchLocation;
597 
598  bool m_ignoreHeader;
599  bool m_removeIds;
600  SetOfObjects m_referredObjects;
601 };
602 
603 //----------------------------------------------------------------------------
604 // MEIInput
605 //----------------------------------------------------------------------------
606 
612 class MEIInput : public Input {
613 public:
614  // constructors and destructors
615  MEIInput(Doc *doc);
616  virtual ~MEIInput();
617 
618  bool Import(const std::string &mei) override;
619 
620 private:
621  bool ReadDoc(pugi::xml_node root);
622  bool ReadIncipits(pugi::xml_node root);
623 
625  bool ReadMdiv(Object *parent, pugi::xml_node parentNode, bool isVisible);
626  bool ReadMdivChildren(Object *parent, pugi::xml_node parentNode, bool isVisible);
627  bool ReadScore(Object *parent, pugi::xml_node parentNode);
629 
633  bool ReadPages(Object *parent, pugi::xml_node parentNode);
635  bool ReadPage(Object *parent, pugi::xml_node parentNode);
636  bool ReadPageChildren(Object *parent, pugi::xml_node parentNode);
637  bool ReadPageMilestoneEnd(Object *parent, pugi::xml_node milestoneEnd);
638  bool ReadSystem(Object *parent, pugi::xml_node system);
639  bool ReadSystemChildren(Object *parent, pugi::xml_node parentNode);
640  bool ReadSystemMilestoneEnd(Object *parent, pugi::xml_node milestoneEnd);
642 
646  bool ReadSection(Object *parent, pugi::xml_node section);
648  bool ReadSectionChildren(Object *parent, pugi::xml_node parentNode);
649  bool ReadEnding(Object *parent, pugi::xml_node ending);
650  bool ReadExpansion(Object *parent, pugi::xml_node expansion);
651  bool ReadPb(Object *parent, pugi::xml_node pb);
652  bool ReadSb(Object *parent, pugi::xml_node sb);
654 
663  bool ReadScoreDef(Object *parent, pugi::xml_node scoreDef);
665  bool ReadScoreDefChildren(Object *parent, pugi::xml_node parentNode);
666  bool ReadGrpSym(Object *parent, pugi::xml_node grpSym);
667  bool ReadPgFoot(Object *parent, pugi::xml_node pgFoot);
668  bool ReadPgHead(Object *parent, pugi::xml_node pgHead);
669  bool ReadDiv(Object *parent, pugi::xml_node div);
670  bool ReadRunningChildren(Object *parent, pugi::xml_node parentNode, Object *filter = NULL);
671  bool ReadStaffGrp(Object *parent, pugi::xml_node staffGrp);
672  bool ReadStaffGrpChildren(Object *parent, pugi::xml_node parentNode);
673  bool ReadStaffDef(Object *parent, pugi::xml_node staffDef);
674  bool ReadStaffDefChildren(Object *parent, pugi::xml_node parentNode);
675  bool ReadInstrDef(Object *parent, pugi::xml_node instrDef);
676  bool ReadLabel(Object *parent, pugi::xml_node label);
677  bool ReadLabelAbbr(Object *parent, pugi::xml_node labelAbbr);
678  bool ReadTuning(Object *parent, pugi::xml_node tuning);
679  bool ReadTuningChildren(Object *parent, pugi::xml_node parentNode);
680  bool ReadCourse(Object *parent, pugi::xml_node course);
681  bool ReadSymbolTable(Object *parent, pugi::xml_node parentNode);
682  bool ReadMeasure(Object *parent, pugi::xml_node measure);
683  bool ReadMeasureChildren(Object *parent, pugi::xml_node parentNode);
684  bool ReadMeterSigGrp(Object *parent, pugi::xml_node meterSigGrp);
685  bool ReadMeterSigGrpChildren(Object *parent, pugi::xml_node parentNode);
686  bool ReadFb(Object *parent, pugi::xml_node fb);
687  bool ReadFbChildren(Object *parent, pugi::xml_node parentNode);
688  bool ReadNum(Object *parent, pugi::xml_node parentNode);
689  bool ReadStaff(Object *parent, pugi::xml_node staff);
690  bool ReadStaffChildren(Object *parent, pugi::xml_node parentNode);
691  bool ReadLayer(Object *parent, pugi::xml_node layer);
692  bool ReadLayerDef(Object *parent, pugi::xml_node layerDef);
693  bool ReadLayerDefChildren(Object *parent, pugi::xml_node parentNode);
694  bool ReadLayerChildren(Object *parent, pugi::xml_node parentNode, Object *filter = NULL);
695  bool ReadTextChildren(Object *parent, pugi::xml_node parentNode, Object *filter = NULL);
696  bool ReadSymbolDefChildren(Object *parent, pugi::xml_node parentNode, Object *filter = NULL);
698 
702  bool ReadAccid(Object *parent, pugi::xml_node accid);
704  bool ReadArtic(Object *parent, pugi::xml_node artic);
705  bool ReadBarLine(Object *parent, pugi::xml_node barLine);
706  bool ReadBeam(Object *parent, pugi::xml_node beam);
707  bool ReadBeatRpt(Object *parent, pugi::xml_node beatRpt);
708  bool ReadBTrem(Object *parent, pugi::xml_node bTrem);
709  bool ReadChord(Object *parent, pugi::xml_node chord);
710  bool ReadClef(Object *parent, pugi::xml_node clef);
711  bool ReadCustos(Object *parent, pugi::xml_node custos);
712  bool ReadDivLine(Object *parent, pugi::xml_node divLine);
713  bool ReadDot(Object *parent, pugi::xml_node dot);
714  bool ReadFTrem(Object *parent, pugi::xml_node fTrem);
715  bool ReadGenericLayerElement(Object *parent, pugi::xml_node element);
716  bool ReadGraceGrp(Object *parent, pugi::xml_node graceGrp);
717  bool ReadHalfmRpt(Object *parent, pugi::xml_node halfmRpt);
718  bool ReadKeyAccid(Object *parent, pugi::xml_node keyAccid);
719  bool ReadKeySig(Object *parent, pugi::xml_node keySig);
720  bool ReadLigature(Object *parent, pugi::xml_node ligature);
721  bool ReadLiquescent(Object *parent, pugi::xml_node liquescent);
722  bool ReadMensur(Object *parent, pugi::xml_node mensur);
723  bool ReadMeterSig(Object *parent, pugi::xml_node meterSig);
724  bool ReadMRest(Object *parent, pugi::xml_node mRest);
725  bool ReadMRpt(Object *parent, pugi::xml_node mRpt);
726  bool ReadMRpt2(Object *parent, pugi::xml_node mRpt2);
727  bool ReadMSpace(Object *parent, pugi::xml_node mSpace);
728  bool ReadMultiRest(Object *parent, pugi::xml_node multiRest);
729  bool ReadMultiRpt(Object *parent, pugi::xml_node multiRpt);
730  bool ReadNc(Object *parent, pugi::xml_node nc);
731  bool ReadNeume(Object *parent, pugi::xml_node note);
732  bool ReadNote(Object *parent, pugi::xml_node note);
733  bool ReadOriscus(Object *parent, pugi::xml_node oriscus);
734  bool ReadPlica(Object *parent, pugi::xml_node plica);
735  bool ReadProport(Object *parent, pugi::xml_node proport);
736  bool ReadQuilisma(Object *parent, pugi::xml_node quilisma);
737  bool ReadRest(Object *parent, pugi::xml_node rest);
738  bool ReadSpace(Object *parent, pugi::xml_node space);
739  bool ReadStem(Object *parent, pugi::xml_node stem);
740  bool ReadSyl(Object *parent, pugi::xml_node syl);
741  bool ReadSyllable(Object *parent, pugi::xml_node syllable);
742  bool ReadTabDurSym(Object *parent, pugi::xml_node tabDurSym);
743  bool ReadTabGrp(Object *parent, pugi::xml_node tabGrp);
744  bool ReadTuplet(Object *parent, pugi::xml_node tuplet);
745  bool ReadVerse(Object *parent, pugi::xml_node verse);
747 
751  bool ReadAnchoredText(Object *parent, pugi::xml_node anchoredText);
753  bool ReadArpeg(Object *parent, pugi::xml_node arpeg);
754  bool ReadBeamSpan(Object *parent, pugi::xml_node beamSpan);
755  bool ReadBracketSpan(Object *parent, pugi::xml_node bracketSpan);
756  bool ReadBreath(Object *parent, pugi::xml_node breath);
757  bool ReadCaesura(Object *parent, pugi::xml_node caesura);
758  bool ReadCpMark(Object *parent, pugi::xml_node cpMark);
759  bool ReadDir(Object *parent, pugi::xml_node dir);
760  bool ReadDynam(Object *parent, pugi::xml_node dynam);
761  bool ReadFermata(Object *parent, pugi::xml_node fermata);
762  bool ReadFing(Object *parent, pugi::xml_node fing);
763  bool ReadGliss(Object *parent, pugi::xml_node gliss);
764  bool ReadHairpin(Object *parent, pugi::xml_node hairpin);
765  bool ReadHarm(Object *parent, pugi::xml_node harm);
766  bool ReadLv(Object *parent, pugi::xml_node lv);
767  bool ReadMNum(Object *parent, pugi::xml_node mnum);
768  bool ReadMordent(Object *parent, pugi::xml_node mordent);
769  bool ReadOctave(Object *parent, pugi::xml_node octave);
770  bool ReadOrnam(Object *parent, pugi::xml_node ornam);
771  bool ReadPedal(Object *parent, pugi::xml_node pedal);
772  bool ReadPhrase(Object *parent, pugi::xml_node phrase);
773  bool ReadPitchInflection(Object *parent, pugi::xml_node pitchInflection);
774  bool ReadRepeatMark(Object *parent, pugi::xml_node repeatMark);
775  bool ReadReh(Object *parent, pugi::xml_node reh);
776  bool ReadSlur(Object *parent, pugi::xml_node slur);
777  bool ReadTempo(Object *parent, pugi::xml_node tempo);
778  bool ReadTie(Object *parent, pugi::xml_node tie);
779  bool ReadTrill(Object *parent, pugi::xml_node trill);
780  bool ReadTurn(Object *parent, pugi::xml_node turn);
782 
786  bool ReadF(Object *parent, pugi::xml_node f);
788  bool ReadFig(Object *parent, pugi::xml_node fig);
789  bool ReadLb(Object *parent, pugi::xml_node lb);
790  bool ReadRend(Object *parent, pugi::xml_node rend);
791  bool ReadSvg(Object *parent, pugi::xml_node svg);
792  bool ReadSymbol(Object *parent, pugi::xml_node symbol);
793  bool ReadSymbolDef(Object *parent, pugi::xml_node symbolDef);
794  bool ReadText(Object *parent, pugi::xml_node text, bool trimLeft, bool trimRight);
796 
801  bool ReadEditorialElement(Object *parent, pugi::xml_node app, EditorialLevel level, Object *filter = NULL);
803  bool ReadAbbr(Object *parent, pugi::xml_node abbr, EditorialLevel level, Object *filter = NULL);
804  bool ReadAdd(Object *parent, pugi::xml_node add, EditorialLevel level, Object *filter = NULL);
805  bool ReadAnnot(Object *parent, pugi::xml_node annot);
806  bool ReadApp(Object *parent, pugi::xml_node app, EditorialLevel level, Object *filter = NULL);
807  bool ReadAppChildren(Object *parent, pugi::xml_node parentNode, EditorialLevel level, Object *filter = NULL);
808  bool ReadChoice(Object *parent, pugi::xml_node choice, EditorialLevel level, Object *filter = NULL);
809  bool ReadChoiceChildren(Object *parent, pugi::xml_node parentNode, EditorialLevel level, Object *filter = NULL);
810  bool ReadCorr(Object *parent, pugi::xml_node corr, EditorialLevel level, Object *filter = NULL);
811  bool ReadDamage(Object *parent, pugi::xml_node damage, EditorialLevel level, Object *filter = NULL);
812  bool ReadDel(Object *parent, pugi::xml_node del, EditorialLevel level, Object *filter = NULL);
813  bool ReadExpan(Object *parent, pugi::xml_node expan, EditorialLevel level, Object *filter = NULL);
814  bool ReadLem(Object *parent, pugi::xml_node lem, EditorialLevel level, Object *filter = NULL);
815  bool ReadOrig(Object *parent, pugi::xml_node orig, EditorialLevel level, Object *filter = NULL);
816  bool ReadRdg(Object *parent, pugi::xml_node rdg, EditorialLevel level, Object *filter = NULL);
817  bool ReadRef(Object *parent, pugi::xml_node ref, EditorialLevel level, Object *filter = NULL);
818  bool ReadReg(Object *parent, pugi::xml_node reg, EditorialLevel level, Object *filter = NULL);
819  bool ReadRestore(Object *parent, pugi::xml_node restore, EditorialLevel level, Object *filter = NULL);
820  bool ReadSic(Object *parent, pugi::xml_node sic, EditorialLevel level, Object *filter = NULL);
821  bool ReadSubst(Object *parent, pugi::xml_node subst, EditorialLevel level, Object *filter = NULL);
822  bool ReadSubstChildren(Object *parent, pugi::xml_node parentNode, EditorialLevel level, Object *filter = NULL);
823  bool ReadSupplied(Object *parent, pugi::xml_node supplied, EditorialLevel level, Object *filter = NULL);
824  bool ReadUnclear(Object *parent, pugi::xml_node unclear, EditorialLevel level, Object *filter = NULL);
825  bool ReadEditorialChildren(Object *parent, pugi::xml_node supplied, EditorialLevel level, Object *filter = NULL);
827 
831  bool ReadControlElement(pugi::xml_node element, ControlElement *object);
833  bool ReadEditorialElement(pugi::xml_node element, EditorialElement *object);
834  bool ReadLayerElement(pugi::xml_node element, LayerElement *object);
835  bool ReadTextLayoutElement(pugi::xml_node element, TextLayoutElement *object);
836  bool ReadRunningElement(pugi::xml_node element, RunningElement *object);
837  bool ReadScoreDefElement(pugi::xml_node element, ScoreDefElement *object);
838  bool ReadSystemElement(pugi::xml_node element, SystemElement *object);
839  bool ReadTextElement(pugi::xml_node element, TextElement *object);
840 
841  bool ReadAltSymInterface(pugi::xml_node element, AltSymInterface *interface);
842  bool ReadAreaPosInterface(pugi::xml_node element, AreaPosInterface *interface);
843  bool ReadDurationInterface(pugi::xml_node element, DurationInterface *interface);
844  bool ReadLinkingInterface(pugi::xml_node element, LinkingInterface *interface);
845  bool ReadFacsimileInterface(pugi::xml_node element, FacsimileInterface *interface);
846  bool ReadPitchInterface(pugi::xml_node element, PitchInterface *interface);
847  bool ReadPlistInterface(pugi::xml_node element, PlistInterface *interface);
848  bool ReadPositionInterface(pugi::xml_node element, PositionInterface *interface);
849  bool ReadScoreDefInterface(pugi::xml_node element, ScoreDefInterface *interface);
850  bool ReadTextDirInterface(pugi::xml_node element, TextDirInterface *interface);
851  bool ReadTimePointInterface(pugi::xml_node element, TimePointInterface *interface);
852  bool ReadTimeSpanningInterface(pugi::xml_node element, TimeSpanningInterface *interface);
854 
858  bool ReadFacsimile(Doc *doc, pugi::xml_node facsimile);
860  bool ReadGraphic(Object *parent, pugi::xml_node graphic);
861  bool ReadSurface(Facsimile *parent, pugi::xml_node surface);
862  bool ReadTupletSpanAsTuplet(Measure *measure, pugi::xml_node tupletSpan);
863  bool ReadZone(Surface *parent, pugi::xml_node zone);
865 
869  void ReadUnsupportedAttr(pugi::xml_node element, Object *object);
870 
874  bool IsEditorialElementName(std::string elementName);
875 
879  void NormalizeAttributes(pugi::xml_node &xmlElement);
880 
886  bool ReadScoreBasedMei(pugi::xml_node element, Score *parent);
887 
891  void SetMeiID(pugi::xml_node element, Object *object);
893  DocType StrToDocType(std::string type);
894  std::u32string LeftTrim(std::u32string str);
895  std::u32string RightTrim(std::u32string str);
896  bool ReadXMLComment(Object *object, pugi::xml_node element);
898 
902  // to MEI 5.0.0
904  void UpgradeKeySigTo_5_0(pugi::xml_node keySig);
905  void UpgradePageTo_5_0(Page *page);
906  void UpgradePgHeadFootTo_5_0(pugi::xml_node element);
907  void UpgradeMeasureTo_5_0(pugi::xml_node measure);
908  void UpgradeMeterSigTo_5_0(pugi::xml_node meterSig, MeterSig *vrvMeterSig);
909  void UpgradeScoreDefElementTo_5_0(pugi::xml_node scoreDefElement);
910  void UpgradeStaffTo_5_0(pugi::xml_node staff);
911  void UpgradeLayerElementTo_5_0(pugi::xml_node element);
912  void UpgradeRendTo_5_0(pugi::xml_node element);
913  // to MEI 4.0.0
914  void UpgradeBeatRptTo_4_0_0(pugi::xml_node beatRpt, BeatRpt *vrvBeatRpt);
915  void UpgradeDurGesTo_4_0_0(pugi::xml_node element, DurationInterface *interface);
916  void UpgradeFTremTo_4_0_0(pugi::xml_node fTrem, FTrem *vrvFTrem);
917  void UpgradeMensurTo_5_0(pugi::xml_node mensur, Mensur *vrvMensur);
918  void UpgradeMordentTo_4_0_0(pugi::xml_node mordent, Mordent *vrvMordent);
919  void UpgradeScoreDefElementTo_4_0_0(pugi::xml_node scoreDefElement, ScoreDefElement *vrvScoreDefElement);
920  void UpgradeStaffDefTo_4_0_0(pugi::xml_node staffDef, StaffDef *vrvStaffDef);
921  void UpgradeStaffGrpTo_4_0_0(pugi::xml_node staffGrp, StaffGrp *vrvStaffGrp);
922  void UpgradeTurnTo_4_0_0(pugi::xml_node turn, Turn *vrvTurn);
923  // to MEI 3.0.0 (Page-Based MEI only)
924  void UpgradeMeasureTo_3_0_0(Measure *measure, System *system);
925  void UpgradePageTo_3_0_0(Page *page, Doc *doc);
927 
931  void ReadAccidAttr(pugi::xml_node node, Object *object);
934 
935 public:
936  //
937 private:
941  std::string m_filename;
942 
946  meiVersion_MEIVERSION m_meiversion;
947 
951  bool m_readingScoreBased;
952 
956  bool m_hasScoreDef;
957 
961  bool IsAllowed(std::string element, Object *filterParent);
962 
967  pugi::xml_node m_selectedMdiv;
968 
972  std::string m_comment;
973 
974  //----------------//
975  // Static members //
976  //----------------//
977 
981  static const std::vector<std::string> s_editorialElementNames;
982 };
983 
984 } // namespace vrv
985 
986 #endif
vrv::StaffDef
This class represents a MEI staffDef.
Definition: staffdef.h:26
vrv::DivLine
This class models the MEI <divLine> element.
Definition: divline.h:25
vrv::LabelAbbr
This class models the MEI <labelAbbr> element.
Definition: labelabbr.h:22
vrv::Staff
This class represents a staff in a laid-out score (Doc).
Definition: staff.h:102
vrv::Measure
This class represents a measure in a page-based score (Doc).
Definition: measure.h:37
vrv::Nc
This class models the MEI <nc> element.
Definition: nc.h:34
vrv::RepeatMark
This class models the MEI <ornam> element.
Definition: repeatmark.h:26
vrv::SymbolDef
Definition: symboldef.h:20
vrv::PgHead
This class represents an MEI pgHead.
Definition: pghead.h:22
vrv::F
This class models the MEI <f> element.
Definition: f.h:24
vrv::Turn
This class models the MEI <turn> element.
Definition: turn.h:26
vrv::Liquescent
Definition: liquescent.h:23
vrv::Syllable
This class models the MEI <mensur> element.
Definition: syllable.h:25
vrv::Zone
Implements the zone element in MEI.
Definition: zone.h:30
vrv::BeamSpan
This class models the MEI <beamSpan> element.
Definition: beamspan.h:31
vrv::MSpace
This class models the MEI <space> element.
Definition: mspace.h:22
vrv::Doc
This class is a hold the data and corresponds to the model of a MVC design pattern.
Definition: doc.h:41
vrv::Svg
Definition: svg.h:20
vrv::MEIOutput::HasFilter
bool HasFilter() const
Score based filtering by measure, page or mdiv.
vrv::Add
Definition: add.h:20
vrv::MeterSig
This class models the MEI <meterSig> element.
Definition: metersig.h:27
vrv::Verse
Definition: verse.h:23
vrv::PositionInterface
This class is an interface for elements with a position on the staff, such as rests.
Definition: positioninterface.h:30
vrv::Graphic
Implements the graphic element in MEI.
Definition: graphic.h:30
vrv::SystemElement
This class represents elements appearing within a measure.
Definition: systemelement.h:25
vrv::Plica
Definition: plica.h:20
vrv::Text
This class models CDATA (text)
Definition: text.h:23
vrv::Unclear
Definition: unclear.h:20
vrv::Tempo
This class is an interface for <tempo> elements at the measure level.
Definition: tempo.h:27
vrv::Quilisma
Definition: quilisma.h:23
vrv::Div
This class represents an MEI Div.
Definition: div.h:24
vrv::FTrem
This class models the MEI <fTrem> element.
Definition: ftrem.h:25
vrv::TabDurSym
This class models the MEI <tabDurSym> element.
Definition: tabdursym.h:25
vrv::Ending
This class represents a MEI ending.
Definition: ending.h:28
vrv::TextElement
Definition: textelement.h:22
vrv::Section
This class represents a MEI section.
Definition: section.h:28
vrv::Surface
Implements the surface element in MEI.
Definition: surface.h:30
vrv::Chord
This class represents a collection of notes in the same layer with the same onset time.
Definition: chord.h:32
vrv::Phrase
Definition: phrase.h:19
vrv::Accid
This class models the MEI <accid> element.
Definition: accid.h:27
vrv::PageElement
This class represents elements appearing within a page.
Definition: pageelement.h:25
vrv::Breath
This class models the MEI <breath> element.
Definition: breath.h:24
vrv::CpMark
This class models the MEI <cpMark> element.
Definition: cpmark.h:26
vrv::ScoreDefElement
This class is a base class for MEI scoreDef or staffDef elements.
Definition: scoredef.h:42
vrv::Object
This class represents a basic object.
Definition: object.h:59
vrv::Pedal
This class models the MEI <pedal> element.
Definition: pedal.h:27
vrv::Pages
This class represent a <pages> in page-based MEI.
Definition: pages.h:27
vrv::MEIOutput::SetIgnoreHeader
void SetIgnoreHeader(bool ignoreHeader)
Setter for ignore header flag for the MEI output (default is false)
Definition: iomei.h:264
vrv::Neume
This class models the MEI <neume> element.
Definition: neume.h:60
vrv::LinkingInterface
This class is an interface for elements having a link It is not an abstract class but should not be i...
Definition: linkinginterface.h:31
vrv::AnchoredText
This class is an interface for <anchoredText> elements at the measure level.
Definition: anchoredtext.h:25
vrv::MEIOutput::SetIndent
void SetIndent(int indent)
Setter for indent for the MEI output (default is 3, -1 for tabs)
Definition: iomei.h:259
vrv::MeterSigGrp
This class represents a MEI meterSigGrp.
Definition: metersiggrp.h:28
vrv::Slur
Definition: slur.h:53
vrv::MNum
This class models the MEI <mNum> element.
Definition: mnum.h:26
vrv::Trill
This class models the MEI <trill> element.
Definition: trill.h:26
vrv::Fb
This class models the MEI <fb> element.
Definition: fb.h:23
vrv::Output
This class is a base class for output classes.
Definition: iobase.h:31
vrv::Tie
This class models the MEI <tie> element.
Definition: tie.h:27
vrv::Orig
Definition: orig.h:20
vrv::MEIOutput::WriteObjectEnd
bool WriteObjectEnd(Object *object) override
Dummy object method that must be overridden in child class.
vrv::Dir
This class models the MEI <dir> element.
Definition: dir.h:26
vrv::InstrDef
This class models the MEI <instrDef> element.
Definition: instrdef.h:24
vrv::Ref
This class models the MEI <ref> element.
Definition: ref.h:23
vrv::Abbr
Definition: abbr.h:20
vrv::GenericLayerElement
This class holds generic elements existing within MEI <layer> but not supported by Verovio.
Definition: genericlayerelement.h:22
vrv::Ligature
This class represents a collection of notes in the same layer with successive onset times,...
Definition: ligature.h:28
vrv::Mensur
This class models the MEI <mensur> element.
Definition: mensur.h:27
vrv::ScoreDefInterface
This class is an interface for elements implementing score attributes, such as <scoreDef>,...
Definition: scoredefinterface.h:31
vrv::PitchInflection
This class models the MEI <dir> element.
Definition: pitchinflection.h:23
vrv::TabGrp
This class models the MEI <tabGrp> element.
Definition: tabgrp.h:23
vrv::BTrem
This class models the MEI <bTrem> element.
Definition: btrem.h:23
vrv::App
Definition: app.h:19
vrv::Lb
This class models the MEI <lb>
Definition: lb.h:23
vrv::MultiRpt
This class models the MEI <multiRpt> element.
Definition: multirpt.h:25
vrv::Reg
Definition: reg.h:20
vrv::MEIOutput::GetOutput
std::string GetOutput()
Return the output as a string by writing it to the stringstream member.
vrv::Tuning
This class models the MEI <tuning> element.
Definition: tuning.h:23
vrv::HalfmRpt
This class models the MEI <halfmRpt> element.
Definition: halfmrpt.h:26
vrv::Symbol
This class models the MEI <symbol> element.
Definition: symbol.h:25
vrv::Oriscus
Definition: oriscus.h:23
vrv::BarLine
This class models the MEI <barLine> element.
Definition: barline.h:29
vrv::RunningElement
This class represents running elements (headers and footers).
Definition: runningelement.h:28
vrv::Supplied
Definition: supplied.h:20
vrv::Space
This class models the MEI <space> element.
Definition: space.h:23
vrv::SystemMilestoneEnd
This class models an end milestone element at the system level.
Definition: systemmilestone.h:28
vrv::Clef
This class models the MEI <clef> element.
Definition: clef.h:27
vrv::Course
This class models the MEI <course> element.
Definition: course.h:23
vrv::MRpt2
This class models the MEI <mRpt2> element.
Definition: mrpt2.h:26
vrv::SymbolTable
Definition: symboltable.h:20
vrv::Artic
Definition: artic.h:22
vrv::Del
Definition: del.h:20
vrv::LayerDef
Definition: layerdef.h:18
vrv::Damage
Definition: damage.h:20
vrv::Fig
This class models the MEI <fig> element.
Definition: fig.h:23
vrv::MEIOutput::Export
bool Export()
The main method for exporting the file to MEI.
vrv::AltSymInterface
This class is an interface for elements having a @altsym It is not an abstract class but should not b...
Definition: altsyminterface.h:30
vrv::Lv
This class models the MEI <lv> element.
Definition: lv.h:22
vrv::Input
This class is a base class for input classes.
Definition: iobase.h:63
vrv::Corr
Definition: corr.h:20
vrv::PageMilestoneEnd
This class models an end milestone element and has no MEI equivalent.
Definition: pagemilestone.h:26
vrv::Octave
This class models the MEI <octave> element.
Definition: octave.h:25
vrv::Restore
Definition: restore.h:20
vrv::Annot
This class models the MEI <annot> element.
Definition: annot.h:23
vrv::Beam
Definition: beam.h:279
vrv::Gliss
This class models the MEI <gliss> element.
Definition: gliss.h:24
vrv::Proport
This class models the MEI <proport> element.
Definition: proport.h:23
vrv::Arpeg
This class models the MEI <arpeg> element.
Definition: arpeg.h:26
vrv::Subst
Definition: subst.h:22
vrv::Pb
This class represents a MEI pb in score-based MEI.
Definition: pb.h:25
vrv::TextDirInterface
This class is an interface for elements implementing a text directive, such as <dir>,...
Definition: textdirinterface.h:26
vrv::PgFoot
This class represents an MEI pgFoot.
Definition: pgfoot.h:22
vrv::Custos
Definition: custos.h:24
vrv::MRpt
This class models the MEI <mRpt> element.
Definition: mrpt.h:26
vrv::Reh
This class models the MEI <reh> element.
Definition: reh.h:26
vrv::Note
This class models the MEI <note> element.
Definition: note.h:47
vrv::Mdiv
This class represent a <mdiv> in page-based MEI.
Definition: mdiv.h:24
vrv::Page
This class represents a page in a laid-out score (Doc).
Definition: page.h:31
vrv::AreaPosInterface
This class is an interface for elements implementing vertically and horizontally positionned elements...
Definition: areaposinterface.h:26
vrv::Ornam
This class models the MEI <ornam> element.
Definition: ornam.h:27
vrv::Facsimile
Implements the facsimile element in MEI.
Definition: facsimile.h:31
vrv::Sb
This class represents a MEI sb in score-based MEI.
Definition: sb.h:25
vrv::Mordent
This class models the MEI <mordent> element.
Definition: mordent.h:26
vrv::Label
This class models the MEI <label> element.
Definition: label.h:22
vrv::MEIOutput::SetRemoveIds
void SetRemoveIds(bool removeIds)
Setter for remove ids flag for the MEI output (default is false)
Definition: iomei.h:269
vrv::FacsimileInterface
Definition: facsimileinterface.h:27
vrv::Dot
Definition: dot.h:22
vrv::MEIOutput
This class is a file output stream for writing MEI files.
Definition: iomei.h:193
vrv::Fing
This class models the MEI <fing> element.
Definition: fing.h:25
vrv::Sic
Definition: sic.h:20
vrv::MEIOutput::WriteObject
bool WriteObject(Object *object) override
The main method for writing objects.
vrv::System
This class represents a system in a laid-out score (Doc).
Definition: system.h:36
vrv::BeatRpt
This class models the MEI <beatRpt> element.
Definition: beatrpt.h:25
vrv::Dynam
Definition: dynam.h:24
vrv::Syl
Syl is a TimeSpanningInterface for managing syllable connectors.
Definition: syl.h:31
vrv::KeyAccid
This class models the MEI <keyAccid> element.
Definition: keyaccid.h:26
vrv::Stem
This class models a stem as a layer element part and as MEI <stem> element.
Definition: stem.h:27
vrv::GrpSym
This class represents a MEI grpSym.
Definition: grpsym.h:25
vrv::MultiRest
This class models the MEI <multiRest> element.
Definition: multirest.h:26
vrv::GraceGrp
Definition: gracegrp.h:20
vrv::EditorialElement
This class is a base class for the editorial element containing musical content, for example <rgd> or...
Definition: editorial.h:38
vrv::ScoreDef
This class represents a MEI scoreDef.
Definition: scoredef.h:129
vrv::Tuplet
Definition: tuplet.h:28
vrv::MRest
This class models the MEI <mRest> element.
Definition: mrest.h:27
vrv::Rest
This class models the MEI <rest> element.
Definition: rest.h:37
vrv::Rdg
Definition: rdg.h:20
vrv::DurationInterface
This class is an interface for elements with duration, such as notes and rests.
Definition: durationinterface.h:31
vrv::Choice
Definition: choice.h:20
vrv::ControlElement
This class represents elements appearing within a measure.
Definition: controlelement.h:28
vrv::PlistInterface
This class is an interface for elements having a single time point, such as tempo,...
Definition: plistinterface.h:29
vrv::Score
This class represent a <score> in MEI.
Definition: score.h:30
vrv::Expansion
This class represents a MEI expansion.
Definition: expansion.h:26
vrv::Lem
Definition: lem.h:20
vrv::Num
This class models the MEI <num> element.
Definition: num.h:24
vrv::Caesura
This class models the MEI <caesura> element.
Definition: caesura.h:25
vrv::TimeSpanningInterface
This class is an interface for spanning elements, such as slur, hairpin, etc.
Definition: timeinterface.h:141
vrv::PitchInterface
This class is an interface for elements with pitch, such as notes and neumes.
Definition: pitchinterface.h:28
vrv::KeySig
This class models the MEI <keySig> element.
Definition: keysig.h:44
vrv::StaffGrp
This class represents a MEI staffGrp.
Definition: staffgrp.h:31
vrv::Fermata
This class models the MEI <fermata> element.
Definition: fermata.h:26
vrv::BracketSpan
This class models the MEI <bracketSpan> element.
Definition: bracketspan.h:24
vrv::TextLayoutElement
This class represents a text element featuring horizontal and vertical layout.
Definition: textlayoutelement.h:24
vrv::LayerElement
This class is a base class for the Layer (<layer>) content.
Definition: layerelement.h:46
vrv::Layer
This class represents a layer in a laid-out score (Doc).
Definition: layer.h:33
vrv::Rend
This class models the MEI <rend> element.
Definition: rend.h:25
vrv::Harm
This class models the MEI <harm> element.
Definition: harm.h:27
vrv::MEIInput
This class is a file input stream for reading MEI files.
Definition: iomei.h:612
vrv::Hairpin
This class models the MEI <hairpin> element.
Definition: hairpin.h:25
vrv::TimePointInterface
This class is an interface for elements having a single time point, such as tempo,...
Definition: timeinterface.h:35
vrv::Expan
Definition: expan.h:20