<chapter id="advanced-editing-tools">
<chapterinfo>
<authorgroup>
<author
>&Anders.Lund; &Anders.Lund.mail;</author>
<author
>&Dominik.Haumann; &Dominik.Haumann.mail;</author>
&traductor.Antoni.Bella; 
</authorgroup>
</chapterinfo>
<title
>Eines d'edició avançades</title>

<sect1 id="advanced-editing-tools-comment">

<title
>Comenta/descomenta</title>

<para
>Les ordres Comenta i Descomenta, disponibles des del menú <guimenu
>Eines</guimenu
> us permeten afegir o eliminar marques de comentari per a la selecció, o de la línia actual si no hi ha cap selecció. El format dels comentaris dependrà del format del text que esteu editant.</para>

<para
>Les regles que determinen com hauran de ser els comentaris s'estableixen en les definicions de sintaxi, de manera que si no s'usa el ressaltat de sintaxi, no serà possible fer això. </para>

<para
>Alguns formats defineixen marques de comentaris d'una sola línia, d'altres de múltiples línies i d'altres usen ambdues possibilitats. Si no estan disponibles les marques de comentaris de diverses línies, no serà possible comentar una selecció en que l'última línia d'aquesta no estigui inclosa completament.</para>

<para
>Si està disponible una marca de comentari d'una sola línia, es preferible comentar les línies individualment, atès que així s'eviten problemes de comentaris niats.</para>

<para
>En eliminar les marques de comentari, s'haurà de seleccionar el text sense comentar. En eliminar les marques de comentari multi-línia d'una selecció, s'ignorarà qualsevol espai en blanc que quedi fora de les marques de comentari.</para>

<para
><indexterm
><primary
>comentar</primary
></indexterm
> Per a posar marques de comentari, useu l'element del menú <menuchoice
><guimenu
>Eines</guimenu
><guimenuitem
>Comenta</guimenuitem
></menuchoice
> o la drecera de teclat corresponent, per omissió és <keycombo action="simul"
>&Ctrl;<keycap
>D</keycap
></keycombo
>.</para>

<para
><indexterm
><primary
>descomentar</primary
></indexterm
> Per eliminar les marques de comentari, useu l'element del menú <menuchoice
><guimenu
>Eines</guimenu
><guimenuitem
>Descomenta</guimenuitem
></menuchoice
> o la drecera de teclat corresponent, per omissió és <keycombo action="simul"
>&Ctrl;&Maj;<keycap
>D</keycap
></keycombo
>.</para>

</sect1>

<sect1 id="advanced-editing-tools-commandline">
<title
>El component línia d'ordres de l'editor</title>

<para
>El component editor del &kappname; té una línia d'ordres interna, permetent-vos dur a terme vàries accions des d'una interfície gràfica mínima. La línia d'ordres és una entrada de text en la part inferior de l'àrea d'edició, i per a veure-la tan sols haureu de seleccionar <menuchoice
><guimenu
>Visualitza</guimenu
> <guimenuitem
>Canvia a línia d'ordres</guimenuitem
></menuchoice
> o usar la drecera (per omissió és <keycombo action="simul"
><keycap
>F7</keycap
></keycombo
>). L'editor proveeix un joc d'ordres com els que es documenten a continuació, així com aquells altres que es poden proveir a partir de connectors.</para>

<para
>Per a executar una ordre, escriviu-la i després premeu la tecla &Intro;. La línia d'ordres indicarà què ha succeït mostrant un possible missatge. Si entreu a la línia d'ordres i premeu <keycap
>F7</keycap
> aquest missatge s'ocultarà automàticament després d'uns pocs segons. Per esborrar el missatge i introduir una ordre nova, premeu <keycap
>F7</keycap
> altra vegada.</para>

<para
>La línia d'ordres té un sistema d'ajuda encastat, escriviu l'ordre <command
>help</command
> per a iniciar-la. Per a veure una llista de tots les ordres disponibles escriviu <command
>help list</command
>, per a veure l'ajuda específica d'una ordre, escriviu <command
>help <replaceable
>ordre</replaceable
></command
>.</para>

<para
>La línia d'ordres té integrat un historial, de manera que podreu tornar a usar les ordres ja teclejades. Per a navegar a través de l'historial, useu les tecles <keysym
>Amunt</keysym
> i <keysym
>Avall</keysym
>. Quan es mostrin les ordres de l'historial, restarà seleccionada la part de l'argument, permetent-vos tornar a escriure'ls amb facilitat.</para>

<sect2 id="advanced-editing-tools-commandline-commands">
<title
>Ordres estàndard de la línia d'ordres</title>

<variablelist>
<title
>Tipus d'arguments</title>

<varlistentry>
<term
>BOOLEÀ</term>
<listitem
><para
>Aquest s'usa amb ordres que activen o desactiven coses. Els valors acceptats són: <userinput
>on</userinput
> (activat), <userinput
>off</userinput
> (desactivat), <userinput
>true</userinput
> (verdader), <userinput
>false</userinput
> (fals), <userinput
>1</userinput
> (activat) o <userinput
>0</userinput
> (desactivat).</para
></listitem>
</varlistentry>

