Inhalt

Erweiterungen

Dieser Leitfaden beschreibt, wie man neue Erweiterungen für Inkscape schreiben kann. Zur Zeit sind die meisten verfügbaren Erweiterungen Python-Skripte.

Erweiterungstypen

Die folgenden Arten von Erweiterungen gibt es für Inkscape:

  • input (Dateien / Daten einlesen)
  • output (Dateien / Daten schreiben)
  • effect (Objekte im Dokument verändern)
  • print (Ausgabe an externe Geräte)

Implementierung von Erweiterungen

Übersicht

  • Intern
    • Implementierung in C++ (direkt im Programmcode)
  • Extern
    • Skripte, z.B. in Python, Perl oder als Systemskripte (bash, Konsole)
    • XSL-Transformationen

Benutzeroberfläche und Parameter: "Extension Definition"-Datei (INX)

Alle Erweiterungen müssen über eine "Inkscape Extension Definition"-Datei (.inx) definiert werden. Dabei handelt es sich um XML-Dateien, die den Namensraum

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

verwenden und durch Relax NG beschrieben sind ([hier]).

Parameter

Man kann Erweiterungen Werte übergeben, die man mittels einfach zu definierender Parameter aus der Benutzeroberfläche heraus erhalten kann. Inkscape stellt die grafische Oberfläche für Benutzereingaben zur Verfügung. Die folgenden Eingabewerttypen werden unterstützt:

  • int (Eingabefeld für ganze Zahlen)
  • string (Texteingabefeld)
  • float (Eingabefeld für Fließkommazahlen)
  • boolean (Kontrollkästchen, "Checkbox")
  • enum (Aufklappliste)
  • optiongroup (Aufklappliste oder Liste von Optionsschaltern, "Radio Buttons")
  • color (Farbauswahldialog, so wie im "Füllung und Kontur"-Dialog)

Um die Benutzeroberfläche komfortabler zu gestalten, gibt es auch noch die folgenden zwei Parameter, die jedoch keine Daten an die Erweiterung übergeben, sondern nur die Benutzeroberfläche verändern:

  • description (Beschreibungen unterhalb von Parametern)
  • notebook (Reiter)

Siehe auch: INX Parameters

Struktur

Ein Beispiel mit "RadioButtons":

Der folgende Auszeichnungscode:

<?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>

führt dazu, dass dieser Dialog in der Benutzeroberfläche erscheint, wenn man die Erweiterung anwählt:

Extensions-radiobutton gui example.png

Übersetzungen

Damit die .inx-Dateien sich in die Übersetzungsinfrastruktur von Inkscape einpassen, beginnen einige der XML-Elemente und -Attribute mit einem Unterstrich (_), der anzeigt, dass der enthaltene Text übersetzbar werden soll.

Das Erweiterungsskript: geschrieben in der Programmiersprache Deiner Wahl

Dieser Leitfaden ist noch nicht vollständig. Wenn Du dabei helfen möchtest, ihn zu verbessern, nimm bitte über die inkscape-docs-Mailingliste Kontakt zum Inkscape-Web-Team auf.

Bis an dieser Stelle mehr Informationen zur Verfügung stehen, schau Dir bitte die Beispiele im Ordner "extensions" in Deiner Inkscape-Installation an. Dort gibt es auch einige .py-Dateien (insbesondere inkex.py), die einige grundlegende Funktionen zur Verfügung stellen (wie Fehlermeldungen, IDs ausgewählter Elemente holen usw.), auf denen Du mit Deiner Erweiterung aufbauen kannst, wenn Du diese in Python schreiben möchtest. Es ist empfehlenswert, sich auch eine Erweiterung anzuschauen, die etwas Ähnliches tut, wie das, was Deine Erweiterung einmal können soll (also z.B. Pfaddaten verändern, eine Datei schreiben, ein bestimmtes Dateiformat importieren, Daten an einen Plotter oder Drucker senden), um zu sehen, wie man so etwas machen kann.

Auf Github hat Neon22 eine Beispielerweiterung zusammengestellt (Python, MIT-lizenziert, zu finden im Untermenü "Rendern"), die beim Schreiben neuer Erweiterungen nützlich ist. Sie zeigt und erklärt die verfügbaren Optionen und kann auch als Vorlage zum Kopieren und Einfügen verwendet werden.

