# Fichiers de configuration de Jaxe

Auteur: Damien Guillaume

- Introduction
- Définition du langage XML
- Enregistrement des fichiers
- Menus
- Affichage des noeuds
- Types d'affichage
- Exports
- Chaînes de caractères
- Plugins

# Introduction

Lors de la création d'un nouveau document avec Jaxe, il est nécessaire de choisir un fichier de config.

Les fichiers de config de Jaxe permettent de spécifier l'interface d'édition des documents XML avec Jaxe pour un langage XML donné. Ceci recouvre les informations sur le langage XML, les options d'enregistrement, les menus (notamment pour insérer les éléments), les types d'affichage des éléments, les exports possibles, et toutes les chaînes de caractères utilisées dans l'interface, en fonction de la langue de l'utilisateur.

Les fichiers de config se trouvent dans le répertoire `config` de Jaxe, et leurs noms se terminent par "_config.xml". Les anciens fichiers de config (avant Jaxe 3.0) avaient un nom se terminant en "_Jaxe_cfg.xml". On peut les convertir dans la nouvelle version à partir d'un menu d'export dans le menu Fichier.

Il est possible d'ouvrir un schéma XML dans Jaxe et d'"exporter" vers un fichier de config. Cela crée automatiquement un fichier de config qui permettra l'édition dans Jaxe pour ce schéma, mais les choix automatiques pour les types d'affichage sont souvent mauvais ou insuffisants : cet export ne doit pas être considéré comme une méthode de création des fichiers de config, mais peut servir pour commencer la création d'un fichier de config à partir d'un schéma particulièrement complexe.

# Définition du langage XML

## Définition des éléments

- `FICHIER_SCHEMA`

  Lors de la création d'un nouveau fichier de config, la première chose à faire est de définir le langage XML correspondant. Cela se fait en général en indiquant un fichier de schéma XML existant. Les schémas doivent utiliser la syntaxe du W3C (WXS) ou celle des schémas Relax NG (en XML).

- `SCHEMA_SIMPLE`

  Les schémas WXS étant assez complexe, il existe une alternative permettant de définir un langage très simple dans Jaxe, à l'intérieur du fichier de configuration. L'élément `SCHEMA_SIMPLE` permet de définir les éléments XML du langage, leurs attributs, et les relations hiérarchiques entre les éléments. Il n'est pas possible avec ces schéma de spécifier par exemple un ordre de sous-éléments dans un élément donné, ou encore des types pour les éléments et les attributs. Mais cela peut servir pour faire un prototype rapide, ou lorsque les besoins sont très simples.

  - `ELEMENT`

    Définition d'un élément XML pour les schémas simples.

  - `SOUS-ELEMENT`

    Un sous-élément possible (qui doit être défini par ailleurs).

  - `SOUS-ENSEMBLE`

    Un ensemble de sous-éléments possibles (l'ensemble doit être défini ailleurs).

  - `ATTRIBUT`

    Attribut d'élément.

  - `VALEUR`

    Valeur possible pour un attribut.

  - `ENSEMBLE`

    Définition d'un ensemble d'éléments (utilisable ensuite pour ne pas avoir à répéter les mêmes sous-éléments pour de nombreux éléments).

- `RACINE`

  Après avoir défini le langage XML, il est nécessaire d'indiquer à Jaxe un ou plusieurs éléments racine utilisables pour les nouveaux documents. On indique pour chaque racine possible le nom de l'élément avec l'élément `RACINE`.

- `AUTRE_CONFIG`

  Enfin, il est possible d'indiquer d'autres fichiers config à utiliser en parallèle avec celui décrit avec l'élément `AUTRE_CONFIG`, de manière à pouvoir mélanger 2 langages XML dans un document. Ceci est par exemple utilisé pour la création de documents XSLT.

## Arbre des éléments

Arbre des éléments sous l'élément `LANGAGE` :

- `LANGAGE (FICHIER_SCHEMA | SCHEMA_SIMPLE, RACINE+, AUTRE_CONFIG*)`
  - `FICHIER_SCHEMA @nom`
  - `SCHEMA_SIMPLE (ELEMENT | ENSEMBLE)+`
    - `ELEMENT @nom @texte (SOUS-ELEMENT | SOUS-ENSEMBLE | ATTRIBUT)*`
      - `SOUS-ELEMENT @element`
      - `SOUS-ENSEMBLE @ensemble`
      - `ATTRIBUT @nom @presence (VALEUR*)`
        - `VALEUR`
    - `ENSEMBLE @nom (SOUS-ELEMENT | SOUS-ENSEMBLE)+`
      - `SOUS-ELEMENT @element`
      - `SOUS-ENSEMBLE @ensemble`
  - `RACINE @element`
  - `AUTRE_CONFIG @nom`

# Enregistrement des fichiers

## Définition des éléments

- `ENCODAGE`

  Encodage des caractères à utiliser pour les nouveaux documents. Jaxe utilise ISO-8859-1 par défaut si rien n'est spécifié.

- `DOCTYPE`

  Définition de type de document, si une DTD doit être spécifiée dans les documents.

- `PREFIXE_ESPACE`

  Spécification d'un préfixe à utiliser pour un espace de noms donné. Il est possible d'en spécifier plusieurs.

## Arbre des éléments

Arbre des éléments sous l'élément `ENREGISTREMENT` :

- `ENREGISTREMENT (ENCODAGE?, DOCTYPE?, PREFIXE_ESPACE*)`
  - `ENCODAGE`
  - `DOCTYPE @publicid @systemid`
  - `PREFIXE_ESPACE @uri @prefixe`

# Menus

Les menus définis dans les fichiers de config s'affichent au-dessus de la zone de texte de Jaxe. Ils ne sont pas mélangés avec la barre de menus de Jaxe, qui se trouve au-dessus (en haut de l'écran sur Mac).