<varlistentry>
<term
>ENTER</term>
<listitem
><para
>Un número enter.</para
></listitem>
</varlistentry>

<varlistentry>
<term
>CADENA</term>
<listitem
><para
>Una cadena, entre cometes simples (') o cometes dobles (") si conté espais.</para
></listitem>
</varlistentry>

</variablelist>



<sect3 id="advanced-editing-tools-commandline-commands-configure">
<title
>Ordres per a configurar l'editor</title>

<para
>Aquestes ordres són les que proveeix el component editor, i us permeten configurar només la vista i el document actiu. Això és especialment pràctic si voleu usar una configuració diferent de la per omissió, per exemple per al sagnat. </para>

<variablelist>

<varlistentry>
<term
><cmdsynopsis
><command
>set-tab-width</command
><arg choice="req"
>ENTER amplada</arg
></cmdsynopsis
></term>
<listitem
><para
>Estableix l'amplada de la pestanya al número <userinput
>amplada</userinput
>.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>set-indent-width</command
><arg choice="req"
>ENTER amplada</arg
></cmdsynopsis
></term>
<listitem
><para
>Estableix l'amplada del sagnat al número <userinput
>amplada</userinput
>. Tan sols s'usa si esteu sagnant amb espais.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>set-word-wrap-column</command
><arg choice="req"
>ENTER amplada</arg
></cmdsynopsis
></term>
<listitem
><para
>Estableix l'amplada per a l'ajust de línia al número <userinput
>amplada</userinput
>. Tan sols s'usa si teniu l'ajust de línia automàtic.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>set-icon-border</command
><arg choice="req"
>BOOLEÀ activa</arg
> </cmdsynopsis
></term>
<listitem
><para
>Estableix la visibilitat de la vora d'icones.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>set-folding-markers</command
><arg choice="req"
>BOOLEÀ activa</arg
></cmdsynopsis
></term>
<listitem
><para
>Estableix la visibilitat del plafó de marques de plegat.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>set-line-numbers</command
><arg choice="req"
>BOOLEÀ activa</arg
></cmdsynopsis
></term>
<listitem
><para
>Estableix la visibilitat dels números de línia al plafó.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>set-replace-tabs</command
><arg choice="req"
>BOOLEÀ activa</arg
></cmdsynopsis
></term>
<listitem
><para
>Si està habilitat, se substitueixen els espais de tabulació per espais normals mentre aneu escrivint. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>set-remove-trailing-space</command
><arg choice="req"
>BOOLEÀ activa</arg
></cmdsynopsis
></term>
<listitem
><para
>Si està habilitat, els espais en blanc de marca seran eliminats en el moment en que el cursor surti d'una línia.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>set-show-tabs</command
><arg choice="req"
>BOOLEÀ activa</arg
></cmdsynopsis
></term>
<listitem
><para
>Si està habilitat, els caràcters de tabulació i espais en blanc de marca es veuran com un punt petit.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>set-show-indent</command
><arg choice="req"
>BOOLEÀ activa</arg
></cmdsynopsis
></term>
<listitem
><para
>Si està habilitat, el sagnat es veurà com una línia puntejada vertical.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>set-indent-spaces</command
><arg choice="req"
>BOOLEÀ activa</arg
></cmdsynopsis
></term>
<listitem
><para
>Si està habilitat, l'editor farà un sagnat amb <option
>indent-width</option
> espais per a cada nivell de sagnat, en comptes de amb un caràcter de tabulació.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>set-mixed-indent</command
><arg choice="req"
>BOOLEÀ activa</arg
></cmdsynopsis
></term>
<listitem
><para
>Si està habilitat, el &kappname; usarà una barreja de tabulacions i espais per al sagnat. Cada nivell de sagnat serà d'amplada <option
>indent-width</option
>, i els diferents nivells de sagnat s'optimitzaran usant el màxim de caràcters de tabulació com sigui possible.</para>
<para
>Quan s'executa, aquesta ordre habilita el sagnat amb espais, i si no s'especifica l'amplada se li assignarà un valor igual que la meitat de <option
>tab-width</option
> per al document en temps d'execució.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>set-word-wrap</command
><arg choice="req"
>BOOLEÀ activa</arg
></cmdsynopsis
></term>
<listitem
><para
>Habilita l'ajust de línia dinàmic d'acord amb el valor de <userinput
>enable</userinput
></para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>set-replace-tabs-save</command
><arg choice="req"
>BOOLEÀ activa</arg
></cmdsynopsis
></term>
<listitem
><para
>Quan està habilitat, les tabulacions seran substituïdes amb espais en blanc al desar el document.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>set-remove-trailing-space-save</command
><arg choice="req"
>BOOLEÀ activa</arg
></cmdsynopsis
></term>
<listitem
><para
>Quan està habilitat, s'eliminen els espais de marca de cada línia en desar el document.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>set-indent-mode</command
><arg choice="req"
>CADENA nom</arg
></cmdsynopsis
></term>
<listitem
><para
>Estableix el mode de sagnat automàtic a <userinput
>nom</userinput
>. Si <userinput
>nom</userinput
> és desconegut, el mode seleccionat serà «none». Els modes vàlids són «none», «normal», «cstyle», «haskell», «lilypond», «lisp», «python», «ruby» i «xml».</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>set-auto-ident</command
><arg choice="req"
>BOOLEÀ script</arg
></cmdsynopsis
></term>
<listitem
><para
>Habilita o deshabilita el sagnat automàtic.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>set-highlight</command
><arg choice="req"
>CADENA ressaltat</arg
></cmdsynopsis
></term>
<listitem
><para
>Estableix el sistema de ressaltat de sintaxi per al document. L'argument haurà de ser un nom de ressaltat vàlid, com aquells que es poden veure en el menú <menuchoice
><guimenu
>Eines</guimenu
><guisubmenu
>Ressaltat</guisubmenu
></menuchoice
>. Aquesta ordre proveeix una llista de compleció automàtica per als seus arguments.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>reload-scripts</command
></cmdsynopsis
></term>
<listitem
><para
>Torna a carregar tots els <link linkend="advanced-editing-tools-scripting"
>scripts de JavaScript</link
> usats per Kate, inclosos els scripts sagnadors i de línia d'ordres.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>set-mode</command
><arg choice="req"
>CADENA mode</arg
></cmdsynopsis
></term>
<listitem
><para
>Tria l'esquema de tipus de fitxer per al document actual. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>nn[oremap]</command
><arg choice="req"
>CADENA original</arg
> <arg choice="req"
>CADENA mapped</arg
></cmdsynopsis
></term>
<listitem
><para
>Mapa de la seqüència de tecles <userinput
>original</userinput
> a <userinput
>mapped</userinput
>.</para
></listitem>
</varlistentry>

</variablelist>

</sect3>

<sect3 id="advanced-editing-tools-commandline-commands-edit">
<title
>Ordres per a l'edició</title>

<para
>Aquestes ordres modifiquen el document actual.</para>

<variablelist>
<varlistentry>
<term
><cmdsynopsis
><command
>indent</command
></cmdsynopsis
></term>
<listitem
><para
>Sagna les línies seleccionades o la línia actual.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>unindent</command
></cmdsynopsis
></term>
<listitem
><para
>Treu el sagnat de les línies seleccionades o la línia actual.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>cleanindent</command
></cmdsynopsis
></term>
<listitem
><para
>Treu el sagnat de les línies seleccionades o la línia actual d'acord amb les opcions de sagnat que tingueu establertes al document. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>comment</command
></cmdsynopsis
></term>
<listitem
><para
>Insereix marques de comentari fent que la selecció, les línies seleccionades o la línia actual siguin un comentari d'acord amb el format de text que s'hagi definit a la sintaxi de ressaltat per al document.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>uncomment</command
></cmdsynopsis
></term>
<listitem
><para
>Elimina les marques de comentari de la selecció, de les línies seleccionades o la línia actual, d'acord amb el format del text tal com és definit per la definició de ressaltat de sintaxi per al document.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>kill-line</command
></cmdsynopsis
></term>
<listitem
><para
>Elimina la línia actual.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>replace</command
><arg choice="req"
>CADENA patró</arg
> <arg choice="req"
>CADENA substitució</arg
></cmdsynopsis
></term>
<listitem
><para
>Substitueix el text en que coincideixi el <userinput
>patró</userinput
> amb el valor de <userinput
>substitució</userinput
>. Si voleu incloure espais en blanc en el <userinput
>patró</userinput
>, haureu de posar entre cometes tan el <userinput
>patró</userinput
> com la <userinput
>substitució</userinput
> amb cometes simples o dobles. Si els arguments no són entre cometes, la primera paraula s'usarà com a <userinput
>patró</userinput
> i la resta com a <userinput
>substitució</userinput
>. Si la <userinput
>substitució</userinput
> és buida, cada ocurrència de <userinput
>patró</userinput
> serà eliminada.</para>
<para
>Podeu establir etiquetes per a configurar la cerca afegint dos punts, seguits d'una o més lletres cadascuna de les quals representa una configuració, quedant de la forma <userinput
>replace:opcions patró substitució</userinput
>. Les opcions disponibles són: <variablelist>

<varlistentry>
<term
><userinput
>b</userinput
></term>
<listitem
><para
>Cerca enrere.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>c</userinput
></term>
<listitem
><para
>Cerca des de la posició del cursor.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>e</userinput
></term>
<listitem
><para
>Cerca tan sols en el text seleccionat.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>r</userinput
></term>
<listitem
><para
>Cerca usant una expressió regular. Si està establerta, podeu usar <userinput
>\N</userinput
> a on N serà un número per a representar captures en la cadena de substitució.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>s</userinput
></term>
<listitem
><para
>Cerca distingint majúscules i minúscules.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>p</userinput
></term>
<listitem
><para
>Demana permís per a substituir la següent ocurrència.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>w</userinput
></term>
<listitem
><para
>Tan sols coincidiran paraules senceres.</para
></listitem>
</varlistentry>

</variablelist>

</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>date</command
><arg choice="req"
>CADENA format</arg
></cmdsynopsis
></term>
<listitem
><para
>Insereix una cadena de data/hora definida d'acord al <userinput
>format</userinput
>, o si aquest no s'especifica s'usarà el format «aaaa-MM-dd hh:mm:ss». La interpretació del <userinput
>format</userinput
> serà la següent: <informaltable
> <tgroup cols="2"
> <tbody>
<row
><entry
><literal
>d</literal
></entry
><entry
>El dia com a número sense zeros a l'esquerra (1-31).</entry
></row>
<row
><entry
><literal
>dd</literal
></entry
><entry
>El dia com a número amb dos dígits (01-31).</entry
></row>
<row
><entry
><literal
>ddd</literal
></entry
><entry
>L'abreujament del nom del dia segons la localització (&pex;, «Dl»..«Dg»).</entry
></row>
<row
><entry
><literal
>dddd</literal
></entry
><entry
>El nom llarg traduït del dia (&pex;, «Dilluns»..«Diumenge»).</entry
></row>
<row
><entry
><literal
>M</literal
></entry
><entry
>El mes com a número sense zeros a l'esquerra (1-31).</entry
></row>
<row
><entry
><literal
>MM</literal
></entry
><entry
>El mes com a número amb dos dígits (01-31).</entry
></row>
<row
><entry
><literal
>MMMM</literal
></entry
><entry
>El nom llarg del mes segons la localització (&pex;, «Gener»..«Desembre»).</entry
></row>
<row
><entry
><literal
>MMM</literal
></entry
><entry
>El nom abreujat del mes segons la localització (&pex;, «Gen»..«Dec»).</entry
></row>
<row
><entry
><literal
>yy</literal
></entry
><entry
>L'any amb un número de dos dígits (00-99).</entry
></row>
<row
><entry
><literal
>yyyy</literal
></entry
><entry
>L'any amb un número de quatre dígits (1752-8000).</entry
></row>
<row
><entry
><literal
>h</literal
></entry
><entry
>L'hora sense zeros a l'esquerra (0..23 o 1..12 si es mostra AM/PM).</entry
></row>
<row
><entry
><literal
>hh</literal
></entry
><entry
>L'hora amb dos dígits (00..23 o 01..12 si es mostra AM/PM).</entry
></row>
<row
><entry
><literal
>m</literal
></entry
><entry
>Els minuts sense zeros a l'esquerra (0..59).</entry
></row>
<row
><entry
><literal
>mm</literal
></entry
><entry
>Els minuts amb dos dígits (00..59).</entry
></row>
<row
><entry
><literal
>s</literal
></entry
><entry
>Els segons sense zeros a l'esquerra (0..59).</entry
></row>
<row
><entry
><literal
>ss</literal
></entry
><entry
>Els segons amb dos dígits (00..59).</entry
></row>
<row
><entry
><literal
>z</literal
></entry
><entry
>Els mil·lisegons sense zeros a l'esquerra (0..999).</entry
></row>
<row
><entry
><literal
>zzz</literal
></entry
><entry
>Els mil·lisegons amb tres dígits (000..999).</entry
></row>
<row
><entry
><literal
>AP</literal
></entry
><entry
>S'usa per a mostrar AM/PM. AP serà substituït per «AM» o «PM».</entry
></row>
<row
><entry
><literal
>ap</literal
></entry
><entry
>S'usa per a mostrar am/pm. ap serà substituït per «am» o «pm».</entry
></row>
</tbody>
</tgroup>
</informaltable>

</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>char</command
><arg choice="req"
>CADENA identificador</arg
></cmdsynopsis
></term>
<listitem>
<para
>Aquesta ordre us permet inserir caràcters literals pel seu identificador numèric, en format decimal, octal o hexadecimal. Per a usar-lo llanceu el diàleg Ordre d'edició i escriviu <userinput
>char: [número]</userinput
> en el quadre d'entrada, després premeu <guibutton
>Bé</guibutton
>.</para>

<example>
<title
>Exemples de <command
>char</command
></title>

<para
>Entrada: <userinput
>char:234</userinput
></para>
<para
>Eixida: <computeroutput
>&#234;</computeroutput
></para>
<para
>Entrada: <userinput
>char:0x1234</userinput
></para>
<para
>Eixida: <computeroutput
>&#x1234;</computeroutput
></para>
</example>

</listitem>
</varlistentry>

<varlistentry>
<term>
<indexterm
><primary
>substitueix, estil sed</primary>
<secondary
>cerca, estil sed</secondary
></indexterm>
<command
>s///[ig]</command
> <command
>%s///[ig]</command
></term>

<listitem>
<para
>Aquesta ordre realitzarà una operació de cerca/substitució similar a les de sed sobre la línia actual o en tot el fitxer (<command
>%s///</command
>).</para>

<para
>Abreujat, se cerca en el text alguna cadena que coincideixi amb el <emphasis
>patró de cerca</emphasis
>, l'expressió regular entre la primera i la segona barra, i quan es troba una coincidència, la part coincident del text és substituïda per l'expressió continguda entre les barres central i última de la cadena. Els parèntesis en el patró de cerca creen <emphasis
>referències enrere</emphasis
>, és a dir, que l'ordre recorda quina part de la coincidència es troba entre parèntesis; aquestes cadenes es poden tornar a usar en el patró de substitució, referint-se a elles com a <userinput
>\1</userinput
> per al primer conjunt de parèntesis, <userinput
>\2</userinput
> per al segon i així successivament.</para>

<para
>Per a fer una cerca literal de <literal
>(</literal
> o <literal
>)</literal
>, haureu d'<emphasis
>escapar</emphasis
> el caràcter emprant un altre caràcter de barra invertida: <userinput
>\(\)</userinput
></para>

<para
>Si poseu una <userinput
>i</userinput
> al final de l'expressió, les coincidències seran sensibles a majúscules i minúscules. Si poseu una <userinput
>g</userinput
> al final, se substituiran totes les ocurrències del patró, en qualsevol altre cas tan sols se substituirà la primera ocurrència.</para>

<example>

<title
>Substitució de text en la línia actual</title>

<para
>El vostre bon amic l'ordinador s'ha aturat, dient que la classe <classname
>myClass</classname
> mencionada en la línia 3902 del fitxer font no està definida.</para>

<para
>&quot;Llamps i trons!&quot; Pensareu. Per descomptat és <classname
>MyClass</classname
>. Anireu fins la línia 3902 i en comptes d'intentar cercar la paraula en el text, obrireu el diàleg Ordre d'edició, introduireu <userinput
>s/myclass/MyClass/i</userinput
>, premereu el botó <guibutton
>Bé</guibutton
>, desareu el fitxer i tornareu a compilar aquesta vegada sense l'error.</para>

</example>

<example>
<title
>Substitució de text en tot el fitxer</title>

<para
>Imagineu que teniu un fitxer, en el que mencioneu a «Miss Jensen» vàries vegades, quan resulta que algú ve i us diu que s'acaba de casar amb «Mr Jones». Per descomptat, voldreu substituir cada ocurrència de «Miss Jensen» per «Ms Jones».</para>

<para
>Entreu a la línia d'ordres, escriviu l'ordre <userinput
>%s/Miss Jensen/Ms Jones/</userinput
>, una vegada que premeu &Intro; ja estarà fet.</para>

</example>

<example>
<title
>Un exemple més avançat</title>

<para
>Aquest exemple fa ús de <emphasis
>referències enrere</emphasis
> així com d'una <emphasis
>classe de caràcter</emphasis
> (si no sabeu què és això, si us plau, consulteu la documentació mencionada a sota).</para>

<para
>Suposeu que teniu la següent línia: <programlisting
>void MyClass::DoStringOps( String      &amp;foo, String &amp;bar, String *p, int  &amp;a, int &amp;b )</programlisting>
</para>
<para
>Però us adoneu que aquest codi no està bé i decidiu que voleu usar la paraula clau <constant
>const</constant
> per a tots els arguments «adreça de», que es caracteritzen per tenir un operador &amp; al davant del nom de l'argument. També voldreu simplificar l'espai en blanc, de manera que només n'hi hagi un entre cada paraula.</para>

<para
>Obriu el diàleg Ordre d'edició i introduïu: <userinput
>s/\s+(\w+)\s+(&amp;)/ const \1 \2/g</userinput
>, i després premeu el botó <guibutton
>Bé</guibutton
>. La <userinput
>g</userinput
> al final de l'expressió fa que l'expressió regular recompili cada coincidència per a desar les <emphasis
>referències enrere</emphasis
>.</para>

<para
>Eixida: <computeroutput
>void MyClass::DoStringOps( const String &amp;foo, const String &amp;bar, String *p, const int &amp;a, const int &amp;b )</computeroutput
></para>

<para
>Missió completada! Ara, què ha passat? Vaja, hem cercat algun espai en blanc (<literal
>\s+</literal
>) seguit d'un o més caràcters alfabètics (<literal
>\w+</literal
>) seguits d'algun espai en blanc (<literal
>\s+</literal
>) seguit del símbol «&amp;», i en el procés hem desat el bloc alfabètic i el caràcter «&amp;» per a tornar a usar-los en l'operació de substitució. Aleshores hem substituït la part coincident de la nostra línia per un espai en blanc seguit de «const» seguit d'un espai en blanc seguit del nostre bloc alfabètic (<literal
>\1</literal
>) seguit d'un espai en blanc seguit del nostre caràcter «&amp;» emmagatzemat (<literal
>\2</literal
>)</para>

