Sommaire

 

Extensions

Voici un guide pour réaliser de nouvelles extensions pour Inkscape. Actuellement, la majorité des extensions sont des scripts en Python.

Types d'extension

Les types d'extension suivants existent pour Inkscape :

  • entrée (lire un fichier ou une donnée) ;
  • sortie (écrire un fichier ou une donnée) ;
  • effet (changer le contenu du document) ;
  • imprimer (envoyer des données vers un périphérique externe).

Implantation d'une extension

Vue d'ensemble

  • Interne
    • Implantation en C++ (directement dans le code)
  • Externe
    • Scripts — par ex. Python, Perl ou des scripts système (console)
    • Transformations XSL

Interface utilisateur et types de paramètres : fichier de définition de l'extension (INX)

Toutes les extensions sont définies avec des fichiers de définition d'extension pour Inkscape (.inx) qui sont des fichiers XML dans l'espace de noms :

http://www.inkscape.org/namespace/inkscape/extension

et décrits par le Relax NG disponibles [ici].

Paramètres

Les extensions peuvent récupérer des valeurs obtenues avec des paramètres faciles à définir. Inkscape fournit les éléments d'interface basiques pour la saisie par l'utilisateur. Les types de paramètre suivants sont supportés :

  • int (pour un champ de nombre entier) ;
  • string (pour un champ texte) ;
  • float (pour un champ de nombre en virgule flottante) ;
  • boolean (pour une case à cocher) ;
  • enum (pour une liste déroulante) ;
  • optiongroup (pour une liste déroulante ou des boutons radio) ;
  • color (pour un sélecteur de couleur, comme celui de la boîte de dialogue Remplissage et contour).

Pour enrichir l'interface, les deux types de paramètre suivants sont aussi disponibles. Il ne fournissent pas de donnée à l'extension mais modifient l'interface de saisie :

  • description (pour des descriptions sous les paramètres) ;
  • notebook (pour des onglets).

Voir aussi : Paramètres INX

Structure

Exemple avec un bouton radio

Le balisage suivant :

<?xml version="1.0" encoding="UTF-8"?>
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
  <_name>RadioButton example</_name>
  <id>org.inkscape.effect.radiobuttontest</id>
  <param name="radio1" type="optiongroup" _gui-text="Select option: ">
    <option value="string1">translatable string 1</option>
    <option value="string2">string 2</option>
    <option value="string3">test 3!</option>
  </param>
  <param name="radio2" type="optiongroup" _gui-text="Select second option: ">
    <option value="string11">string1</option>
    <option value="string22">string2</option>
    <option>test3!</option>
  </param>
  <effect>
    <object-type>all</object-type>
    <effects-menu>
      <submenu _name="Developer Examples"/>
    </effects-menu>
  </effect>
  ...
</inkscape-extension>

va créer l'interface suivante :

Extensions-radiobutton gui example.png

i18n

Pour permettre aux fichiers .inx de s'insérer élégament dans l'infrastructure d'internationalisation d'Inkscape, quelques éléments et attributs XML sont préfixés par un sous-tiret « _ » pour indiquer que le texte contenu devrait être marqué pour traduction.

Le script de l'extension : un script écrit dans le langage de programmation de votre choix

Ce guide n'est pas encore complet. Si vous souhaitez aider à l'écrire, veuillez contacter l'équipe du site web d'Inkscape via la liste de diffusion inkscape-docs.

En attendant que davantage d'informations soient fournies ici, vous pouvez consulter le dossier « extensions » de votre installation d'Inkscape pour obtenir des exemples. Vous pourrez y trouver des fichiers .py (principalement inkex.py) qui vous munissent de fonctionnalités basiques (comme des messages d'erreur, obtenir l'identifiant des éléments sélectionnés, etc.) que vous pouvez utiliser dans votre extension, si vous l'écrivez en Python. Il est recommandé d'analyser une extension qui fait quelque chose de similaire à ce que va faire votre nouvelle extension (par ex. modifier des données de chemin, écrire un fichier, importer un format de fichier spécifique, envoyer des données à un traceur ou une imprimante), pour voir comment cela peut être effectué.

L'utilisateur Neon22 sur GitHub a réalisé une extension d'exemple (en Python, sous licence MIT, disponible dans le sous-menu « Render ») pour aider ceux qui souhaitent écrire de nouvelles extensions pour Inkscape. Cela montre et explique les options disponibles et peut être utilisé comme modèle à copier-coller.

Des informations légèrement plus anciennes et non structurées sont également disponibles sur notre wiki :

Partager votre extension

Vous vous êtes donc écrit une nouvelle extension pour Inkscape, pour répondre à vos propres besoins. Ne serait-il pas bien que les autres, qui ont les mêmes besoins, mais ne savent pas programmer, puissent aussi utiliser votre extension, et éventuellement vous envoyer des retours, et suggérer des améliorations, ou que d'autres programmeurs puissent vous rejoindre dans le développement de votre extension ?

Pour permettre cela, vous devrez effectuer ce qui suit :

  • Placez votre extension sous une licence de logiciel à source ouverte, par exemple GPL, comme Inkscape.
  • Publiez votre extension à un endroit où les autres peuvent contribuer au développement, c'est-à-dire un site qui permet aux développeurs de collaborer. Si votre extension contient des fichiers qui ont un nom qui se retrouve dans d'autres extensions (comme README, LICENSE), songez à les préfixer avec le nom de votre extension, afin qu'ils n'écrasent pas les autres fichiers lorsqu'un utilisateur les copie dans son dossier des extensions.
  • Informez les autres de l'existence de votre extension en la téléversant sur votre galerie InkSpace, ici sur inkscape.org :
    • Avant tout : ne vous inquiétez pas trop pour la qualité du code ou l'importance du problème que votre extension peut aider à résoudre. Cela peut toujours servir à quelqu'un — ou quelqu'un peut vous aider à corriger les problèmes une fois qu'ils en ont connaissance.
    • Téléversez les fichiers de votre extension (archivés, par exemple au format ZIP) dans la catégorie « Extensions » :
      • Ajoutez une description qui permet aux utilisateurs sans connaissances en programmation de comprendre ce que l'extension fait, en indiquant les dépendances requises ainsi que les versions d'Inkscape et les systèmes d'exploitation pour lesquels vous savez que l'extension fonctionne.
      • Ajoutez aussi un aperçu miniature (190×190px) qui aidera les gens à comprendre l'objet de l'extension.
      • Le cas échéant, ajoutez un lien menant au dépôt de contribution de l'extension.
      • Afin de rendre le tri plus facile pour les utilisateurs, vous pouvez ajouter quelques mots-clés (la liste des mots-clés officiels se trouve sur cette page, sections « Version », « Plateforme » et « Type d'extension »). Si l'objet de votre extension ne peut être représenté par aucun des mots-clés de la section « Type d'extension », faites-le-nous savoir afin que nous puissions en ajouter un qui correspond.
      • Complétez finalement tous les autres champs dans le formulaire de téléversement et cliquez sur « Publier ».
      • Votre fichier sera alors disponible au téléchargement sur la page des extensions.
    • Si vous y êtes disposé, envoyez un court message à la liste de diffusion des utilisateurs qui informe les gens de la disponibilité d'une nouvelle extension. Vous pouvez aussi demander des retours.
    • Suivez l'appréciation de votre extension et, si vous le souhaitez, participez à la maintenance de votre extension et à son débogage.
    • Essayez de penser à mettre à jour les fichiers téléversés de votre extension sur votre InkSpace sur inkscape.org lorsque vous mettez à jour l'extension sur le dépôt.