## Définition des éléments

- `MENU`

  Un menu principal, contenant potentiellement des sous-menus.

- `MENU_INSERTION`

  Un menu permettant d'insérer un noeud XML à l'endroit du curseur. Il faut spécifier le nom du noeud et le type de noeud (élément par défaut). Il est aussi possible de définir un raccourci clavier, avec la touche correspondante.

- `MENU_FONCTION`

  Menu permettant d'exécuter une fonction à partir de sa classe Java. La seule fonction prédéfinie dans Jaxe est `jaxe.FonctionNormal`, qui permet de retirer tous les styles à une zone du texte. D'autres fonctions peuvent être ajoutées sous forme de plugin.

- `PARAMETRE`

  Un paramètre à transmettre à la fonction.

- `SEPARATEUR`

  Séparateur de menu.

## Arbre des éléments

Arbre des éléments sous l'élément `MENUS` :

- `MENUS (MENU+)`
  - `MENU @nom (MENU | MENU_INSERTION | MENU_FONCTION | SEPARATEUR)+`
    - `MENU_INSERTION @nom @type_noeud (element|instruction|commentaire|CDATA) @raccourci`
    - `MENU_FONCTION @nom @classe @raccourci`
      - `PARAMETRE @nom @valeur`
    - `SEPARATEUR`
    - `MENU`

# Affichage des noeuds

Une fonctionnalité essentielle de Jaxe est la possibilité d'afficher et d'éditer les éléments XML de diverses façons, quelque soient leurs types dans le schéma XML. On pourra par exemple choisir d'afficher un élément représentant une table sous forme de table, ou un élément pointant vers une image sous forme d'image. L'objectif étant de faciliter l'édition des documents, sans pour autant perdre de vue leur aspect sémantique : on ne cherchera pas à afficher les éléments tels qu'on les verra sous forme de page web ou PDF, mais simplement avec une interface facilitant l'édition et mettant en évidence le sens des différents éléments.

## Définition des éléments

- `AFFICHAGE_ELEMENT`

  Spécifie le type d'affichage d'un élément.

- `PARAMETRE`

  Un paramètre d'affichage, en fonction du type d'affichage (voir plus bas pour une liste).

- `VALEUR_SUGGEREE`

  Valeur proposée à l'utilisateur quand le schéma ne fixe pas les valeurs autorisées.