<para
>En alguns casos el bloc alfabètic era «String», en d'altres «int», de manera que emprant la classe de caràcter <literal
>\w</literal
> i el quantificador <literal
>+</literal
> ens ha proveït d'un valuós actiu.</para>

</example>

</listitem>

</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>sort</command
></cmdsynopsis
></term>
<listitem
><para
>Ordena el text seleccionat o tot el document.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>natsort</command
></cmdsynopsis
></term>
<listitem
><para
>Ordena el text seleccionat o tot el document de forma natural.</para>

<example>
<title
><command
>sort</command
> vs. <command
>natsort</command
></title>
<para
><userinput
>sort(a10, a1, a2)</userinput
> resulta en <computeroutput
>a1, a10, a2</computeroutput
></para>
<para
><command
>natsort(a10, a1, a2)</command
> resulta en <computeroutput
>a1, a2, a10</computeroutput
></para>
</example
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>moveLinesDown</command
></cmdsynopsis
></term>
<listitem
><para
>Mou cap avall les línies seleccionades.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>moveLinesUp</command
></cmdsynopsis
></term>
<listitem
><para
>Mou cap amunt les línies seleccionades.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>uniq</command
></cmdsynopsis
></term>
<listitem
><para
>Elimina les línies duplicades del text seleccionat o de tot el document.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>rtrim</command
></cmdsynopsis
></term>
<listitem
><para
>Elimina els espais finals del text seleccionat o de tot el document.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>ltrim</command
></cmdsynopsis
></term>
<listitem
><para
>Elimina els espais al començament del text seleccionat o de tot el document.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>join</command
><arg choice="opt"
>separador CADENA</arg
></cmdsynopsis
></term>
<listitem
><para
>Uneix les línies seleccionades o tot el document. De manera opcional pren un paràmetre definint un separador, per exemple: <userinput
><command
>join</command
> ', '</userinput
> </para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>rmblank</command
></cmdsynopsis
></term>
<listitem
><para
>Elimina tots els espais en blanc del text seleccionat o de tot el document.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>unwrap</command
></cmdsynopsis
></term>
<listitem
><para
>Ajusta les línies del text seleccionat o de tot el document.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>each</command
><arg choice="req"
>CADENA script</arg
></cmdsynopsis
></term>
<listitem
><para
>Dóna una funció de JavaScript com un argument, aquesta crida a la llista de línies seleccionades i les substitueix pel valor retornat per aquesta crida.</para>

