package com.xenoage.zong.io.musiclayout; import static com.xenoage.utils.collections.CollectionUtils.map; import java.io.IOException; import java.util.HashMap; import com.xenoage.utils.math.Fraction; import com.xenoage.utils.xml.XmlReader; import com.xenoage.zong.musiclayout.settings.ChordSpacings; /** * Desktop reader for {@link ChordSpacings}. * * @author Andreas Wenger */ public class ChordSpacingsReader { /** * Reads the {@link ChordSpacings} from the given {@link XmlReader} at a child element * of the "chords" element. */ public static ChordSpacings readChordSpacings(XmlReader r) throws IOException { HashMap<Fraction, Float> durationWidths = map(); //load the duration-to-width mapping while (r.openNextChildElement()) { if (r.getElementName().equals("chord")) { //duration format: x/y, e.g. "1/4" Fraction duration = Fraction.fromString(r.getAttributeNotNull("duration")); //width format: x+y/z, eg. "3+1/2" float width = Fraction.fromString(r.getAttributeNotNull("width")).toFloat(); durationWidths.put(duration, width); } r.closeElement(); } return new ChordSpacings(durationWidths); } }