<chapter id="dev">
<chapterinfo>
<authorgroup>
<author
>&TC.Hollingsworth; &TC.Hollingsworth.mail;</author>
&traductor.Antoni.Bella; 
</authorgroup>
</chapterinfo>
<title
>Estendre &kate;</title>

<sect1 id="dev-intro">
<title
>Introducció</title>

<para
>Igual que qualsevol editor de text avançat, &kate; ofereix una varietat de maneres d'estendre la seva funcionalitat. Podeu <link linkend="dev-scripting"
>escriure scripts senzills per afegir funcionalitat amb JavaScript</link
>, afegir funcionalitat millorada al component d'edició amb <link linkend="dev-part"
>Connectors del component d'edició</link
>, o afegir encara més funcionalitat a l'editor els <link linkend="dev-app"
>Connectors d'aplicació &kate; escrits en C++</link
> o els <link linkend="dev-pate"
>Connectors &pate; escrits en Python</link
>. Finalment, un cop estengueu &kate;, sereu benvingut a unir-vos amb nosaltres i compartir les vostres millores amb el món!</para>

</sect1>

<sect1 id="dev-scripting">
<title
>Crear scripts amb JavaScript</title>

<para
>Des de &kappname; 3.4 de KDE 4.4 el component d'edició de &kappname; és fàcilment extensible, escrivint scripts. El llenguatge per crear scripts és ECMAScript (conegut com Javascript). &kappname; admet dos tipus d'script: el sagnat i els scripts de línia d'ordres. </para>

<sect2 id="dev-scripting-indentation">
<title
>Scripts de sagnat</title>

<para
>Els scripts de sagnat: També coneguts com «indenters», sagnen automàticament el codi font en escriure text. Com a exemple, després de tocar la tecla de retorn el nivell de sagnat sovint és incrementat. </para>

<para
>En les següents seccions es descriuen pas a pas com crear l'esquelet d'un sagnat simple. Com a primer pas, creeu una nou fitxer <filename
>*.js</filename
> anomenat &pex;, <filename
>javascript.js</filename
> a la carpeta d'inici local <filename
>$KDEHOME/share/apps/katepart/script/indentation</filename
>. </para>

<sect3 id="dev-scripting-indentation-header">
<title
>La capçalera de l'script de sagnat</title>
<para
>La capçalera del fitxer <filename
>javascript.js</filename
> està encastada en un comentari i és de la forma següent <programlisting>
/* kate-script
 * name: JavaScript
 * author: Nom exemple &lt;nom.exemple@alguna.adreça.org&gt;
 * license: BSD
 * revision: 1
 * kate-version: 3.4
 * required-syntax-style: javascript
 * indent-languages: javascript
 * priority: 0
 * i18n-catalog: mycatalog
 *
* Una línia sense punts «:» atura l'anàlisi de la capçalera. És a dir, podeu * afegir text opcional aquí com una llicència detallada. */
</programlisting
> Cada entrada s'explica en detall tot seguit: <itemizedlist>
<listitem
><para
><literal
>kate-script</literal
> [requerit]: Aquesta cadena de text ha d'aparèixer a la primera línia del fitxer <filename
>*.js</filename
>, en cas contrari el &kappname; omet l'script. </para
></listitem>
<listitem
><para
><literal
>name</literal
> [requerit]: Aquest és el nom del sagnat que apareix al menú <menuchoice
><guimenu
>Eines</guimenu
><guimenuitem
>Sagnat</guimenuitem
></menuchoice
> i en el diàleg de configuració. </para
></listitem>
<listitem
><para
><literal
>author</literal
> [opcional]: El nom de l'autor i la informació de contacte. </para
></listitem>
<listitem
><para
><literal
>license</literal
> [opcional]: La forma curta de la llicència, com ara BSD o LGPLv3. </para
></listitem>
<listitem
><para
><literal
>revision</literal
> [requerit]: La revisió de l'script. Aquest número ha de ser major cada vegada que l'script es modifica. </para
></listitem>
<listitem
><para
><literal
>kate-version</literal
> [requerit]: La versió mínima requerida per &kappname;. </para
></listitem>
<listitem
><para
><literal
>required-syntax-style</literal
> [opcional]: Llista separada per comes dels estils de ressaltat de la sintaxi. Això és important per als sagnats que es basen en la informació de ressaltat específica en el document. Si s'especifica un estil de sintaxi requerit, el sagnat només estarà disponible amb el ressaltat actiu apropiat. Això evita «comportament sense definir» causat per l'ús del sagnat sense l'esquema de ressaltat esperat. Per exemple, el sagnat de Ruby en fa ús en els fitxers <filename
>ruby.js</filename
> i <filename
>ruby.xml</filename
>. </para
></listitem>
<listitem
><para
><literal
>indent-languages</literal
> [opcional]: Llista separada per comes dels estils de sintaxi que pot sagnar correctament, &pex;: c++, java. </para
></listitem>
<listitem
><para
><literal
>priority</literal
> [opcional]: Si els diversos sagnats són adequats per a un determinat fitxer ressaltat, la prioritat decideix quin sagnat és triat com sagnat per omissió. </para
></listitem>
<listitem
><para
><literal
>i18n-catalog</literal
> [opcional]: Catàleg de missatges addicionals (fitxer <literal
>po</literal
>) carregat per a la traducció de sagnats de terceres parts.</para
></listitem>
</itemizedlist>
</para>

<para
>&kappname; llegeix tots els parells de la forma «<replaceable
>clau</replaceable
>:<replaceable
>valor</replaceable
>» fins que no es trobin més dos punts. Això implica que la capçalera pot contenir text arbitrari, com una llicència, com es mostra en l'exemple. </para>

</sect3>

<sect3 id="dev-scripting-indentation-body">
<title
>El codi font del sagnat</title>
<para
>Després d'haver especificat la capçalera aquesta secció explica com funciona la creació d'scripts de sagnat. L'esquelet bàsic del cos s'assembla a això: <programlisting>
// es necessiten les biblioteques «js» de katepart, per exemple, «range.js»
// si utilitzeu «Range»
require ("range.js");
  
triggerCharacters = "{}/:;";
function indent(line, indentWidth, ch)
{
    // crida per a cada línia nova (ch == «\n») i tots els caràcters s'especifiquen en
    // la variable global triggerCharacters. Quan es crida <menuchoice
><guimenu
>Eines</guimenu
><guimenuitem
>Alinea</guimenuitem
></menuchoice>
    // la variable ch és buidada, &ead;, ch == «».
    //
    // Veure també: L'API per a la creació d'scripts
    return -2;
}
</programlisting
> La funció <function
>indent()</function
> té tres paràmetres: <itemizedlist
> <listitem
><para
><literal
>line</literal
>: La línia que ha d'estar amb sagnat.</para
></listitem
> <listitem
><para
><literal
>indentWidth</literal
>: L'amplada del sagnat en quantitat d'espais.</para
></listitem
> <listitem
><para
><literal
>ch</literal
>: o bé un caràcter de línia nova (<literal
>ch == '\n'</literal
>),el caràcter de tall especificat en <literal
>triggerCharacters</literal
> o buida si l'usuari invoca l'acció <menuchoice
><guimenu
>Eines</guimenu
><guimenuitem
>Alinea</guimenuitem
></menuchoice
>.</para
></listitem
> </itemizedlist
> El valor retornat de la funció <function
>indent()</function
> especifica com se sagna la línia. Si el valor retornat és un nombre enter simple, aquest s'interpreta de la següent manera: <itemizedlist
> <listitem
><para
>El valor retornat <literal
>-2</literal
>: No fa res.</para
></listitem
> <listitem
><para
>El valor retornat <literal
>-1</literal
>: Es manté el sagnat (cerca la línia anterior que no estigui en blanc).</para
></listitem
> <listitem
><para
>El valor retornat <literal
> 0</literal
>: Un número &gt;= 0 especifica la profunditat del sagnat en nombre d'espais.</para
></listitem
> </itemizedlist
> Alternativament, un conjunt de dos elements es poden retornar: <itemizedlist
> <listitem
><para
><literal
>return [ indent, align ];</literal
></para
></listitem
> </itemizedlist
> En aquest cas, el primer element és la profunditat de sagnat com anteriorment amb el mateix significat dels valors especials. No obstant, el segon element és un valor absolut que representa una columna d'«alineació». Si aquest valor és major que el valor de sagnat, la diferència representa un nombre d'espais a afegir després del sagnat del primer paràmetre. En cas contrari, el segon nombre serà ignorat. L'ús de tabulacions i espais per al sagnat sovint és referit com «mode mixt». </para>