<example>
<title
>Unir les línies seleccionades</title>
<para
><userinput
><command
>each</command
> 'function(lines){return lines.join(", ")}' </userinput
></para>

<para
>O, més curt:</para>
<para
><userinput
><command
>each</command
> 'lines.join(", ")'</userinput
></para>
</example>

</listitem>
</varlistentry>



<varlistentry>
<term
><cmdsynopsis
><command
>filter</command
><arg choice="req"
>CADENA script</arg
></cmdsynopsis
></term>
<listitem
><para
>Dóna una funció de JavaScript com un argument, aquesta crida a la llista de línies seleccionades i elimina les que el valor retornat és «false».</para>

<example>
<title
>Esborrar les línies buides</title>
<para
><userinput
><command
>filter</command
> 'function(1){return 1.length 
> 0;}' </userinput
></para>

<para
>O, més curt:</para>
<para
><userinput
><command
>filter</command
> 'line.length 
> 0'</userinput
></para>
</example>

</listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>map</command
><arg choice="req"
>CADENA script</arg
></cmdsynopsis
></term>
<listitem
><para
>Dóna una funció de JavaScript com un argument, aquesta crida a la llista de línies seleccionades i substitueix la línia amb el valor de la crida.</para>

<example>
<title
>Esborrar les línies buides</title>
<para
><userinput
><command
>map</command
> 'function(line){return line.replace(/^s+/,"");}' </userinput
></para>

