"""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,
)