<para
>Considerem el següent exemple: Suposem que s'usen tabulacions per a sagnar, i l'amplada de la tabulació és 4. Aquí, &lt;tab&gt; representa una tabulació i «.» un espai: <programlisting>
1: &lt;tab&gt;&lt;tab&gt;foobar("hola",
2: &lt;tab&gt;&lt;tab&gt;......."món");
</programlisting
> Quan se sagna la línia 2, la funció <function
>indent()</function
> retorna [8, 15]. Com a resultat, s'insereixen dues tabulacions per a sagnar fins a la columna 8, i s'afegeixen 7 espais per alinear el segon paràmetre a la primera, de manera que quedi alineat si el fitxer es veu amb una amplada de tabulació diferent. </para>

<para
>Una instal·lació per omissió de KDE ens dóna el &kappname; amb diversos sagnats. El corresponent codi font de JavaScript d'origen pot trobar-se en <filename
>$KDEDIR/share/apps/katepart/script/indentation</filename
>. </para>

<para
>El desenvolupament d'un sagnat requereix tornar a carregar els scripts per veure si els canvis es comporten adequadament. En comptes de reiniciar l'aplicació, simplement canvieu a la línia d'ordres i crideu l'ordre <command
>reload-scripts</command
>. </para>

<para
>Si desenvolupeu scripts útils, si us plau, considereu el contribuir al projecte &kappname; <ulink url="mailto:kwrite-devel@kde.org"
>posant-vos en contacte amb la llista de correu</ulink
>. </para>

</sect3>
</sect2>

<sect2 id="dev-scripting-command-line">
<title
>Els scripts de la línia d'ordres</title>

<para
>Com és difícil satisfer les necessitats de tothom, el &kappname; suporta unes quantes eines d'ajuda per a la manipulació ràpida de text a través de la <link linkend="advanced-editing-tools-commandline"
>línia d'ordres encastada</link
>. Per exemple, l'ordre <command
>sort</command
> s'implementa com script. En aquesta secció s'explica com crear fitxers <filename
>*.js</filename
> per estendre el &kappname; amb scripts d'ajuda arbitrària. </para>

<para
>Scripts de línia d'ordres es troben en la mateixa carpeta que els scripts de sagnat. Així que com a primer pas, creeu un nou fitxer <filename
>*.js</filename
> anomenat <filename
>myutils.js</filename
> a la carpeta d'inici local <filename
>$KDEHOME/share/apps/katepart/script/commands</filename
>. </para>

<sect3 id="dev-scripting-command-line-header">
<title
>La capçalera de l'script de línia d'ordres</title>
<para
>La capçalera de cada script de línia d'ordres està integrada en un comentari i és en la forma següent <programlisting>
/* kate-script
 * author: Nom exemple &lt;nom.exemple@alguna.adreça.org&gt;
 * license: BSD
 * revision: 1
 * kate-version: 3.4
 * functions: sort, format-paragraph
 * i18n-catalog: mycatalog
 *
 * Una línia sense dos punts «:» atura l'anàlisi de la capçalera. És a dir,
 * podeu afegir text opcional com una llicència detallada.
 */
</programlisting
> Cada entrada s'explica en detall tot seguit: <itemizedlist>
<listitem
><para
><literal
>kate-script</literal
> [requerit]: Aquesta cadena de text ha d'aparèixer a la primera línia del fitxer <filename
>*.js</filename
>, en cas contrari el &kappname; omet l'script.</para
></listitem>
<listitem
><para
><literal
>author</literal
> [opcional]: El nom de l'autor i la informació de contacte.</para
></listitem>
<listitem
><para
><literal
>license</literal
> [opcional]: La forma curta de la llicència, com ara BSD o LGPLv3.</para
></listitem>
<listitem
><para
><literal
>revision</literal
> [requerit]: La revisió de l'script. Aquest número ha de ser major cada vegada que l'script es modifica.</para
></listitem>
<listitem
><para
><literal
>kate-version</literal
> [requerit]: La versió mínima requerida per &kappname;.</para
></listitem>
<listitem
><para
><literal
>functions</literal
> [requerit]: Llista separada per comes de les ordres en l'script.</para
></listitem>
<listitem
><para
><literal
>i18n-catalog</literal
> [opcional]: Catàleg de missatges addicionals (fitxer <literal
>po</literal
>) carregat per a la traducció d'scripts de terceres parts.</para
></listitem>
</itemizedlist>
</para>

<para
>&kappname; llegeix tots els parells de la forma «<replaceable
>clau</replaceable
>:<replaceable
>valor</replaceable
>» fins que no es trobin més dos punts. Això implica que la capçalera pot contenir text arbitrari, com una llicència, com es mostra en l'exemple. El valor de les funcions clau és una llista separada per comes de les ordres en la línia d'ordres. Això significa que un únic script conté una quantitat arbitrària d'ordres de la línia d'ordres. Cada funció està disponible a través de <link linkend="advanced-editing-tools-commandline"
>la línia d'ordres encastada</link
> de &kappname;. </para>
</sect3>

<sect3 id="dev-scripting-command-line-body">
<title
>El codi font de l'script</title>

<para
>Totes les funcions especificades a la capçalera s'han d'implementar a l'script. Per exemple, el fitxer d'script en l'exemple anterior necessita implementar les dues funcions <command
>sort</command
> i <command
>format-paragraph</command
>. Totes les funcions tenen la següent sintaxi: <programlisting
>// es necessiten les biblioteques «js» de katepart, per exemple, «range.js»
// si utilitzeu «Range»
require ("range.js");

function &lt;nom&gt;(arg1, arg2...)
{
    // ... implementació, veure també: L'API per a la creació d'scripts.
}
</programlisting>
</para>

<para
>Els arguments en la línia d'ordres es passen a la funció com <parameter
>arg1</parameter
>, <parameter
>arg2</parameter
>, &etc; Per tal de proveir documentació per a cada ordre, simplement implementeu la funció «<function
>help</function
>» de la següent manera: <programlisting>
{
    if (cmd == "sort") {
        return i18n("Ordena el text seleccionat.");
    } else if (cmd == "...") {
        // ...
    }
}
</programlisting
> Executar <command
>help sort</command
> en la línia d'ordres crida a aquesta funció d'ajuda amb l'argument <parameter
>cmd</parameter
> establert en l'ordre donada, &ead;, <parameter
>cmd == "sort"</parameter
>. &kappname; presentarà el text retornat com documentació per a l'usuari. Assegureu-vos de <link linkend="dev-scripting-api-i18n"
>traduir les cadenes</link
>. </para>