<para
>O, més curt:</para>
<para
><userinput
><command
>map</command
> 'line.replace(/^s+/,"")'</userinput
></para>
</example>

</listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>duplicateLinesUp</command
></cmdsynopsis
></term>
<listitem
><para
>Duplica les línies seleccionades per sobre de la selecció actual.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>duplicateLinesDown</command
></cmdsynopsis
></term>
<listitem
><para
>Duplica les línies seleccionades per sota de la selecció actual.</para>
</listitem>
</varlistentry>

</variablelist>

</sect3>

<sect3 id="advanced-editing-tools-commandline-commands-navigation">
<title
>Ordres per a navegar</title>

<variablelist>

<varlistentry>
<term
><cmdsynopsis
><command
>goto</command
><arg choice="req"
>ENTER línia</arg
></cmdsynopsis
></term>
<listitem
><para
>Aquesta ordre va a la línia especificada.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>grep</command
> <arg choice="req"
>CADENA patró</arg
> </cmdsynopsis
></term>
<listitem
><para
>Cercar al document per al <userinput
>patró</userinput
> d'expressió regular. Per a més informació, veure <xref linkend="regular-expressions"/>.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>find</command
><arg choice="req"
>CADENA patró</arg
></cmdsynopsis
></term>
<listitem
><para
>Aquesta ordre navega fins la primera ocurrència del <userinput
>patró</userinput
> d'acord amb la configuració. Les següents ocurrències es poden trobar usant <menuchoice
><guimenu
>Edita</guimenu
><guimenuitem
>Cerca següent</guimenuitem
></menuchoice
> (la drecera per omissió és <keycap
>F3</keycap
>).</para>
<para
>L'ordre «find» pot configurar-se afegint dos punts seguits per una o més opcions, el format serà <userinput
>find:opcions patró</userinput
>. Estan suportades les següents opcions:</para>

