package com.xenoage.zong.musicxml.types; import com.xenoage.utils.annotations.MaybeNull; import com.xenoage.utils.xml.XmlReader; import com.xenoage.utils.xml.XmlWriter; import com.xenoage.zong.musicxml.types.attributes.MxlFont; import com.xenoage.zong.musicxml.types.groups.MxlLayout; import com.xenoage.zong.musicxml.util.IncompleteMusicXML; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; /** * MusicXML defaults. * * @author Andreas Wenger */ @IncompleteMusicXML(missing = "appearance,music-font,lyric-language", partly = "lyric-font") @AllArgsConstructor @Getter @Setter public final class MxlDefaults { public static final String elemName = "defaults"; @MaybeNull private MxlScaling scaling; @MaybeNull private MxlLayout layout; @MaybeNull private MxlFont wordFont; @MaybeNull private MxlLyricFont lyricFont; @MaybeNull public static MxlDefaults read(XmlReader reader) { MxlScaling scaling = null; MxlLayout layout = new MxlLayout(); MxlFont wordFont = null; MxlLyricFont lyricFont = null; while (reader.openNextChildElement()) { String n = reader.getElementName(); if (n.equals(MxlScaling.elemName)) scaling = MxlScaling.read(reader); else if (n.equals("word-font")) wordFont = MxlFont.read(reader); else if (n.equals(MxlLyricFont.elemName) && lyricFont == null) //read only first lyricFont = MxlLyricFont.read(reader); else layout.readElement(reader); reader.closeElement(); } if (false == layout.isUsed()) layout = null; if (scaling != null || layout != null || wordFont != null || lyricFont != null) return new MxlDefaults(scaling, layout, wordFont, lyricFont); else return null; } public void write(XmlWriter writer) { writer.writeElementStart(elemName); if (scaling != null) scaling.write(writer); if (layout != null) layout.write(writer); if (wordFont != null) { writer.writeElementStart("word-font"); wordFont.write(writer); writer.writeElementEnd(); } if (lyricFont != null) lyricFont.write(writer); writer.writeElementEnd(); } }