- `AFFICHAGE_ATTRIBUT`

  Permet de suggérer des valeurs pour un attribut.

- `PLUGIN_INSTRUCTION`

  Plugin à utiliser pour les instructions de traitement (processing instructions).

- `PLUGIN_COMMENTAIRE`

  Plugin à utiliser pour afficher les commentaires XML.

## Arbre des éléments

Arbre des éléments sous l'élément `AFFICHAGE_NOEUDS` :

- `AFFICHAGE_NOEUDS (AFFICHAGE_ELEMENT | PLUGIN_INSTRUCTION | PLUGIN_COMMENTAIRE)+`
  - `AFFICHAGE_ELEMENT @element @type (PARAMETRE | VALEUR_SUGGEREE | AFFICHAGE_ATTRIBUT)*`
    - `PARAMETRE @nom @valeur`
    - `VALEUR_SUGGEREE`
    - `AFFICHAGE_ATTRIBUT @attribut (VALEUR_SUGGEREE+)`
      - `VALEUR_SUGGEREE`
  - `PLUGIN_INSTRUCTION @cible (PARAMETRE+)`
    - `PARAMETRE @nom @valeur`
  - `PLUGIN_COMMENTAIRE (PARAMETRE+)`
    - `PARAMETRE @nom @valeur`

# Types d'affichage

Type | Description | Affichage
--- | --- | ---
`division` | Deux barres allant jusqu'au bout de la fenêtre à droite, permettant de bien séparer de grandes parties du document. |
`zone` | Deux balises et des retours à la ligne, pour séparer des parties plus petites qu'avec `division`. |
`string` | Deux balises pour identifier une petite chaîne de caractères, sans retour à la ligne. |
`vide` | Une seule balise, typiquement pour un élément vide. |
`tableau` | Affichage de tableau de type tableur (avec le composant Swing JTable). Pratique pour des tableaux de nombres, mais ne permet pas d'utiliser des élements XML à l'intérieur des cellules (utiliser `tabletexte` pour cela). |
`tabletexte` | Affichage d'une table permettant d'utiliser des éléments XML dans les cellules. Gère aussi les attributs rowspan et colspan pour regrouper les cellules verticalement et horizontalement. |
`style` | A utiliser dans le cas (très rare si le langage XML code le sens par opposition à la forme) où un élément XML ne donne qu'une information de style. Affiche les caractères dans le style choisi (gras, italique, ...), sans aucune balise. Une alternative est d'utiliser le type `string`, qui permet aussi de choisir un style, mais affiche les balises. |
`fichier` | Affiche une image à partir de son chemin sur le disque issu d'un attribut de l'élément XML (à préciser). Il est possible de faire des copier/coller d'images et Jaxe créera automatiquement l'élément XML et le fichier de l'image sur le disque, en utilisant le premier élément de type `fichier`. |
`symbole` | Permet de choisir une image parmi un ensemble d'images situé dans un dossier. |
`liste` | Pour un élément correspondant à une liste à points ou numérotée. Le sous-élément doit utiliser le type `item`. S'affiche comme `zone`, avec un bouton '+' pour créer de nouveaux éléments de la liste. |
`item` | Elément d'une liste affichée avec le type `liste`. S'affiche avec des points ou des numéros, en fonction du type de liste. |
`typesimple` | Affiche un élément ayant une simple valeur, dans une petite zone particulière. Utilisable uniquement pour les éléments ayant un type simple dans le schéma XML. L'affichage précis (zone de texte, menu ou boîte à cocher) et la validation se fait en utilisant les contraintes du schéma XML. |
`equation` | Affiche l'image d'une équation. L'équation peut être éditée par un simple clic dessus, avec un dialogue présentant en même temps le texte de l'équation (avec une syntaxe très simple propre à Jaxe) et l'image correspondante. |
`formulaire` | Affiche un élément et tous ses sous-éléments possibles sous la forme d'un formulaire, avec un champ par sous-élément. Attention à ne pas utiliser ce type avec des éléments pouvant avoir un sous-arbre infiniment profond ! |
`plugin` | Si vous voulez définir votre propre élément Jaxe, c'est possible ! Voir la partie Création de nouveaux éléments Jaxe de la documentation pour les développeurs pour plus de précisions. En outre, certains plugins sont téléchargeables depuis cette page. |