<variablelist>

<varlistentry>
<term
><userinput
>b</userinput
></term>
<listitem
><para
>Cerca enrere.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>c</userinput
></term>
<listitem
><para
>Cerca des de la posició del cursor.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>e</userinput
></term>
<listitem
><para
>Cerca tan sols en el text seleccionat.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>r</userinput
></term>
<listitem
><para
>Cerca usant una expressió regular. Si està establerta, podeu usar <userinput
>\N</userinput
> a on N serà un número per a representar captures en la cadena de substitució.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>s</userinput
></term>
<listitem
><para
>Cerca distingint majúscules i minúscules.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>w</userinput
></term>
<listitem
><para
>Tan sols coincidiran paraules senceres.</para
></listitem>
</varlistentry>

</variablelist>
</listitem>

</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>ifind</command
><arg choice="req"
>CADENA patró</arg
></cmdsynopsis
></term>
<listitem
><para
>Aquesta ordre proveeix cerca «quan-escriviu». Podeu configurar-ne el comportament o la cerca afegint dos punts seguits per a una o més opcions, de forma similar a: <userinput
>ifind:patró d'opcions</userinput
>. Les opcions permeses són: <variablelist>
<varlistentry>
<term
><userinput
>b</userinput
></term>
<listitem
><para
>Cerca enrere.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>r</userinput
></term>
<listitem
><para
>Cerca mitjançant expressions regulars.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>s</userinput
></term>
<listitem
><para
>Cerca distingint majúscules i minúscules.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>c</userinput
></term>
<listitem
><para
>Cerca des de la posició del cursor.</para
></listitem>
</varlistentry>