<sect4 id="dev-scripting-command-line-shortcuts">
<title
>Vincular dreceres</title>
<para
>Per tal de poder assignar dreceres, l'script ha de proporcionar una funció anomenada <literal
>action</literal
> de la següent manera: <programlisting>
function action(cmd)
{
    var a = new Object();
    if (cmd == "sort") {
        a.text = i18n("Ordena el text seleccionat");
        a.icon = "";
        a.category = "";
        a.interactive = false;
        a.shortcut = "";
    } else if (cmd == "moveLinesDown") {
        // El mateix per a la següent acció
    }
    return a;
}
</programlisting
> El paràmetre <literal
>cmd</literal
> de la funció específica l'ordre per al qual es demana una drecera. Hi ha diversos camps que heu d'especificar en l'objecte javascript retornat: <itemizedlist>
<listitem
><para
><literal
>a.text</literal
> [requerit]: El text apareix en el menú <menuchoice
><guimenu
>Eines</guimenu
><guisubmenu
>Scripts</guisubmenu
></menuchoice
>. Assegureu-vos d'utilitzar <literal
>i18n</literal
> per a la traducció.</para
></listitem>
<listitem
><para
><literal
>a.icon</literal
> [opcional]: La icona apareix al costat del text en el menú. Aquí es poden usar tots els noms d'icones del KDE.</para
></listitem>
<listitem
><para
><literal
>a.category</literal
> [opcional]: Si s'especifica una categoria, l'script apareixerà en un submenú. Assegureu-vos d'utilitzar <literal
>i18n</literal
> per a la traducció.</para
></listitem>
<listitem
><para
><literal
>a.interactive</literal
> [opcional]: Si l'script necessita usar l'entrada, establiu-ho a <literal
>true</literal
> (vertader).</para
></listitem>
<listitem
><para
><literal
>a.shortcut</literal
> [opcional]: La drecera que aquí és la drecera per omissió. Exemple: Ctrl+Alt+t. Per a més detalls consulteu la <ulink url="http://qt-project.org/doc/qt-4.8/qt.html#Key-enum"
>Documentació de Qt</ulink
>.</para
></listitem>
</itemizedlist>
</para>


<para
>El desenvolupament d'un script de línia d'ordres requereix tornar a carregar els scripts per veure si els canvis es comporten adequadament. En comptes de reiniciar l'aplicació, simplement canvieu a la línia d'ordres i crideu l'ordre <command
>reload-scripts</command
>. </para>

<para
>Si desenvolupeu scripts útils, si us plau, considereu el contribuir al projecte &kappname; <ulink url="mailto:kwrite-devel@kde.org"
>posant-vos en contacte amb la llista de correu</ulink
>. </para>

</sect4>
</sect3>
</sect2>

<sect2 id="dev-scripting-api">
<title
>L'API per a la creació d'scripts</title>

<para
>L'API per a la creació d'scripts que es presenta aquí està disponible en tots els scripts, &pex;, els scripts d'exemple de sagnat i ordres de línia d'ordres. Els <classname
>Cursor</classname
> i <classname
>Range</classname
> són proporcionats pels fitxers de la biblioteca a <filename
>$KDEDIR/share/apps/katepart/libraries</filename
>. Si voleu utilitzar-los en el seu vostre script, serà necessari utilitzar algunes de les funcions <classname
>Document</classname
> o <classname
>View</classname
>, si us plau, afegiu la biblioteca necessària mitjançant: <programlisting
>// es necessiten les biblioteques «js» de katepart, per exemple, «range.js»
// si utilitzeu «Range»
require ("range.js");
</programlisting>
</para>

<para
>Per estendre la norma de l'API per a la creació d'scripts amb les funcions i prototips propis n'hi ha prou amb crear un nou fitxer a la carpeta de configuració local del KDE <filename
>$KDEHOME/share/apps/katepart/libraries</filename
> i incloure'l en l'script utilitzant: <programlisting
>require ("nom_script.js");
</programlisting>

</para>

<para
>Per estendre els prototips com <classname
>Cursor</classname
> o <classname
>Range</classname
>, la manera més recomanable és <emphasis
>no</emphasis
> modificar els fitxers <filename
>*.js</filename
> globals. En el seu lloc, canvieu el prototip <classname
>Cursor</classname
> en JavaScript després afegiu el <filename
>cursor.js</filename
> al vostre script mitjançant <literal
>require</literal
>. </para>

<sect3 id="dev-scripting-api-prototypes">
<title
>Cursors i intervals</title>

<para
>Com &kappname; és un editor de text, tota l'API per a la creació d'scripts es basa en els cursors i els intervals sempre que sigui possible. Un Cursor és una simple <literal
>(line, column)</literal
> que representa una posició del text en el document. Un «Range» s'estén pel text des de la posició del cursor fins a una posició final del cursor. L'API s'explica amb detall en les següents seccions. </para>

<sect4 id="dev-scripting-api-cursors">
<title
>El prototip de «Cursor»</title>

