2012-04-11

Inkscape Extension を書くには

Extension の呼出し方がかなりシンプルになっているというか、ほとんど単なる外部プログラム呼出しなので簡単にできるようです。ようするに、
(interpreter)? your_script (--param=value)* /path/to/input[[/SVGfile]] | inkscape
というコマンドが発行されるのでコマンド引数を解析し、テンポラリファイルに出力された選択部分のオブジェクトの SVG データを変更して 標準出力に書きだせばよいということになります。もっとも、interpreter とか your_script とかいうのはプレースホルダでこいつは .inx ファイル(XML ファイル)の中で設定してやると必要なものに置き換えられます。
<?xml version="1.0" encoding="utf-8"?>  
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
  <_name>inkex</_name>  
  <id>com.example.inkex</id>  
  <effect>  
    <object-type>all</object-type>  
    <effects-menu>  
      <submenu _name="InkscapeExtension1"/>  
    </effects-menu>  
  </effect>  
  <script>  
    <command reldir="extensions" interpreter="mono">InkscapeExtension1.exe</command>  
  </script>  
</inkscape-extension>
  • command タグで起動コマンドを設定します。interpreter 属性がインタプリタ、タグの中身がインタプリタで実行するスクリプトファイルです。この例だと InkscapeExtension1.exe というアセンブリを mono で実行することになります。実行可能ファイルであれば interpreter の指定を省きます、いらないので。
    • reldir は(多分) $HOME/.config/inkscape/ の下のどこに起動するスクリプトがあるかということです。$HOME/.config/inkscape/extensions に .inx ファイルと一緒に置くと動きます。
  • _name タグは inkscape の extension メニューに表示される内容です。submenu を指定してるのでサブメニューで表示されますがこの例ではありがたみがありません。
  • object-type では extension を適用するオブジェクトの種類を指定します。all ですと全てですが、path にするとパスだけです。
    • 選択されたオブジェクトの id が --id=hoge の形式でコマンドラインオプションに追加されます。複数オブジェクトが指定されている場合はもちろん複数あります。

0 件のコメント:

コメントを投稿