package com.xenoage.zong.musicxml.types;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import com.xenoage.utils.annotations.MaybeNull;
import com.xenoage.utils.annotations.NonNull;
import com.xenoage.utils.xml.XmlReader;
import com.xenoage.utils.xml.XmlWriter;
import com.xenoage.zong.musicxml.types.choice.MxlLyricContent;
import com.xenoage.zong.musicxml.util.IncompleteMusicXML;
/**
* MusicXML lyric.
*
* Consists of a {@link MxlLyricContent}.
* Other information is ignored.
*
* @author Andreas Wenger
*/
@IncompleteMusicXML(missing = "end-line,end-paragraph,editorial,name,justify,position,"
+ "placement,color", children = "")
@AllArgsConstructor @Getter @Setter
public final class MxlLyric {
public static final String elemName = "lyric";
@NonNull private MxlLyricContent content;
@MaybeNull private String number;
/**
* Reads and returns the lyric content of the given element,
* or returns null if unsupported.
*/
@MaybeNull public static MxlLyric read(XmlReader reader) {
String number = reader.getAttribute("number");
MxlLyricContent content = null;
if (reader.openNextChildElement()) {
String n = reader.getElementName();
if (n.equals("syllabic") || n.equals("text")) {
content = MxlSyllabicText.read(reader);
}
else if (n.equals("extend")) {
content = MxlExtend.read();
}
reader.closeElement();
}
if (content != null) {
return new MxlLyric(content, number);
}
else {
return null;
}
}
public void write(XmlWriter writer) {
writer.writeElementStart(elemName);
content.write(writer);
writer.writeElementEnd();
}
}