void writeAnimationFramesInput(XmlWriter& xml, const AnimationFramesInput& afi)
{
    xml.writeTag("animation-frames");

    xml.writeTagAttribute("bit-depth", afi.bitDepth);
    xml.writeTagAttribute("animation-delay", afi.animationDelay);
    xml.writeTagAttribute("add-transparent-tile", afi.addTransparentTile);

    for (const std::string& fiFilename : afi.frameImageFilenames) {
        xml.writeTag("frame");
        xml.writeTagAttributeFilename("image", fiFilename);
        xml.writeCloseTag();
    }

    xml.writeCloseTag();
}
void writePalettes(XmlWriter& xml, const NamedList<PaletteInput>& palettes)
{
    for (const auto& p : palettes) {
        xml.writeTag("palette");
        xml.writeTagAttribute("name", p.name);
        xml.writeTagAttributeFilename("image", p.paletteImageFilename);
        xml.writeTagAttribute("rows-per-frame", p.rowsPerFrame);
        xml.writeTagAttribute("skip-first", p.skipFirstFrame);

        if (p.animationDelay > 0) {
            xml.writeTagAttribute("animation-delay", p.animationDelay);
        }

        xml.writeCloseTag();
    }
}