</variablelist>
</para
></listitem>
</varlistentry>

</variablelist>

</sect3>


<sect3 id="advanced-editing-tools-commandline-commands-basic">
<title
>Ordres per a les funcions bàsiques de l'editor (aquestes dependran de l'aplicació, el component d'edició s'utilitza en)</title>

<variablelist>

<varlistentry>
<term
><cmdsynopsis
><command
>w</command
></cmdsynopsis
></term>
<listitem
><para
>Desa el document actual.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>wa</command
></cmdsynopsis
></term>
<listitem
><para
>Desa tots els documents actualment oberts.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>q</command
></cmdsynopsis
></term>
<listitem
><para
>Tanca el document actual.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>qa</command
></cmdsynopsis
></term>
<listitem
><para
>Tanca tots els documents oberts.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>wq</command
></cmdsynopsis
></term>
<listitem
><para
>Tanca i desa el document actualment obert.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>wqa</command
></cmdsynopsis
></term>
<listitem
><para
>Tanca i desa tots els documents actualment oberts.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>x</command
></cmdsynopsis
></term>
<listitem
><para
>Desa el document actual només si ha canviat i després el tanca. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>x</command
></cmdsynopsis
></term>
<listitem
><para
>Desa tots els documents oberts només si han canviat i després els tanca.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>bp</command
></cmdsynopsis
></term>
<listitem
><para
>Va al document anterior en la llista de documents. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>bn</command
></cmdsynopsis
></term>
<listitem
><para
>Va al document següent en la llista de documents. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>new</command
></cmdsynopsis
></term>
<listitem
><para
>Obre un nou document en una vista dividida horitzontal. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>vnew</command
></cmdsynopsis
></term>
<listitem
><para
>Obre un nou document en una vista dividida vertical. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>e</command
></cmdsynopsis
></term>
<listitem
><para
>Torna a carregar el document actual si ha canviat al disc. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>enew</command
></cmdsynopsis
></term>
<listitem
><para
>Edita un document nou. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>print</command
></cmdsynopsis
></term>
<listitem
><para
>Obre el diàleg d'impressió per imprimir el document actual. </para
></listitem>
</varlistentry>

</variablelist>

</sect3>


</sect2>

</sect1>

<sect1 id="advanced-editing-tools-code-folding">
<title
>Usar el plegat de codi</title>

<para
>El plegat de codi us permet ocultar parts d'un document en l'editor, facilitant la visió de documents grans. En &kappname; les regions plegables es calculen usant regles definides en les definicions de ressaltat de sintaxi, i per tant només està disponible en alguns formats (típicament codi font de programes, com ara el de marques XML i similars). La majoria de les definicions de ressaltat suporten plegat de codi i també us permeten definir manualment regions plegables, generalment usant les paraules clau <userinput
>BEGIN</userinput
> i <userinput
>END</userinput
>.</para>

<para
>Per a usar la característica del plegat de codi, activeu els marcadors plegables usant l'element de menú <menuchoice
><guimenu
>Visualitza</guimenu
><guimenuitem
>Mostra marcadors plegables</guimenuitem
></menuchoice
> si no estan visibles. El plafó de marcadors plegables a la part esquerra de la pantalla mostra una vista gràfica de les regions plegables, amb els símbols de triangle per a indicar la possible operació sobre una certa regió: Un triangle cap avall vol dir que la regió està desplegada, fent clic sobre seu es plegarà i es mostrarà un triangle apuntant cap al punt.</para>

<para
>Es proveeixen onze ordres per a manipular l'estat de les regions plegables, consulteu la <link linkend="view-code-folding"
>documentació del menú</link
>. </para>

<para
>Les línies de plegat es recorden quan es tanca un fitxer, de manera que quan el torneu a obrir els nodes plegats encara ho estaran. Això també s'aplica a les operacions de torna a carregar.</para>