<variablelist
><varlistentry>
<term
><synopsis
>Cursor();
</synopsis
></term>
<listitem
><para
>Constructor. Retorna un cursor a la posició <literal
>(0, 0)</literal
>.</para>
<para
>Exemple: <function
>var cursor = new Cursor();</function
> </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>Cursor(<parameter
>int <replaceable
>línia</replaceable
></parameter
>, <parameter
>int <replaceable
>columna</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Constructor. Retorna un cursor a la posició (línia, columna). </para>
<para
>Exemple: <function
>var cursor = new Cursor(3, 42);</function
> </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>Cursor(<parameter
>Cursor <replaceable
>altra</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>El constructor de còpia. Retorna una còpia del cursor <replaceable
>altra</replaceable
>. </para>
<para
>Exemple: <function
>var copy = new Cursor(altra);</function
> </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>Cursor Cursor.clone();
</synopsis
></term>
<listitem
><para
>Retorna una còpia del cursor.</para>
<para
>Exemple: <function
>var clone = cursor.clone();</function
> </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>Cursor.setPosition(<parameter
>int <replaceable
>línia</replaceable
></parameter
>, <parameter
>int <replaceable
>columna</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Estableix la posició del cursor a <replaceable
>línia</replaceable
> i <replaceable
>columna</replaceable
>.</para>
<para
>Des de: KDE 4.11 </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool Cursor.isValid();
</synopsis
></term>
<listitem
><para
>Comproveu si el cursor és vàlid. El cursor no és vàlid, si la línia i/o la columna s'estableix a <literal
>-1</literal
>. </para>
<para
>Exemple: <function
>var valid = cursor.isValid();</function
> </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>Cursor Cursor.invalid();
</synopsis
></term>
<listitem
><para
>Retorna un nou cursor no vàlid situat a <literal
>(-1, -1)</literal
>. </para>
<para
>Exemple: <function
>var invalidCursor = cursor.invalid();</function
> </para
></listitem>
</varlistentry>

<varlistentry>
<term
><synopsis
>int Cursor.compareTo(<parameter
>Cursor <replaceable
>altra</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Compara aquest cursor al cursor <replaceable
>altra</replaceable
>. Retorna <itemizedlist>
<listitem
><para
><literal
>-1</literal
>, si el cursor està situat abans del cursor <replaceable
>altra</replaceable
>,</para
></listitem>
<listitem
><para
><literal
>0</literal
>, si tots dos cursors són iguals i</para
></listitem>
<listitem
><para
><literal
>+1</literal
>, si el cursor està situat després del cursor <replaceable
>altra</replaceable
>.</para
></listitem>
</itemizedlist>
</para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool Cursor.equals(<parameter
>Cursor <replaceable
>altra</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna <literal
>true</literal
> (vertader), si aquest cursor i el cursor <replaceable
>altra</replaceable
> són iguals, en cas contrari retornarà <literal
>false</literal
> (fals). </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String Cursor.toString();
</synopsis
></term>
<listitem
><para
>Retorna el cursor com una cadena de la forma <quote
><literal
>Cursor(line, column)</literal
></quote
>. </para
></listitem>
</varlistentry
></variablelist>

</sect4>


<sect4 id="dev-scripting-api-ranges">
<title
>El prototip «Range»</title>

<variablelist
><varlistentry>
<term
><synopsis
>Range();
</synopsis
></term>
<listitem
><para
>El constructor. Crida <literal
>new Range()</literal
> retornant un interval (0, 0) - (0, 0). </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>Range(<parameter
>Cursor <replaceable
>inici</replaceable
></parameter
>, <parameter
>Cursor <replaceable
>final</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>El constructor. Crida <literal
>new Range(<replaceable
>inici</replaceable
>, <replaceable
>final</replaceable
>)</literal
> retorna l'interval (<replaceable
>inici</replaceable
>, <replaceable
>final</replaceable
>). </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>Range(<parameter
>int <replaceable
>líniaInici</replaceable
></parameter
>, <parameter
>int <replaceable
>columnaInici</replaceable
></parameter
>, <parameter
>int <replaceable
>líniaFinal</replaceable
></parameter
>, <parameter
>int <replaceable
>columnaFinal</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>El constructor. Crida <literal
>new Range(<replaceable
>líniaInici</replaceable
>, <replaceable
>columnaInici</replaceable
>, <replaceable
>líniaFinal</replaceable
>, <replaceable
>columnaFinal</replaceable
>)</literal
> retorna l'interval de (<replaceable
>líniaInici</replaceable
>, <replaceable
>columnaInici</replaceable
>) a (<replaceable
>líniaFinal</replaceable
>, <replaceable
>columnaFinal</replaceable
>). </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>Range(<parameter
>Range <replaceable
>altra</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>El constructor de còpia. Retorna una còpia de l'interval <replaceable
>altra</replaceable
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>Range Range.clone();
</synopsis
></term>
<listitem
><para
>Retorna una còpia de l'interval rang. </para>
<para
>Exemple: <function
>var clone = range.clone();</function
> </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool Range.isEmpty();
</synopsis
></term>
<listitem
><para
>Retorna <literal
>true</literal
> (vertader), si inici i final del cursor són iguals. </para>
<para
>Exemple: <function
>var empty = range.isEmpty();</function
> </para>
<para
>Des de: KDE 4.11 </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool Range.isValid();
</synopsis
></term>
<listitem
><para
>Retorna <literal
>true</literal
> (vertader), si inici i final del cursor són vàlids, en cas contrari retornarà <literal
>false</literal
> (fals). </para>
<para
>Exemple: <function
>var valid = range.isValid();</function
> </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>Range Range.invalid();
</synopsis
></term>
<listitem
><para
>Retorna l'interval de (-1, -1) a (-1, -1). </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool Range.contains(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna <literal
>true</literal
> (vertader) si aquest interval conté la posició de cursor, en cas contrari retornarà <literal
>false</literal
> (fals). </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool Range.contains(<parameter
>Range <replaceable
>altra</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna <literal
>true</literal
> (vertader), si aquest interval conté l'interval <replaceable
>altra</replaceable
>, en cas contrari retornarà <literal
>false</literal
> (fals). </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool Range.containsColumn(<parameter
>int <replaceable
>columna</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna <literal
>true</literal
> (vertader), si <replaceable
>columna</replaceable
> està en l'interval obert medi <literal
>[start.column, end.column)</literal
>, en cas contrari retornarà <literal
>false</literal
> (fals). </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool Range.containsLine(<parameter
>int <replaceable
>línia</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna <literal
>true</literal
> (vertader), si <replaceable
>línia</replaceable
> està en l'interval obert medi <literal
>[start.line, end.line)</literal
>, en cas contrari retornarà <literal
>false</literal
> (fals). </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool Range.overlaps(<parameter
>Range <replaceable
>altra</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna <literal
>true</literal
> (vertader), si aquest interval i l'interval <replaceable
>altra</replaceable
> comparteixen una regió comuna, en cas contrari retornarà <literal
>false</literal
> (fals). </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool Range.overlapsLine(<parameter
>int <replaceable
>línia</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna <literal
>true</literal
> (vertader), si <replaceable
>línia</replaceable
> està en l'interval <literal
>[start.line, end.line]</literal
>, en cas contrari retornarà <literal
>false</literal
> (fals). </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool Range.overlapsColumn(<parameter
>int <replaceable
>columna</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna <literal
>true</literal
> (vertader), si <replaceable
>columna</replaceable
> està en l'interval <literal
>[start.column, end.column]</literal
>, en cas contrari retornarà <literal
>false</literal
> (fals). </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool Range.onSingleLine();
</synopsis
></term>
<listitem
><para
>Retorna <literal
>true</literal
> (vertader), si l'interval comença i finalitza a la mateixa línia, &ead; si <replaceable
>Línia.comença.interval == Línia.finalitza.interval</replaceable
>. </para>
<para
>Des de: KDE 4.9 </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool Range.equals(<parameter
>Range <replaceable
>altra</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna <literal
>true</literal
> (vertader), si aquest interval i l'interval de <replaceable
>altra</replaceable
> són iguals, en cas contrari retornarà <literal
>false</literal
> (fals). </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String Range.toString();
</synopsis
></term>
<listitem
><para
>Retorna l'interval com una cadena de la forma «<literal
>Rang(Cursor(line, column), Cursor(line, column))</literal
>». </para
></listitem>
</varlistentry
></variablelist>

</sect4>
</sect3>

<sect3 id="dev-scripting-api-global">
<title
>Funcions globals</title>
<para
>Aquesta secció llista totes les funcions globals.</para>


<sect4 id="dev-scripting-api-includes">
<title
>Llegir i incloure fitxers</title>

<variablelist
><varlistentry>
<term
><synopsis
>String read(<parameter
>String <replaceable
>fitxer</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Cercarà el <replaceable
>fitxer</replaceable
> donat en relació al directori <literal
>katepart/script/files</literal
> i retorna el seu contingut com una cadena. </para
></listitem>
</varlistentry
></variablelist>

<variablelist
><varlistentry>
<term
><synopsis
>void require(<parameter
>String <replaceable
>fitxer</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Cercarà el <replaceable
>fitxer</replaceable
> donat en relació al directori <literal
>katepart/script/libraries</literal
> i l'avaluarà. <literal
>require</literal
> està internament protegit contra inclusions múltiples del mateix <replaceable
>fitxer</replaceable
>. </para>
<para
>Des de: KDE 4.10 </para>
</listitem>
</varlistentry
></variablelist>

</sect4>

<sect4 id="dev-scripting-api-debug">
<title
>Depuració</title>

<variablelist
><varlistentry>
<term
><synopsis
>void debug(<parameter
>String <replaceable
>text</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Imprimeix <replaceable
>text</replaceable
> a <literal
>stdout</literal
> a la consola de llançament de l'aplicació. </para
></listitem>
</varlistentry
></variablelist>

</sect4>

<sect4 id="dev-scripting-api-i18n">
<title
>Traducció</title>

<para
>Per tal de donar suport a la completa localització, hi ha diverses funcions per convertir cadenes en els scripts, anomenades <literal
>i18n</literal
>, <literal
>i18nc</literal
>, <literal
>i18np</literal
> i <literal
>i18ncp</literal
>. Aquestes funcions es comporten exactament com les <ulink url="http://techbase.kde.org/Development/Tutorials/Localization/i18n"
>funcions de traducció del KDE</ulink
>. </para>

<para
>Les funcions de traducció tradueixen les cadenes embolcallades a través del sistema de traducció del &kde; per a l'idioma utilitzat en l'aplicació. Les cadenes als scripts es desenvolupen a les fonts oficials de &kappname; i s'extrauen de forma automàtica i traduïble. En altres paraules, com a desenvolupador de &kappname; no us haureu de preocupar per l'extracció de missatges i la traducció. No obstant, per als scripts desenvolupats per terceres parts fora del &kde;, haureu d'extreure i traduir els missatges vosaltres mateixos. Juntament amb els vostres scripts també haureu de distribuir un catàleg de traducció, que inclogui totes les cadenes traduïbles. A més, a la capçalera del vostre script haureu d'establir explícitament el catàleg a carregar especificant <literal
>i18n-catàleg</literal
>. </para>

<variablelist
><varlistentry>
<term
><synopsis
>void i18n(<parameter
>String <replaceable
>text</replaceable
></parameter
>, <replaceable
>arg1</replaceable
>...);
</synopsis
></term>
<listitem
><para
>Tradueix <replaceable
>text</replaceable
> a la llengua utilitzada per l'aplicació. Els arguments <replaceable
>arg1</replaceable
>..., són opcionals i s'utilitzen per substituir els arguments <literal
>%1</literal
>, <literal
>%2</literal
>, &etc;</para
></listitem>
</varlistentry>

<varlistentry>
<term
><synopsis
>void i18nc(<parameter
>String <replaceable
>context</replaceable
></parameter
>, <parameter
>String <replaceable
>text</replaceable
></parameter
>, <replaceable
>arg1</replaceable
>...);
</synopsis
></term>
<listitem
><para
>Tradueix <replaceable
>text</replaceable
> a la llengua utilitzada per l'aplicació. A més, la cadena <replaceable
>context</replaceable
> és visible als traductors perquè puguin oferir una millor traducció. Els arguments <replaceable
>arg1</replaceable
>..., són opcionals i s'utilitzen per substituir els arguments <literal
>%1</literal
>, <literal
>%2</literal
>, &etc;</para
></listitem>
</varlistentry>

<varlistentry>
<term
><synopsis
>void i18np(<parameter
>String <replaceable
>singular</replaceable
></parameter
>, <parameter
>String <replaceable
>plural</replaceable
></parameter
>, <parameter
>int <replaceable
>número</replaceable
></parameter
>, <replaceable
>arg1</replaceable
>...);
</synopsis
></term>
<listitem
><para
>Tradueix <replaceable
>singular</replaceable
> o <replaceable
>plural</replaceable
> a la llengua utilitzada per l'aplicació, en funció del <replaceable
>número</replaceable
> indicat. Els arguments <replaceable
>arg1</replaceable
>..., són opcionals i s'utilitzen per substituir els arguments <literal
>%1</literal
>, <literal
>%2</literal
>, &etc;</para
></listitem>
</varlistentry>

<varlistentry>
<term
><synopsis
>void i18ncp(<parameter
>String <replaceable
>context</replaceable
></parameter
>, <parameter
>String <replaceable
>singular</replaceable
></parameter
>, <parameter
>String <replaceable
>plural</replaceable
></parameter
>, <parameter
>int <replaceable
>número</replaceable
></parameter
>, <replaceable
>arg1</replaceable
>...);
</synopsis
></term>
<listitem
><para
>Tradueix <replaceable
>singular</replaceable
> o <replaceable
>plural</replaceable
> a la llengua utilitzada per l'aplicació, en funció del <replaceable
>número</replaceable
> indicat. A més, la cadena <replaceable
>context</replaceable
> és visible als traductors perquè puguin oferir una millor traducció. Els arguments <replaceable
>arg1</replaceable
>..., són opcionals i s'utilitzen per substituir els arguments <literal
>%1</literal
>, <literal
>%2</literal
>, &etc;</para
></listitem>
</varlistentry
></variablelist>

</sect4>
</sect3>

<sect3 id="dev-scripting-api-view">
<title
>L'API de «View»</title>
<para
>Cada vegada que s'executa un script, si no hi ha una variable global «<literal
>view</literal
>» que representa la vista actual de l'editor actiu. La següent és una llista de totes les funcions «View» disponibles. <variablelist
><varlistentry>
<term
><synopsis
><function
>Cursor view.cursorPosition()</function
>
</synopsis
></term>
<listitem
><para
>Retorna la posició actual del cursor en la vista.</para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>void view.setCursorPosition(<parameter
>int <replaceable
>línia</replaceable
></parameter
>, <parameter
>int <replaceable
>columna</replaceable
></parameter
>);
void view.setCursorPosition(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Estableix la posició actual del cursor a (línia, columna) o el cursor indicat. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>Cursor view.virtualCursorPosition();
</synopsis
></term>
<listitem
><para
>Retorna la posició del cursor virtual amb cada tabulació comptant la corresponent quantitat d'espais depenent de l'amplada de la tabulació actual. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>void view.setVirtualCursorPosition(<parameter
>int <replaceable
>línia</replaceable
></parameter
>, <parameter
>int <replaceable
>column</replaceable
></parameter
>);
void view.setVirtualCursorPosition(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Estableix la posició actual del cursor virtual (línia, columna) o el cursor indicat. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String view.selectedText();
</synopsis
></term>
<listitem
><para
>Retorna el text seleccionat. Si no hi ha text seleccionat, la cadena retornada estarà buida. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool view.hasSelection();
</synopsis
></term>
<listitem
><para
>Retorna <literal
>true</literal
> (vertader), si la vista conté el text seleccionat, en cas contrari retornarà <literal
>false</literal
> (fals). </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>Range view.selection();
</synopsis
></term>
<listitem
><para
>Retorna l'interval de text seleccionat. L'interval retornat no serà vàlid si no hi ha text seleccionat. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>void view.setSelection(<parameter
>Range <replaceable
>rang</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Estableix el text seleccionat a l'interval indicat. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>void view.removeSelectedText();
</synopsis
></term>
<listitem
><para
>Elimina el text seleccionat. Si la vista no té cap text seleccionat, no fa res. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>void view.selectAll();
</synopsis
></term>
<listitem
><para
>Selecciona el text sencer en el document. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>void view.clearSelection();
</synopsis
></term>
<listitem
><para
>Neteja la selecció de text sense esborrar-lo. </para
></listitem>
</varlistentry
></variablelist>
</para>
</sect3>

<sect3 id="dev-scripting-api-document">
<title
>L'API de «Document»</title>
<para
>Cada vegada que s'executa un script, si no hi ha una variable global «<literal
>document</literal
>» que representa el document actiu actual. La següent és una llista de totes les funcions de «Document» disponibles. <variablelist
><varlistentry>
<term
><synopsis
>String document.fileName();
</synopsis
></term>
<listitem
><para
>Retorna el nom de fitxer del document o una cadena buida per a la memòria cau de text sense desar. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String document.url();
</synopsis
></term>
<listitem
><para
>Retorna l'URL complet del document o una cadena buida per a la memòria cau de text sense desar. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String document.mimeType();
</synopsis
></term>
<listitem
><para
>Retorna el tipus mime del document o el tipus mime <literal
>application/octet-stream</literal
> si no es pot trobar un tipus mime adequat. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String document.encoding();
</synopsis
></term>
<listitem
><para
>Retorna la codificació usada actualment per a desar el fitxer. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><synopsis
>String document.highlightingMode();
</synopsis
></term>
<listitem
><para
>Retorna el mode de ressaltat global usat per a tot el document. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><synopsis
>String document.highlightingModeAt(<parameter
>Cursor <replaceable
>pos</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna el mode de ressaltat usat a la posició indicada en el document. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><synopsis
>Array document.embeddedHighlightingModes();
</synopsis
></term>
<listitem
><para
>Retorna una cadena de modes de ressaltat inclosos en aquest document. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><synopsis
>bool document.isModified();
</synopsis
></term>
<listitem
><para
>Retorna <literal
>true</literal
> (vertader), si el document conté canvis sense desar (modificat), en cas contrari retornarà <literal
>false</literal
> (fals). </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String document.text();
</synopsis
></term>
<listitem
><para
>Retorna el contingut complet del document en una cadena de text única. Els salts de línia estan marcats amb el caràcter de nova línia «<literal
>\n</literal
>». </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String document.text(<parameter
>int <replaceable
>desdeLínia</replaceable
></parameter
>, <parameter
>int <replaceable
>desdeColumna</replaceable
></parameter
>, <parameter
>int <replaceable
>alaLínia</replaceable
></parameter
>, <parameter
>int <replaceable
>alaColumna</replaceable
></parameter
>);
String document.text(<parameter
>Cursor <replaceable
>desde</replaceable
></parameter
>, <parameter
>Cursor <replaceable
>a</replaceable
></parameter
>);
String document.text(<parameter
>Range <replaceable
>rang</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna el text a l'interval donat. Es recomana utilitzar el cursor i la versió basada en l'interval per a una millor lectura del codi font. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String document.line(<parameter
>int <replaceable
>línia</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna la línia de text donada com a cadena. La cadena estarà buida si la línia demanada està fora de l'interval. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String document.wordAt(<parameter
>int <replaceable
>línia</replaceable
></parameter
>, <parameter
>int <replaceable
>columna</replaceable
></parameter
>);
String document.wordAt(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna la paraula a la posició del cursor donada. </para
></listitem>
</varlistentry>


<varlistentry>
<term>
<synopsis
>Range document.wordRangeAt(<parameter
>int <replaceable
>línia</replaceable
></parameter
>, <parameter
>int <replaceable
>columna</replaceable
></parameter
>);
Range document.wordRangeAt(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis>
</term>
<listitem
><para
>Retorna l'interval de la paraula a la posició del cursor donada. L'interval retornat no serà vàlid (veure Range.isValid()), si la posició del text és després del final d'una línia. Si no hi ha paraula al cursor donat, es retornarà un interval buit. </para>
<para
>Des de: KDE 4.9 </para>
</listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String document.charAt(<parameter
>int <replaceable
>línia</replaceable
></parameter
>, <parameter
>int <replaceable
>columna</replaceable
></parameter
>);
String document.charAt(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna el caràcter a la posició del cursor donada. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String document.firstChar(<parameter
>int <replaceable
>línia</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna el primer caràcter en la <replaceable
>línia</replaceable
> donada que no és un espai en blanc. El primer caràcter és a la columna 0. Si la línia està buida o només conté espais en blanc, la cadena retornada estarà buida. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String document.lastChar(<parameter
>int <replaceable
>línia</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna l'últim caràcter de la <replaceable
>línia</replaceable
> donada que no és un espai en blanc. Si la línia està buida o només conté espais en blanc, la cadena retornada estarà buida. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.isSpace(<parameter
>int <replaceable
>línia</replaceable
></parameter
>, <parameter
>int <replaceable
>columna</replaceable
></parameter
>);
bool document.isSpace(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna <literal
>true</literal
> (vertader), si el caràcter a la posició del cursor donada és un espai en blanc, en cas contrari retornarà <literal
>false</literal
> (fals). </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.matchesAt(<parameter
>int <replaceable
>línia</replaceable
></parameter
>, <parameter
>int <replaceable
>columna</replaceable
></parameter
>, <parameter
>String <replaceable
>text</replaceable
></parameter
>);
bool document.matchesAt(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>, <parameter
>String <replaceable
>text</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna <literal
>true</literal
> (vertader), si el <replaceable
>text</replaceable
> donat coincideix a la posició del cursor corresponent, en cas contrari retornarà <literal
>false</literal
> (fals). </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.startsWith(<parameter
>int <replaceable
>línia</replaceable
></parameter
>, <parameter
>String <replaceable
>text</replaceable
></parameter
>, <parameter
>bool <replaceable
>skipWhiteSpaces</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna <literal
>true</literal
> (vertader), si la línia comença amb <replaceable
>text</replaceable
>, en cas contrari retornarà <literal
>false</literal
> (fals). L'argument <replaceable
>skipWhiteSpaces</replaceable
> controla si s'han d'ometre els espais en blanc al davant. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.endsWith(<parameter
>int <replaceable
>línia</replaceable
></parameter
>, <parameter
>String <replaceable
>text</replaceable
></parameter
>, <parameter
>bool <replaceable
>skipWhiteSpaces</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna <literal
>true</literal
> (vertader), si la línia acaba amb <replaceable
>text</replaceable
>, en cas contrari retornarà <literal
>false</literal
> (fals). L'argument <replaceable
>skipWhiteSpaces</replaceable
> controla si s'han d'ometre els espais en blanc al darrere. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.setText(<parameter
>String <replaceable
>text</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Estableix el text a tot el document. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.clear();
</synopsis
></term>
<listitem
><para
>Esborra el text sencer en el document. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.truncate(<parameter
>int <replaceable
>línia</replaceable
></parameter
>, <parameter
>int <replaceable
>columna</replaceable
></parameter
>);
bool document.truncate(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Trunca la línia donada a la columna o la posició del cursor donada. Retorna <literal
>true</literal
> (vertader) en cas d'èxit, o <literal
>false</literal
> (fals) si la línia donada no forma part de l'interval document. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.insertText(<parameter
>int <replaceable
>línia</replaceable
></parameter
>, <parameter
>int <replaceable
>columna</replaceable
></parameter
>, <parameter
>String <replaceable
>text</replaceable
></parameter
>);
bool document.insertText(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>, <parameter
>String <replaceable
>text</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Insereix el <replaceable
>text</replaceable
> en la posició donada del cursor. Retorna <literal
>true</literal
> (vertader) en cas d'èxit, o <literal
>false</literal
> (fals), si el document està en mode de només lectura. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.removeText(<parameter
>int <replaceable
>desdeLínia</replaceable
></parameter
>, <parameter
>int <replaceable
>desdeColumna</replaceable
></parameter
>, <parameter
>int <replaceable
>alaLínia</replaceable
></parameter
>, <parameter
>int <replaceable
>alaColumna</replaceable
></parameter
>);
bool document.removeText(<parameter
>Cursor <replaceable
>desde</replaceable
></parameter
>, <parameter
>Cursor <replaceable
>a</replaceable
></parameter
>);
bool document.removeText(<parameter
>Range <replaceable
>rang</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Elimina el text dins de l'interval donat. Retorna <literal
>true</literal
> (vertader) en cas d'èxit, o <literal
>false</literal
> (fals), si el document està en mode de només lectura. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.insertLine(<parameter
>int <replaceable
>línia</replaceable
></parameter
>, <parameter
>String <replaceable
>text</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Insereix text en la línia donada. Retorna <literal
>true</literal
> (vertader) en cas d'èxit, o <literal
>false</literal
> (fals), si el document està en mode de només lectura o la línia no està a l'interval document. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.removeLine(<parameter
>int <replaceable
>línia</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Elimina la línia de text donada. Retorna <literal
>true</literal
> (vertader) en cas d'èxit, o <literal
>false</literal
> (fals), si el document està en mode de només lectura o la línia no està a l'interval document. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.wrapLine(<parameter
>int <replaceable
>línia</replaceable
></parameter
>, <parameter
>int <replaceable
>columna</replaceable
></parameter
>);
bool document.wrapLine(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Ajusta la línia en la posició del cursor donada. Retorna <literal
>true</literal
> (vertader) en cas d'èxit, o <literal
>false</literal
> (fals), &pex; si la línia &lt; 0. </para>
<para
>Des de: KDE 4.9 </para>
</listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>void document.joinLines(<parameter
>int <replaceable
>iniciLínia</replaceable
></parameter
>, <parameter
>int <replaceable
>finalLínia</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>S'uneix a les línies de <replaceable
>iniciLínia</replaceable
> a <replaceable
>finalLínia</replaceable
>. Dues línies de text successives sempre estan separades per un espai. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>int document.lines();
</synopsis
></term>
<listitem
><para
>Retorna la quantitat de línies en el document. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>int document.length();
</synopsis
></term>
<listitem
><para
>Retorna el nombre de caràcters en el document. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>int document.lineLength(<parameter
>int <replaceable
>línia</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna la longitud de la <replaceable
>línia</replaceable
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>void document.editBegin();
</synopsis
></term>
<listitem
><para
>Comença un grup d'edició per agrupar desfer/refer. Assegureu-vos de cridar sempre <function
>editEnd()</function
> tan aviat com crideu <function
>editBegin()</function
>. La crida <function
>editBegin()</function
> utilitza internament un comptador de referència, &ead;, aquesta crida es pot niar. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>void document.editEnd();
</synopsis
></term>
<listitem
><para
>Finalitza un grup d'edició. L'última crida de <function
>editEnd()</function
> (&ead;, una per a la primera crida de <function
>editBegin()</function
>) finalitza la passa d'edició. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>int document.firstColumn(<parameter
>int <replaceable
>línia</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna la primera columna que no està en blanc en la <replaceable
>línia</replaceable
> donada. Si només hi ha espais en blanc en la línia, el valor retornat serà <literal
>-1</literal
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>int document.lastColumn(<parameter
>int <replaceable
>línia</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna la darrera columna que no està en blanc en la <replaceable
>línia</replaceable
> donada. Si només hi ha espais en blanc en la línia, el valor retornat serà <literal
>-1</literal
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>int document.prevNonSpaceColumn(<parameter
>int <replaceable
>línia</replaceable
></parameter
>, <parameter
>int <replaceable
>columna</replaceable
></parameter
>);
int document.prevNonSpaceColumn(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna la columna no buida que conté caràcters no en blanc a partir de la posició donada del cursor i cercant cap enrere. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>int document.nextNonSpaceColumn(<parameter
>int <replaceable
>línia</replaceable
></parameter
>, <parameter
>int <replaceable
>columna</replaceable
></parameter
>);
int document.nextNonSpaceColumn(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna la columna no buida que conté caràcters no en blanc a partir de la posició donada del cursor i cercant cap endavant. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>int document.prevNonEmptyLine(<parameter
>int <replaceable
>línia</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna la línia següent no buida que conté caràcters no en blanc a la cerca cap enrere. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>int document.nextNonEmptyLine(<parameter
>int <replaceable
>línia</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna la línia següent no buida que conté caràcters no en blanc a la cerca cap endavant. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.isInWord(<parameter
>String <replaceable
>caràcter</replaceable
></parameter
>, <parameter
>int <replaceable
>atribut</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna <literal
>true</literal
> (vertader), si el <replaceable
>caràcter</replaceable
> donat amb l'<replaceable
>atribut</replaceable
> donat pot formar part d'una paraula, en cas contrari retornarà <literal
>false</literal
> (fals). </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.canBreakAt(<parameter
>String <replaceable
>caràcter</replaceable
></parameter
>, <parameter
>int <replaceable
>atribut</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna <literal
>true</literal
> (vertader), si el <replaceable
>caràcter</replaceable
> donat amb l'<replaceable
>atribut</replaceable
> donat és adequat com a embolcall d'una línia, en cas contrari retornarà <literal
>false</literal
> (fals). </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.canComment(<parameter
>int <replaceable
>iniciAtribut</replaceable
></parameter
>, <parameter
>int <replaceable
>finalAtribut</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna <literal
>true</literal
> (vertader), si un interval inicial i final amb els atributs donats es presten a ser descomentats, en cas contrari retornarà <literal
>false</literal
> (fals). </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String document.commentMarker(<parameter
>int <replaceable
>atribut</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna el marcador de comentari per als comentaris de línia única per a un <replaceable
>atribut</replaceable
> donat. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String document.commentStart(<parameter
>int <replaceable
>atribut</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna el marcador de comentari per al començament de comentaris de múltiples línies per a un <replaceable
>atribut</replaceable
> donat. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String document.commentEnd(<parameter
>int <replaceable
>atribut</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna el marcador de comentari per al final de comentaris de múltiples línies per a un <replaceable
>atribut</replaceable
> donat. </para
></listitem>
</varlistentry>



<varlistentry>
<term
><synopsis
>int document.attribute(<parameter
>int <replaceable
>línia</replaceable
></parameter
>, <parameter
>int <replaceable
>columna</replaceable
></parameter
>);
int document.attribute(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna l'atribut a la posició del cursor donada. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.isAttribute(<parameter
>int <replaceable
>línia</replaceable
></parameter
>, <parameter
>int <replaceable
>columna</replaceable
></parameter
>, <parameter
>int <replaceable
>atribut</replaceable
></parameter
>);
bool document.isAttribute(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>, <parameter
>int <replaceable
>atribut</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna <literal
>true</literal
> (vertader), si l'atribut a la posició del cursor és igual que l'<replaceable
>atribut</replaceable
>, en cas contrari retornarà <literal
>false</literal
> (fals). </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String document.attributeName(<parameter
>int <replaceable
>línia</replaceable
></parameter
>, <parameter
>int <replaceable
>columna</replaceable
></parameter
>);
String document.attributeName(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna el nom de l'atribut com a text llegible. Això equival al nom <literal
>itemData</literal
> en els fitxers de ressaltat de sintaxi. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.isAttributeName(<parameter
>int <replaceable
>línia</replaceable
></parameter
>, <parameter
>int <replaceable
>columna</replaceable
></parameter
>, <parameter
>String <replaceable
>nom</replaceable
></parameter
>);
bool document.isAttributeName(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>, <parameter
>String <replaceable
>nom</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna <literal
>true</literal
> (vertader), si el nom de l'atribut en una posició determinada del cursor coincideix amb el <replaceable
>nom</replaceable
> donat, en cas contrari retornarà <literal
>false</literal
> (fals). </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String document.variable(<parameter
>String <replaceable
>clau</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna el valor de la variable de document demanada <replaceable
>clau</replaceable
>. Si la variable de document no existeix, el valor retornat serà una cadena buida. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>String document.setVariable(<parameter
>String <replaceable
>clau</replaceable
></parameter
>, <parameter
>String <replaceable
>valor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Estableix el valor de la variable de document demanada <replaceable
>clau</replaceable
>. Retorna el valor de la variable establerta. </para>
<para
>Veure també: <link linkend="config-variables"
>variables de document de Kate</link
> </para>
<para
>Des de: KDE 4.8 </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>int document.firstVirtualColumn(<parameter
>int <replaceable
>línia</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna la columna virtual del primer caràcter que no està en blanc en la línia donada o <literal
>-1</literal
>, si la línia està buida o només conté caràcters d'espai en blanc. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>int document.lastVirtualColumn(<parameter
>int <replaceable
>línia</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna la columna virtual de l'últim caràcter que no està en blanc en la línia donada o <literal
>-1</literal
>, si la línia està buida o només conté caràcters d'espai en blanc. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>int document.toVirtualColumn(<parameter
>int <replaceable
>línia</replaceable
></parameter
>, <parameter
>int <replaceable
>columna</replaceable
></parameter
>);
int document.toVirtualColumn(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
Cursor document.toVirtualCursor(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Converteix la posició «real» donada del cursor a una posició virtual del cursor, d'altra manera retorna un int o un objecte Cursor. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>int document.fromVirtualColumn(<parameter
>int <replaceable
>línia</replaceable
></parameter
>, <parameter
>int <replaceable
>virtualColumna</replaceable
></parameter
>);
int document.fromVirtualColumn(<parameter
>Cursor <replaceable
>virtualCursor</replaceable
></parameter
>);
Cursor document.fromVirtualCursor(<parameter
>Cursor <replaceable
>virtualCursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Converteix la posició virtual donada del cursor a una posició «real» del cursor, d'altra manera retorna un int o un objecte Cursor. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>Cursor document.anchor(<parameter
>int <replaceable
>línia</replaceable
></parameter
>, <parameter
>int <replaceable
>columna</replaceable
></parameter
>, <parameter
>Char <replaceable
>caràcter</replaceable
></parameter
>);
Cursor document.anchor(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>, <parameter
>Char <replaceable
>caràcter</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Cerca enrere pel caràcter donat a partir del cursor donat. Com exemple, si es passa «(» com a caràcter, aquesta funció retornarà la posició de l'obertura «(». Això compta la referència, &ead;, els altres «(...)» seran ignorats. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>Cursor document.rfind(<parameter
>int <replaceable
>línia</replaceable
></parameter
>, <parameter
>int <replaceable
>columna</replaceable
></parameter
>, <parameter
>String <replaceable
>text</replaceable
></parameter
>, <parameter
>int <replaceable
>atribut</replaceable
> = -1</parameter
>);
Cursor document.rfind(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>, <parameter
>String <replaceable
>text</replaceable
></parameter
>, <parameter
>int <replaceable
>atribut</replaceable
> = -1</parameter
>);
</synopsis
></term>
<listitem
><para
>Cercar cap enrere el text donat amb l'<replaceable
>atribut</replaceable
> adequat. L'argument <replaceable
>atribut</replaceable
> s'ignorarà si s'estableix a <literal
>-1</literal
>. El cursor retornat no serà vàlid, si el text no s'ha pogut trobar. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>int document.defStyleNum(<parameter
>int <replaceable
>línia</replaceable
></parameter
>, <parameter
>int <replaceable
>columna</replaceable
></parameter
>);
int document.defStyleNum(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna l'estil per omissió utilitzat a la posició donada del cursor. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.isCode(<parameter
>int <replaceable
>línia</replaceable
></parameter
>, <parameter
>int <replaceable
>columna</replaceable
></parameter
>);
bool document.isCode(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna <literal
>true</literal
> (vertader), si l'atribut a la posició donada del cursor no és igual per a tots els següents estils: <literal
>dsComment</literal
>, <literal
>dsString</literal
>, <literal
>dsRegionMarker</literal
>, <literal
>dsChar</literal
>, <literal
>dsOthers</literal
>. </para
></listitem>
</varlistentry>



<varlistentry>
<term
><synopsis
>bool document.isComment(<parameter
>int <replaceable
>línia</replaceable
></parameter
>, <parameter
>int <replaceable
>columna</replaceable
></parameter
>);
bool document.isComment(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna <literal
>true</literal
> (vertader), si l'atribut del caràcter a la posició del cursor és <literal
>dsComment</literal
>, en cas contrari retornarà <literal
>false</literal
> (fals). </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.isString(<parameter
>int <replaceable
>línia</replaceable
></parameter
>, <parameter
>int <replaceable
>columna</replaceable
></parameter
>);
bool document.isString(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna <literal
>true</literal
> (vertader), si l'atribut del caràcter a la posició del cursor és <literal
>dsString</literal
>, en cas contrari retornarà <literal
>false</literal
> (fals). </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.isRegionMarker(<parameter
>int <replaceable
>línia</replaceable
></parameter
>, <parameter
>int <replaceable
>columna</replaceable
></parameter
>);
bool document.isRegionMarker(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna <literal
>true</literal
> (vertader), si l'atribut del caràcter a la posició del cursor és <literal
>dsRegionMarker</literal
>, en cas contrari retornarà <literal
>false</literal
> (fals). </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.isChar(<parameter
>int <replaceable
>línia</replaceable
></parameter
>, <parameter
>int <replaceable
>columna</replaceable
></parameter
>);
bool document.isChar(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna <literal
>true</literal
> (vertader), si l'atribut del caràcter a la posició del cursor és <literal
>dsChar</literal
>, en cas contrari retornarà <literal
>false</literal
> (fals). </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>bool document.isOthers(<parameter
>int <replaceable
>línia</replaceable
></parameter
>, <parameter
>int <replaceable
>columna</replaceable
></parameter
>);
bool document.isOthers(<parameter
>Cursor <replaceable
>cursor</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna <literal
>true</literal
> (vertader), si l'atribut del caràcter a la posició del cursor és <literal
>dsOthers</literal
>, en cas contrari retornarà <literal
>false</literal
> (fals). </para
></listitem>
</varlistentry
></variablelist>
</para>

</sect3>
</sect2>

</sect1>

<sect1 id="dev-part">
<title
>Extensions del component d'edició</title>

<para
>Les <link linkend="editor-component-plugins"
>extensions per al component d'edició</link
> estenen la KatePart, el component de l'editor de text avançat és utilitzat en moltes aplicacions del &kde;, com &kate;, &kwrite;, Kile i KDevelop. La creació d'un connector per al component d'edició us permetrà estendre la funcionalitat de l'editor a tots i cadascun d'aquests programes.</para>

<para
>Per començar, veure la <ulink url="http://techbase.kde.org/Development/Tutorials/Kate/KTextEditor_Plugins"
>guia d'aprenentatge per a connectors de KTextEditor al TechBase del &kde;</ulink
>. Per més, veure la <ulink url="http://techbase.kde.org/Development/Tutorials/Kate/KTextEditor_Plugins_Advanced"
>guia d'aprenentatge avançada, també en a TechBase</ulink
>.</para>

<para
>Podeu trobar la <ulink url="http://api.kde.org/4.10-api/kdelibs-apidocs/interfaces/ktexteditor/html/"
>documentació de la API a la referència de la API del &kde;</ulink
>.</para>

</sect1>

<sect1 id="dev-app">
<title
>Connectors (C++) de l'aplicació &kate;</title>

<para
>Els <link linkend="kate-application-plugins"
>connectors de l'aplicació &kate;</link
> estenen la funcionalitat del propi editor &kate; de cap manera com us pugueu imaginar, utilitzant el mateix llenguatge de programació en que està escrit &kate;, C++.</para>

<para
>Per començar, veure la <ulink url="http://kate-editor.org/2004/01/06/writing-a-kate-plugin/"
>guia d'aprenentatge «Escriure un connector pel &kate;» al lloc web del &kate;</ulink
>. També hi ha <ulink url="http://quickgit.kde.org/?p=kate.git&amp;a=tree&amp;f=addons%2Fkate%2Fhelloworld"
>un connector clàssic d'exemple <quote
>Hello, world!</quote
> inclòs amb el codi font de &kate;</ulink
>.</para>

</sect1>

<sect1 id="dev-pate">
<title
>Connectors en Python de &pate;</title>

<para
>Els <link linkend="pate"
>connectors de &pate;</link
> també us permeten ampliar la funcionalitat del &kate;, en qualsevol manera com vulgueu, utilitzant el llenguatge de programació Python.</para>

<para
>Per començar, veure la <ulink url="http://kate-editor.org/2012/07/01/python-plugin-developer-guide-part-1/"
>guia del desenvolupador de connectors amb Python al lloc web de &kate;</ulink
>.</para>

<para
>També podeu accedir a la referència de la API a la pantalla de <link linkend="pate-config"
>configuració de &pate;</link
>.</para>

</sect1>

</chapter>
