package com.xenoage.zong.musicxml.types.attributes; import static com.xenoage.utils.StringUtils.concatenate; import static com.xenoage.utils.collections.CollectionUtils.alist; import java.util.Collections; import java.util.List; import lombok.AllArgsConstructor; import lombok.Getter; import com.xenoage.utils.annotations.MaybeEmpty; import com.xenoage.utils.xml.XmlReader; import com.xenoage.utils.xml.XmlWriter; import com.xenoage.zong.musicxml.types.enums.MxlFontStyle; import com.xenoage.zong.musicxml.types.enums.MxlFontWeight; import com.xenoage.zong.musicxml.util.IncompleteMusicXML; /** * MusicXML font. * * @author Andreas Wenger */ @AllArgsConstructor @Getter @IncompleteMusicXML(partly="font-family") //font-family: enum for font names like "handwritten, cursive, fantasy" public final class MxlFont { /** Generated from the comma-separated list of font names. */ @MaybeEmpty private final List<String> fontFamily; private MxlFontStyle fontStyle; private final MxlFontSize fontSize; private final MxlFontWeight fontWeight; public static final MxlFont noFont = new MxlFont(Collections.<String>emptyList(), MxlFontStyle.Unknown, MxlFontSize.noFontSize, MxlFontWeight.Unknown); public static MxlFont read(XmlReader reader) { List<String> fontFamily = alist(); String fontFamilies = reader.getAttribute("font-family"); if (fontFamilies != null) { for (String s : fontFamilies.split(",")) { fontFamily.add(s.trim()); } } MxlFontStyle fontStyle = MxlFontStyle.read(reader); MxlFontSize fontSize = MxlFontSize.read(reader); MxlFontWeight fontWeight = MxlFontWeight.read(reader); if (fontFamily.size() > 0 || fontStyle != MxlFontStyle.Unknown || fontSize != MxlFontSize.noFontSize || fontWeight != MxlFontWeight.Unknown) return new MxlFont(fontFamily, fontStyle, fontSize, fontWeight); else return noFont; } public void write(XmlWriter writer) { if (this != noFont) { if (fontFamily.size() > 0) writer.writeAttribute("font-family", concatenate(fontFamily, ",")); fontStyle.write(writer); fontSize.write(writer); fontWeight.write(writer); } } }