Utilizzare <snippets>

Sebbene includere i file come mostrato nella sezione precedente sia abbastanza potente, diventa molto utile se usato in combinazione con <snippets>. Gli snippet sono sezioni molto più piccole che è possibile inserire in un altro punto del file. Un esempio lo illustra meglio:

<document>
        <snippets>
                <snippet id="note">
                        <frame>
                                <text>
                Questo sarà inserito in due posizioni nell'interfaccia
                                </text>
                        </frame>
                </snippet>
        </snippets>
        <dialog label="test">
                <column>
                        <insert snippet="note"/>
                        [...]
                        <insert snippet="note"/>
                </column>
        </dialog>
</document>
        

Quindi, definire lo snippet in un punto all'inizio del file XML e quindi <insert> in qualsiasi punto si desideri.

Anche se questo esempio non è molto utile di per sé, pensa a combinarlo con un file <include>d .xml. Tenere presente che è possibile inserire ancheframmenti per il file .rkh nello stesso file. Si dovrebbe semplicemente <include> anche il file lì e <inserire> il frammento pertinente:

<!-- Questo è un file chiamato "common_snippets.xml" -->
<document>
        <snippet id="opzioni_comuni">
                <spinbox id="qualcosa" [...]/>
                [...]
        </snippet>
        <snippet id="nota_comune">
                <text>Una nota importante per questo tipo di  estensione</text>
        </snippet>

        <snippet id="guida_comune">
                <setting id="qualcosa">Questa fa qualcosa>
                [...]
        </snippet>
</document>
        
<!-- Questo è il file .xml dell'estensione -->
<document>
        <snippets>
                <!-- Importa i frammenti comuni -->
                <include file="common_snippets.xml"/>
        </snippets>

        <dialog label="test2">
                <insert snippet="nota_comune"/>
                <spinbox id="qualcosa_specifica_della_estensione" [...] />
                <insert snippet="opzioni_comuni"/>
        </dialog>
</document>
        

Simile a inclusione in JS, l'approccio inverso è spesso ancora più utile:

<!-- Questo è un file chiamato "common_layout.xml" -->
<document>
        <column>
                <insert snippet="note">
                [...]
                <insert snippet="plugin_parameters">
        </column>
        [...]
</document>
        
<!-- Questo è il file .xml dell'estensione -->
<document>
        <snippets>
                <snippet id="nota">
                        <text>La nota utilizzata per questa estensione specifica</text>
                </snippet>

                <snippet id="parametri_estensione">
                        <frame label="Parametri specifici di questa estensione">
                                [...]
                        </frame>
                </snippet>
        </snippets>

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

Infine, è anche possibile <inserire> frammenti in altri frammenti, a condizione che: a) ci sia un solo livello di annidamento e b) la sezione <snippets> sia posizionata all'inizio del file (prima che venga inserito un frammento annidato); questo perché le istruzioni <insert> vengono risolte dall'alto verso il basso.