(FR) Introdution au Format de fichier SLA pour Scribus 1.4

Afin de générer des fichiers SLA dans un programme PHP, j'ai étudié le format SLA de Scribus. Voici les notes qui m'ont permis d'aboutir au résultat voulu. Elles ne portent que sur les éléments qui m'ont été utiles pour ce projet, et ne prétend aucunement à l'exhaustivité. La page File_Format_Specification_for_Scribus_1.4 dresse la liste des balises et de leurs attributs, mais il n'y a aucune explication.

Le format XML de Scribus est assez clair à comprendre et cette étude s'est faite assez simplement par 'rétro engineering'. Les balises XML ont des noms parfois opaques, mais les attributs ont des dénominations plus intuitives, même s'il y a quelques faux amis, et même s'ils sont parfois en anglais et parfois en allemand. A partir d'un fichier modèle fait avec SCRIBUS il est possible de voir les parties intéressantes, d'y faire des modifs et de vérifier le résultat dans Scribus.

Attention : les noms des tags et des attribus sont sensibles à la casse. Parfois ils sont en majuscules, parfois ils sont en CamelCase, il faut respecter cela, donc soyez vigilants.

= Balise DOCUMENT =

Après une entête, un fichier SLA se compose d'une balise   qui comprend
 * la définition de l'environnement (préférences, styles et autres éléments)
 * le contenu lui même.

Dans le cas d'un format A5, ça donne :

C'est effrayant mais en fait il n'y a à comprendre que ce dont on a besoin, qu'il est facile de trouver et d'adapter aux besoins. Par exemple, pour un document d'un autre format que le A5, les dimensions PAGEWIDTH et PAGEHEIGHT seront différentes.

SHOWLINK="1" demande de montrer dans scribus les liens entre linked frames (0 sinon). C'est très pratique pour élaborer la structure du document.

LANGUAGE="French" sert probablement pour les césures et pour le correcteur orthographique lorsqu'il marche.

= Environnement=

L'environnement comporte les valeurs des préférences. Je n'ai travaillé que sur les styles et les couleurs, que je détaille un peu ici. Le reste peut être recopié telquel à partir d'un fichier modèle.

Définition des styles
Ici : définition du style de paragraphe par défaut, d'un style de paragraphe "ParMonstyle" et d'un style de caractère "ChaMonstyle".

ANAME c'est le nom du style.

Pour les styles de paragraphes
CPARENT indique le style de caractère sur lequel est basé le style de paragraphe.

Le champ ALIGN vaut : 0 pour un alignement à gauche, 1 pour centré 2 pour aligné à droite 3 pour justifié 4 pour justification totale (yc dernière ligne incomplète)

Le champ VOR vaut l'espace avant un paragraphe et le champ NACH vaut l'espace après.

Couleurs
Les couleurs peuvent être en RGB ou en CMJN

en RGB

en CMJN

Autres définitions de l'environnement
Les autres éléments de l'environnement sont
 * la définition des différents profiles PDFS : 
 * l'imprimante 
 * les paramètres PDF 
 * les paramétrages de césure 
 * les gabarits 
 * le bloc des sections contenant la définition de chaque section 

et quelques autres structures.

= Contenu = Le contenu c'est ce qui se voit : les pages qui sont le support du contenu et le contenu lui-même : cadres contenant et texte contenu des cadres.

Les pages PAGE
Les pages sont définies par des objets 

La structure  contient : - leur positionnement PAGEXPOS et PAGEYPOS dans un même espace absolu contenant toutes les pages - leurs dimensions PAGEHEIGHT et PAGEWIDTH. - les marges - leur numéro : NUM etc

Dans l'exemple donné, vu la valeur de PAGEXPOS = 519, c'est une page de droite, et vu que c'est la page NUM=59 la valeur de PAGEYPOS=18442 est très grande.

Les pages sont séparées par un espace à l'écran paramétrable qui compte aussi pour PAGEYPOS.

Les cadres (frames) : PAGEOBJECTS

 * ANNAME contient le nom du frame visible dans la palette
 * OWNPAGE contient le n° de l'item (doit commencer à 0 sinon plantage de scribus)
 * NEXTITEM contient le n° de l'item linké suivant (qui doit exister sinon plantage) ou -1 sinon
 * BACKITEM contient le n° de l'item linké précédent (qui doit exister sinon plantage) ou -1 sinon
 * XPOS, YPOS : coordonnées absolues depuis le haut gauche de l'espace de la 1ère planche (planche 0 de l'item 0)
 * PTYPE : type de cadre. PTYPE="4" indique un cadre de texte. Cette doc ne présente que les text frames.

Attention : Les cadres PAGEOBJECT sont définis au premier niveau de la balise , au même niveau que les  donc, et non à l'intérieur d'une PAGE. En effet un cadre peut être à cheval sur plusieurs pages. Le DOCUMENT contient donc tous ces éléments "en vrac", c'est les XPOS et YPOS qui indiquent leur positionnement.

A l'intérieur d'un cadre PAGEOBJECT, tout le contenu est défini par des  et notamment par des  pour le contenu textuel.

L'élément textuel de base : ITEXT
Le texte apparaît à l'intérieur d'un , en valeur de l'attribut CH (pour "CHAINE" ?).

Basiquement, sans styles, c'est juste ça : 

Cette balise doit ensuite être suivie par une balise de "fin de paragraphe"  ou par si c'est la fin du cadre (donc : juste avant le ).

S'il y a 2 paragraphes c'est donc :

La balise contient aussi l'indication du style de paragraphe du texte contenu dans les ITEXTs précédents:

Si il y a des styles de caractères localement sur "Mon texte" en plus du style de paragraphe, ceux ci sont indiqués en attribut de la balise <ITEXT> :

ou, avec une couleur :

Les caractères spéciaux

 * les doubles quotes dans un texte doivent être échappées en

sinon elles se confondent avec les " de définition des valeurs des attributs dans le XML SLA


 * les sont échappés en  pour ne pas interférer avec les définition des balises dans le XML

mais c'est sauvegardé ensuite comme un saut de paragraphe (nouveau )
 * s'il y a un saut de ligne dans une valeur de chaine, il est lu et bien compris par Scribus,

sans décodage. Quand on lit le SLA avec un éditeur de code (ou dans ce wiki), c'est affiché dans la fonte par défaut de l'éditeur, qui parfois affiche le même glyphe, mais pas toujours. <ITEXT FONT="Liberation Mono Regular" CH="►●☻"/> ou <ITEXT FONT="Webdings Regular" CH=""/>
 * S'il y a des caractères genre dingbats, ils sont insérés directement,
 * les différents espaces cadratins, demi-cadratin, fine et ultrafine sont codés par le caractère unicode spécial qui leur est dédié, à l'intérieur de la chaine dont ils font partie, sauf l'espace insécable qui est spécifié par un tag propre à scribus : qui interrompt la chaine et nécessite donc un 2eme tag <ITEXT> pour la suite.

Exemple :

Certaines polices contiennent une bonne définition pour toutes ces espaces, mais pas toutes, loin de là. Il faut tester avant.