Des paramètres peuvent être utilisés, en fonction des types d'affichage, avec l'élément `PARAMETRE` sous `AFFICHAGE_ELEMENT`.

Les affichages de type `division` et `zone` peuvent avoir un paramètre indiquant le nom de l'attribut à utiliser comme titre pour l'affichage.

Les affichages de type `fichier` et `symbole` doivent avoir un paramètre indiquant l'attribut repérant le nom du fichier.

Les affichages de type `tableau` et `tabletexte` doivent avoir des paramètres indiquant les éléments repérant les lignes et les cellules.

Les affichages de type `style` doivent avoir un paramètre indiquant le style.

Les affichages de type `zone` et `string` peuvent avoir un paramètre indiquant le style, un paramètre avec la police de caractères, et un paramètre avec la taille des caractères.

Les affichages de type `equation` doivent avoir des paramètres indiquant les attributs à utiliser pour le texte de l'équation et le nom de l'image.

Voilà la liste complète des paramètres possibles:

type | nom du paramètre | description
--- | --- | ---
division et zone | titreAtt | attribut pour le titre
division, zone, string et vide | attributsVisibles | affiche tous les attributs sur la balise de début (true|false)
tableau et tabletexte | trTag | élément pour une ligne
tableau et tabletexte | tdTag | élément pour une cellule
tableau et tabletexte | thTag | élément pour une cellule d'entête
tabletexte | colspanAttr | attribut de fusion des colonnes
tabletexte | rowspanAttr | attribut de fusion des lignes
tabletexte | alignAttr | attribut d'alignement du texte
liste | typeListe | type de liste (`POINTS|NUMEROS`)
style, zone et string | style | `GRAS|ITALIQUE|EXPOSANT|INDICE|SOULIGNE|BARRE`
zone et string | police | police de caractères
zone et string | taille | taille de caractères
fichier et symbole | srcAtt | attribut avec le nom du fichier
plugin | classe | classe Java dérivée de JaxeElement
item | image1 | première image de pastille
item | image2 | deuxième image de pastille
equation | srcAtt | attribut avec le nom de l'image
equation | texteAtt | attribut avec le texte de l'équation

# Exports

## Définition des éléments

- `EXPORT`

  Un export possible à partir des documents, en utilisant une ou plusieurs transformations XSLT successives. Un export vers un fichier HTML provoquera l'apparition d'un menu "Aperçu HTML" dans le menu Fenêtres de Jaxe. Les autres exports sont accessibles depuis le menu Fichier de Jaxe.

- `FICHIER_XSL`

  Un fichier XSL à utiliser pour la transformation (XSLT 1.0). Doit générer du XHTML ou HTML pour la sortie `HTML`, et du XSL-FO pour la sortie `PDF`.

- `PARAMETRE`

  Un paramètre de la feuille de style. Il existe des noms magiques qui font que Jaxe va remplir automatiquement les valeurs avant la transformation (ces valeurs sont impossibles à obtenir autrement depuis XSLT) :

  - `jaxe-fichier-xml`

    Le chemin vers le fichier XML

  - `jaxe-uri-xml`

    L'URI vers le fichier XML

  - `jaxe-fichier-xsl`

    Le chemin vers le fichier XSL

  - `jaxe-uri-xsl`

    L'URI vers le fichier XSL

## Arbre des éléments

Arbre des éléments sous l'élément `EXPORTS` :

- `EXPORTS (EXPORT+)`
  - `EXPORT @nom @sortie (FICHIER_XSL+)`
    - `FICHIER_XSL @nom (PARAMETRE+)`
      - `PARAMETRE @nom @valeur`

# Chaînes de caractères