Einige etwas ältere, weniger gut strukturierte, Informationsseiten gibt es auch in unserem Wiki:

Deine Erweiterung mit anderen teilen

Du hast also jetzt eine neue Inkscape-Erweiterung für Dich selbst geschrieben, die Du für einen bestimmten Zweck brauchst. Wäre es nicht toll, wenn andere, die auch so etwas benötigen, aber nicht selbst programmieren können, auch Deine Erweiterung benutzen könnten, und Dir dann vielleicht Feedback geben und Verbesserungsvorschläge machen könnten, oder wenn andere Programmierer Dir dabei helfen könnten, Deine Erweiterung zu verbessern?

Um dies zu erreichen, musst Du Folgendes tun:

  • Lizenziere Deine Erweiterung unter einer Open-Source-Lizenz, z.B. der GPL, so wie Inkscape.
  • Veröffentliche Deine Erweiterung an einem Ort, an dem andere bei der Entwicklung mithelfen können, d.h. auf einer Webseite, die die Zusammenarbeit zwischen Entwicklern ermöglicht. Wenn Deine Erweiterung Dateien enthält, die in anderen Erweiterungen wahrscheinlich ähnlich oder genauso heißen, (z.B. README, LICENCE), überlege Dir, ob Du nicht zusätzlich den Namen Deiner Erweiterung in den Dateinamen mit aufnehmen kannst, so dass Deine Dateien nicht andere Dateien überschreiben, wenn ein Benutzer diese in sein Erweiterungsverzeichnis kopiert.
  • Mach andere auf Deine Erweiterung aufmerksam, indem Du sie in Deinen InkSpace auf inkscape.org hochlädst:
    • Wichtig dabei: mache Dir keine allzu großen Sorgen über die Qualität Deines Programmcodes oder darüber, ob das Problem, das Deine Erweiterung löst, überhaupt wichtig genug ist. Sie kann trotzdem für irgendjemanden nützlich sein - oder vielleicht findet sich so auch jemand, der Dir hilft, die Probleme zu beheben.
    • Lade Deine (gepackten, z.B. im zip-Dateiformat) Erweiterungsdateien in die Kategorie "Extension" (Erweiterung) hoch:
      • füge eine hilfreiche Beschreibung (am besten auf Englisch) hinzu, die es Nutzern ohne Programmierkenntnisse ermöglicht, zu verstehen, was Deine Erweiterung tut. Außerdem teile den Benutzern mit, wenn irgendwelche Abhängigkeiten zu anderen Programmen bestehen, und gib auch an, mit welcher Inkscape-Version und auf welchem Betriebssystem die Erweiterung funktioniert.
      • Ein kleines Vorschaubild (190x190px) hilft den Benutzern, zu verstehen wozu die Erweiterung gut ist.
      • Trage auch einen Link zu der Webseite, auf der die Entwicklung der Erweiterung passiert, ein.
      • Um das Filtern in der Liste aller Erweiterungen zu vereinfachen, gib auch ein paar Tags an (eine Liste der offiziellen Tags findest Du hier auf der rechten Seite, unter den Überschriften 'Inkscape Version', 'Platform' und 'Extension type'.) Wenn Deine Erweiterung etwas tut, das sich nicht mit einem der offiziellen Tags unter 'Extension type' beschreiben lässt, dann gib uns bitte Bescheid, damit wir einen passenden hinzufügen können.
      • Fülle auch alle anderen Felder im Formular aus und klicke danach auf 'Veröffentlichen'.
      • Deine Datei steht jetzt zum Herunterladen auf der Erweiterungs-Seite zur Verfügung.
    • Wenn Du magst, schicke auch eine kurze Nachricht an die Benutzer-Mailingliste, in der Du den anderen mitteilst, dass es jetzt diese neue Erweiterung gibt. Du kannst hier auch um Rückmeldung bitten.
    • Beobachte wie andere sich darüber freuen, Deine Erweiterung benutzen zu können, und wenn Du magst, interagiere mit ihnen, um Deine Erweiterung aktuell zu halten und Programmfehler zu beheben.
    • Versuche daran zu denken, Deine hochgeladenen Erweiterungsdateien in Deinem InkSpace auf inkscape.org zu aktualisieren, wenn Du die Erweiterung in Deinem Repositorium aktualisiert hast.