Versão Estável
0.46
Baixe Agora!
Detalhes sobre o arquivo INX
Intro
Está perdido? Talvêz você queira saber
Como Fazer Extensões para o Inkscape.
Um arquivo INX é um XML que define a extensão para o Inkscape e deve seguir essa estrutura:
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>{Nome Amigável da Extensão}</_name>
<id>{org.domain.sub-domain.extension-name}</id>
<dependency type="executable"
location="[extensions|{outro local}]">{arqivo dependencia}</dependency>
<param name="{nome-do-argumeto}" type="[int|string|boolean|...]"
min="{number}" max="{number}"
_gui-text="{Nome Amigável do Argumento}">{valor padrão}</param>
<effect>
<object-type>[all|{tipo do elemento}]</object-type>
<effects-menu>
<submenu _name="{Nome do Grupo da Extensão}"/>
</effects-menu>
</effect>
<script>
<command reldir="extensions"
interpreter="[python|perl|bash|{outro}]">{program}.{ext}</command>
</script>
</inkscape-extension>
Como diria Jack, vamos por partes
A tag raiz:
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
...
</inkscape-extension>
Sendo o INX um dialeto baseado em XML, é obrigado a ter uma tag envolvendo todas as tags do documento. Ela não recebe atributos, portanto ela está aí apenas para que o XML seja interpretável.
Batizando a extensão:
<_name>{Nome Amigável da Extensão}</_name>
A tag
<_name> é prefixada com "_" (sublinhado) para que o intltool perceba que se trata de um valor localizável. Sendo assim, se você pretende publicar sua extensão, dê nomes em inglês para a extensão. Dessa forma ferramentas de tradutores encontrarão esses valores que poderão ser traduzidos para qualquer língua.
O CPF da extensão:
<id>{org.domain.sub-domain.extension-name}</id>
Esse id deve ser único. Mesmo que sua extensão faça quase o mesmo que outra e atá tenha o mesmo nome.
Dependencias:
<dependency type="executable"
location="[extensions|{outro local}]">{arqivo dependencia}</dependency>
Adicione uma tag
<dependency> para cada dependencia de sua extensão. Caso falte uma a extensão não será disponibilizada para o usuário. É importante adicionar essa informação corretamente, porque é muito decepcionante tentar usar uma extensão que "quebra" em qualquer caso.
Attributos:
-
type : valores: executable, extension ou não definido. No caso geral a dependencia se refere a um arquivo em sí e o atributo location é necessário, no caso da dependencia ser outra extensao, o valor textual não é um arquivo, mas o id do dito-cujo. Exemplo: <dependency type="extension">org.inkscape.output.ps</dependency>
-
location : valores extensions (representa os possiveis diretórios de extensões) ou outro local qualquer.
Paramentros para os efeitos:
<param name="{nome-do-argumeto}" type="[int|float|string|boolean|description|enum|notebook]"
min="{number}" max="{number}"
_gui-text="{Nome Amigável do Argumento}">{valor padrão}</param>
Os parametros são apresentados ao usuário por uma janela de diálogo criada pelo Inkscape e serão enviados como argumentos para a extensão no formato
--nome-do-argumeto=valor.
Atributos:
-
name : o nome do argumento a ser passado pela linha de comando
-
type : o tipo de valor aceito. Define o widget usado na janela de diálogo. valores possiveis:
-
Boolean : cria uma checkbox e envia "?" ou "?" como valor do argumento.
-
Int : cria uma caixa com setas de incremento e limitada a valores numéricos inteiros.
-
Float : cria uma caixa de entrada limitada a valores numéricos reais.
-
String : cria uma caixa de texto de uma linha comum.
-
Description : adiciona um texto qualquer na janela de diálogo.
-
Enum : cria um combo com opções fixas (ver Adicionando Combo-Box)
-
Notebook : cria uma caixa com abas na janela de diálogo, para ajudar na organização. (ver Criando Abas)
-
min : valor numérico mínimo
-
max : valor numérico máximo
-
_gui-text : texto apresentado ao usuário (preferencialmente o nome do parametro). O "_" significa que esse valor pode ser localizado.
Definindo uma extensão de efeito:
<effect>
...
</effect>
Não sei porque as tags de parametro não ficam aqui dentro...
Quem eu enfeitiço :-):
<object-type>[all|{tipo do elemento}]</object-type>
Esse efeito pode ser usado em qualquer elemento ou só em certo tipo?
A idéia é que o efeito fique desabilitado se um elemento tratável pelo efeito não estiver selecionado, mas essa funcionalidade ainda não foi adicionada
(versão 0.44).
Onde o efeito se encaixa:
<effects-menu>
<submenu _name="{Nome do Grupo da Extensão}"/>
</effects-menu>
Indique a que grupo seu efeito pertence para facilitar a vida do usuário.
Script:
<script>
...
</script>
Dentro de
<script> você adiciona obrigatóriamente
<command> e, se quiser, adiciona quantos
<helper_extension> e
<check> achar interessante.
Faça acontecer:
<command reldir="[extensions|path|plugins|absolute]"
interpreter="[python|perl|bash|{outro}]">{program}.{ext}</command>
Agora que vem o interessante. Com essa tag o Inkscape sabe o que deve executar para que as coisas aconteção.
Atributos:
-
reldir : onde está o executável. extensions (diretórios de extesões do Inkscape - sua extensão ficará aqui, de preferência), path (path do sistema), plugins (diretório de plugins do Inkscape) ou outro local. Note que isso permite que ele esteja em qualquer lugar, e não somente nos diretórios de extensões. Assim você pode usar programas do sistema para fazer algo no SVG, por exemplo.
-
interpreter : alguns scripts não podem ser chamados diretamente, principalmente em sistemas que não suportam a notação #!/interpretador dos derivados de UNIX. conhecendo o interpretador o inkscape pode passar o script como argumento do interpretador de forma adequada.
Trabalhe com outra extensão:
<helper_extension>{id de outra extensão}</helper_extension>
(apenas para extensões de input e output)
Teste antes de executar:
<check reldir="[absolute|path|extensions|plugins]">{executável}</check>
(apenas para extensões de input e output)
Adicionando Combo-Box
As vezes é interessante restringir uma parâmetro a um pequeno grupo de valores, neste caso podemos usar o parametro de tipo
enum que cria um combo-box e adicionar itens que definem a coleção fixa de valores.
Veja o exemplo:
<param name="color-channel" type="enum" _gui-text="Color Channel">
<_item value="R">Red</_item>
<_item value="G">Green</_item>
<_item value="B">Blue</_item>
</param>
Neste caso se o usuário selecionar a opção "Green" o Inkscape repassará o parâmetro
--color-channel=Green para o efeito.
Criando Abas

Caso seu efeito suporte muitos parametros, você pode separar sub-grupos de parâmetros em abas para ajudar o entendimento do usuário.
Veja o exemplo:
<param name="tab" type="notebook">
<page name="tabA" _gui-text="Tab A">
<param name="pA1" type="string" _gui-text="Param A1"></param>
<param name="pA2" type="string" _gui-text="Param A2"></param>
</page>
<page name="tabB" _gui-text="Tab B">
<param name="pB1" type="string" _gui-text="Param B1"></param>
<param name="pB2" type="string" _gui-text="Param B2"></param>
<param name="pB3" type="string" _gui-text="Param B3"></param>
</page>
</param>