On peut souhaiter modifier tous les textes (appelés aussi chaînes de caractères ou strings) de l'interface créée avec la configuration. Soit pour améliorer la lisibilité sans avoir à modifier le schéma, soit pour fournir une interface dans une autre langue pour le même schéma. On peut aussi souhaiter fournir les textes pour un ensemble de langues, de manière à ce que les utilisateurs puissent éditer les mêmes documents, avec la même configuration Jaxe, mais avec une interface entièrement dans leur langue.

Pour ces raisons, l'élément `STRINGS` représente un ensemble de textes pour une langue et un pays donné, et il est possible d'en spécifier plusieurs dans le même fichier de config. On mettra par exemple `langue="pt" pays="BR"` pour le portugais brésilien, ou juste `langue="fr"` pour spécifier la langue française sans précision sur le pays.

## Définition des éléments

- `DESCRIPTION_CONFIG`

  Ligne décrivant la configuration, affichée dans le dialogue de création de nouveaux documents de Jaxe.

- `STRINGS_MENU`

  Les chaînes de caractères associées à un menu, dont on spécifie le nom

- `TITRE`

  Un titre

- `DOCUMENTATION`

  Une documentation

- `STRINGS_ELEMENT`

  Les chaînes de caractères associées à un élément XML. Utilisées pour afficher l'élément, mais aussi pour le menu d'insertion de cet élément si aucun texte n'est spécifié pour le menu.

- `TITRE_VALEUR`

  Un titre à utiliser pour une valeur d'élément ou d'attribut

- `STRINGS_ATTRIBUT`

  Les chaînes de caractères associées à un attribut

- `STRINGS_EXPORT`

  Les chaînes de caractères associées à un export

## Arbre des éléments

Arbre des éléments sous l'élément `STRINGS` :

- `STRINGS @langue @pays (DESCRIPTION_CONFIG | STRINGS_MENU | STRINGS_ELEMENT | STRINGS_EXPORT)+`
  - `DESCRIPTION_CONFIG`
  - `STRINGS_MENU @menu (TITRE?, DOCUMENTATION?, STRINGS_MENU*)`
    - `TITRE`
    - `DOCUMENTATION`
    - `STRINGS_MENU @menu`
  - `STRINGS_ELEMENT @element (TITRE?, DOCUMENTATION?, TITRE_VALEUR*, STRINGS_ATTRIBUT*)`
    - `TITRE`
    - `DOCUMENTATION`
    - `TITRE_VALEUR @valeur`
    - `STRINGS_ATTRIBUT @attribut (TITRE?, DOCUMENTATION?, TITRE_VALEUR*)`
      - `TITRE`
      - `DOCUMENTATION`
      - `TITRE_VALEUR @valeur`
  - `STRINGS_EXPORT @export (TITRE?, DOCUMENTATION?)`
    - `TITRE`
    - `DOCUMENTATION`

# Plugins

## Remarque

Les plugins sous forme de fichiers jar ne sont gérés qu'à partir de Jaxe 3.0.

## Installation

Pour installer un plugin, il suffit de placer son fichier .jar dans le dossier `plugins` du dossier de Jaxe. Les nouvelles fonctionnalités du plugin (types d'affichage ou fonctions) peuvent alors être utilisées dans les fichiers de config.

Liste
Nom du plugin | Type | Objectif | Config requise | Téléchargement | Code source
--- | --- | --- | --- | --- | ---
JEEquaTeX | élément Jaxe | Editer des équations TeX avec une prévisualisation | Un serveur avec le script tex.php, ou latex dvips et convert installés chez les utilisateurs | JEEquaTeX.jar | JEEquaTeX.tar
ImportationTableau | fonction | Importer un tableau du presse-papier au format texte automatiquement vers un élément Jaxe de type tabletexte | - | ImportationTableau.jar | ImportationTableau.java
EnvoiContrib | fonction | Envoi d'un dossier contenant un fichier XML (de même nom) et des fichiers liés sur un serveur FTP | - (la bibliothèque JavaFTP est incluse) | EnvoiContrib.jar | EnvoiContrib.tar
JEChemin | élément Jaxe | Représente un chemin vers un fichier ou un répertoire. | - | JEChemin.jar | JEChemin.java

Si vous avez d'autres plugins à proposer, n'hésitez pas !