"""Génère imsmanifest.xml (SCORM 1.2) pour le paquet Web/SCORM (voir build_scorm_package.py). SCORM 1.2 plutôt que 2004 : support le plus large chez les clients visés (Moodle, la plupart des LMS d'entreprise acceptent les deux, l'inverse est faux).""" import os from xml.sax.saxutils import escape _MANIFEST_TEMPLATE = """ ADL SCORM 1.2 {title} {title} {file_entries} """ def build_manifest_xml(slug, game_name, package_files): """`package_files` : chemins relatifs (depuis la racine du paquet, tel qu'écrits dans le zip) de TOUS les fichiers autres que index.html — un LMS strict (SCORM Cloud) rejette un manifeste qui omet un fichier réellement présent dans le paquet.""" file_entries = "\n".join( ' '.format(escape(rel.replace(os.sep, "/"))) for rel in package_files ) return _MANIFEST_TEMPLATE.format( identifier=escape(slug), title=escape(game_name), file_entries=file_entries, )