Usar <snippets>

Embora a inclusão de arquivos conforme mostrado na seção anterior seja bastante poderosa, ela se torna mais útil quando usada em combinação com o comando <snippets>. Snippets são, na verdade, seções menores que você pode inserir em outro ponto do arquivo. Um exemplo ilustra isso melhor:

<document>
        <snippets>
                <snippet id="note">
                        <frame>
                                <text>
                Isto será inserido em dois lugares na GUI
                                </text>
                        </frame>
                </snippet>
        </snippets>
        <dialog label="test">
                <column>
                        <insert snippet="note"/>
                        [...]
                        <insert snippet="note"/>
                </column>
        </dialog>
</document>
        

Portanto, você define o trecho ou snippet em um local no topo do arquivo XML e então você o <insert> (insere) em qualquer(is) local(is) que desejar.

Embora este exemplo não seja muito útil por si só, considere combiná-lo com um arquivo .xml usando <include>. Observe que você também pode inserir trechos de código para o arquivo .rkh no mesmo arquivo. Basta adicionar o arquivo lá também usando <include> e inserir o trecho de código relevante usando <insert>:

<!-- Este é o arquivo chamado "common_snippets.xml" -->
<document>
        <snippet id="common_options">
                <spinbox id="something" [...]/>
                [...]
        </snippet>
        <snippet id="common_note">
                <text>Uma observação importante para este tipo de plugin</text>
        </snippet>

        <snippet id="common_help">
                <setting id="something">Isto faz alguma coisa</setting>
                [...]
        </snippet>
</document>
        
<!-- Este é o arquivo .xml do plugin -->
<document>
        <snippets>
                <!-- Importa os snippets comuns-->
                <include file="common_snippets.xml"/>
        </snippets>

        <dialog label="test2">
                <insert snippet="common_note"/>
                <spinbox id="something_plugin_specific" [...] />
                <insert snippet="common_options"/>
        </dialog>
</document>
        

Semelhante à inclusão em JS, a abordagem inversa costuma ser ainda mais útil:

<!-- Este é um arquivo chamado "common_layout.xml" -->
<document>
        <column>
                <insert snippet="note">
                [...]
                <insert snippet="plugin_parameters">
        </column>
        [...]
</document>
        
<!-- Este é o arquivo .xml do plugin -->
<document>
        <snippets>
                <snippet id="note">
                        <text>A nota usada para este plugin específico</text>
                </snippet>

                <snippet id="plugin_parameters">
                        <frame label="Parâmetros específicos deste plugin">
                                [...]
                        </frame>
                </snippet>
        </snippets>

        <dialog label="test3">
                <include file="common_layout.xml"/>
        </dialog>
</document>
        

Finalmente, também é possível <insert> (inserir) trechos de código (snippets) em outros trechos, desde que: a) haja apenas um nível de aninhamento, e b) a seção de <snippets> esteja localizada no topo do arquivo (antes da inserção de um snippet aninhado); isso ocorre porque as instruções <insert> são resolvidas de cima para baixo.