<para
>Si no desitgeu usar la característica de plegat de codi, podeu deshabilitar l'opció <guilabel
>Mostra marcadors plegables (si són disponibles)</guilabel
> en la pàgina <link linkend="appearance"
>Aparença</link
> de configuració de l'editor.</para>

</sect1>

<sect1 id="advanced-editing-tools-scripting">
<title
>Ampliar el &kappname; amb scripts</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 d'script és ECMAScript (conegut com Javascript). &kappname; admet dos tipus d'script: el sagnat i els scripts de línia d'ordres. </para>

<sect2 id="advanced-editing-tools-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="advanced-editing-tools-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="advanced-editing-tools-scripting-indentation-body">
<title
>El codi font del sagnat</title>
<para
>Després d'haver especificat la capçalera aquesta secció explica com funciona l'script de sagnat mateix. 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 dels 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="advanced-editing-tools-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="advanced-editing-tools-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="advanced-editing-tools-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 dels 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="advanced-editing-tools-scripting-api-i18n"
>traduir les cadenes</link
>. </para>

<sect4 id="advanced-editing-tools-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. Consulteu la <ulink url="http://doc.qt.nokia.com/latest/qt.html#Key-enum"
>Documentació de Qt</ulink
> per més detalls.</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="advanced-editing-tools-scripting-api">
<title
>L'API dels scripts</title>

<para
>La API per a 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 dels 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="advanced-editing-tools-scripting-api-prototypes">
<title
>Cursors i rangs</title>

<para
>Com &kappname; és un editor de text, tota l'API dels scripts es basa en els cursors i els rangs 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="advanced-editing-tools-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
>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 «<literal
>Cursor(line, column)</literal
>». </para
></listitem>
</varlistentry
></variablelist>

</sect4>


<sect4 id="advanced-editing-tools-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 rang (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 el rang (<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
> returna el rang 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 del rang <replaceable
>altra</replaceable
>. </para
></listitem>
</varlistentry>


<varlistentry>
<term
><synopsis
>Range Range.clone();
</synopsis
></term>
<listitem
><para
>Retorna una còpia de la rang. </para>
<para
>Exemple: <function
>var clone = range.clone();</function
> </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
>bool Range.invalid();
</synopsis
></term>
<listitem
><para
>Retorna el rang 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 rang 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 rang conté el rang <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 rang i el rang <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 el range comença i finalitza a la mateixa línia, &ead; si <replaceable
>Línia.comença.rang == Línia.finalitza.rang</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 rang i el rang 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 el rang com una cadena de la forma «<literal
>Rang(Cursor(line, column), Cursor(line, column))</literal
>». </para
></listitem>
</varlistentry
></variablelist>

</sect4>
</sect3>

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


<sect4 id="advanced-editing-tools-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="advanced-editing-tools-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="advanced-editing-tools-scripting-api-i18n">
<title
>Traducció</title>

<para
>Per tal de donar suport a la completa localització, hi ha diverses funcions per convertir cadenes en l'script, 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ó de KDE</ulink
>. </para>

<para
>Les funcions de traducció tradueixen les cadenes embolcallades a través del sistema de traducció del KDE a la llengua utilitzada en l'aplicació. Les cadenes en els scripts es desenvolupen en les fonts oficials de &kappname; i s'extreuen i tradueixen automàticament. En altres paraules, com a desenvolupador de &kappname; no us heu de preocupar per l'extracció dels missatges i la traducció. No obstant, pels scripts de terceres parts desenvolupats fora de KDE, heu d'extreure i traduir els missatges vosaltres mateixos. Juntament amb els scripts haureu de distribuir també un catàleg de traducció, que inclou totes les cadenes traduïdes. A més, a la capçalera de l'script li heu d'introduir el catàleg a carregar especificant <literal
>i18n-catalog</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="advanced-editing-tools-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
>columna</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 el rang de text seleccionat. El rang retornat no és 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 al rang 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="advanced-editing-tools-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
>des_de</replaceable
></parameter
>, <parameter
>Cursor <replaceable
>a_la</replaceable
></parameter
>);
String document.text(<parameter
>Range <replaceable
>rang</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Retorna el text en el rang donat. Es recomana utilitzar el cursor i la versió basada en el rang 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 rang. </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 el rang de la paraula a la posició del cursor donada. El rang retornat no és 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 rang 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 del rang 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
>des_deLínia</replaceable
></parameter
>, <parameter
>int <replaceable
>des_deColumna</replaceable
></parameter
>, <parameter
>int <replaceable
>a_laLínia</replaceable
></parameter
>, <parameter
>int <replaceable
>a_laColumna</replaceable
></parameter
>);
bool document.removeText(<parameter
>Cursor <replaceable
>des_de</replaceable
></parameter
>, <parameter
>Cursor <replaceable
>a_la</replaceable
></parameter
>);
bool document.removeText(<parameter
>Range <replaceable
>range</replaceable
></parameter
>);
</synopsis
></term>
<listitem
><para
>Elimina el text dins del rang 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à en el rang 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à en el rang 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 rang 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>
</chapter>
