<appendix id="highlight">
<title
>Trabajo con resaltado de sintaxis</title>

<sect1 id="highlight-overview">

<title
>Introducción</title>

<para
>El resaltado de sintaxis es lo que hace que el editor muestre automáticamente texto en diferentes estilos y colores, dependiendo de la función de la cadena en relación al propósito del archivo. En el código fuente de un programa, por ejemplo, las sentencias de control se pueden presentar en negrita, mientras que los tipos de datos y los comentarios pueden tener diferentes colores que el resto del texto. Esto mejora notablemente la legibilidad del texto, y ayuda al autor a ser más eficiente y productivo.</para>

<mediaobject
> <imageobject
><imagedata format="PNG" fileref="highlighted.png"/></imageobject
> <textobject
><phrase
>Un función de perl, presentada con resaltado de sintaxis.</phrase
></textobject
> <caption
><para
>Un función de perl, presentada con resaltado de sintaxis.</para
> </caption
> </mediaobject>

<mediaobject
> <imageobject
><imagedata format="PNG" fileref="unhighlighted.png"/></imageobject
> <textobject
><phrase
>La misma función de perl, sin el resaltado.</phrase
></textobject
> <caption
><para
>La misma función de perl, sin el resaltado.</para
></caption
> </mediaobject>

<para
>De los dos ejemplos, ¿cuál resulta más sencillo de leer?</para>

<para
>&kate; cuenta con un sistema de resaltado de sintaxis flexible, configurable y capaz, y la distribución estándar proporciona definiciones para un gran conjunto de lenguajes de programación, descripción y realización de guiones, a parte de otros formatos. Además usted puede incluir sus propias definiciones en simples archivos &XML;.</para>

<para
>&kate; detectará automáticamente las reglas de sintaxis correctas cuando abra un archivo, basándose en el tipo &MIME; de dicho archivo, determinado por su extensión, o, si no tiene, por su contenido. Si la elección no es la correcta, usted puede establecerla manualmente en el menú <menuchoice
><guimenu
>Documento</guimenu
><guisubmenu
>Modo resaltado</guisubmenu
></menuchoice
>.</para>

<para
>Los estilos y colores utilizados por cada definición de resaltado de sintaxis, así como los tipos &MIME; para los que se debe utilizar, se pueden configurar utilizando la página <link linkend="config-dialog-editor-hl"
>Resaltado</link
> del <link linkend="config-dialog"
>Diálogo de configuración</link
>.</para>

<note
> <para
>El resaltado de sintaxis tiene su uso en la mejora de la legibilidad del texto, pero no puede confiar en ello como prueba de que el texto es correcto. Marcar es texto en función de su sintaxis puede ser difícil, dependiendo del formato que esté utilizando, y en algunos casos los autores de las reglas de sintaxis pueden estar orgullosos si el 98% del texto se procesa correctamente, ya que hará falta un estilo muy raro para poder ver el 2% incorrecto.</para
> </note>

<tip
> <para
>Puede descargar o actualizar definiciones de resaltado de sintaxis de la página web de &kate; pinchando en el botón <guibutton
>Descargar</guibutton
> en la <link linkend="config-dialog-editor-hl"
>Página de resaltado</link
> del <link linkend="config-dialog"
>Diálogo de configuración</link
>.</para
> </tip>

</sect1>

<sect1 id="katehighlight-system">

<title
>El sistema de resaltado de sintaxis de &kate;</title>

<para
>Esta sección tratará sobre el mecanismo de resaltado de sintaxis de &kate; con más detalle. Le recomendamos su lectura si desea aprender sobre ello, o si desea crear o modificar las definiciones de sintaxis.</para>

<sect2 id="katehighlight-howitworks">

<title
>Cómo funciona</title>

<para
>Siempre que abre un archivo, uno de las primeras cosas que hace el editor de &kate; es detectar qué definición de sintaxis se utilizará en dicho archivo. Mientras va leyendo el texto del archivo, y mientras va escribiendo en él, el sistema de resaltado de sintaxis analiza el texto utilizando las reglas establecidas por la definición de sintaxis y marcando dónde comienzan y terminan los diferentes contextos y estilos.</para>

<para
>Cuando usted escribe en el documento, el nuevo texto es analizado y marcado al vuelo, así que si borra un carácter que marca el principio o el final de un contexto, el estilo del texto adyacente cambia consecuentemente.</para>

<para
>Las definiciones de sintaxis utilizadas por el sistema de resaltado de sintaxis de &kate; son archivos &XML;, que contienen <itemizedlist
> <listitem
><para
>Reglas para decidir la relevancia del texto, organizadas en bloques de contexto</para
></listitem
> <listitem
><para
>Listas de palabras clave</para
></listitem
> <listitem
><para
>Definiciones de estilos de elementos</para
></listitem
> </itemizedlist
> </para>

<para
>Al analizar el texto, las reglas de detección se evalúan en el orden en el que están definidas, y si el principio de la cadena actual coincide con la regla, se utiliza el contexto relacionado. El punto de inicio del texto se mueve al punto final en el que la regla coincide y comienza un nuevo ciclo de reglas, comenzando en el contexto establecido por la regla coincidente.</para>

</sect2>

<sect2 id="highlight-system-rules">
<title
>Reglas</title>

<para
>Las reglas de detección son el núcleo del sistema de detección del resaltado. Una regla es una cadena, un carácter o una <link linkend="regular-expressions"
>expresión regular</link
> contra la que se debe hacer coincidir el texto que está siendo analizado. Contiene información sobre el estilo a utilizar para la parte coincidente del texto. Puede cambiar el contexto de trabajo del sistema, ya sea hacia un contexto mencionado explícitamente o hacia el anterior contexto utilizado por el texto.</para>

<para
>Las reglas se organizan en grupos de contextos. Un grupo de contexto se utiliza para los conceptos principales del texto dentro del formato, por ejemplo, las cadenas de texto entrecomilladas o los bloques de comentarios en el código fuente de un programa. Esto garantiza que el sistema de resaltado no necesita realizar un ciclo por todas las reglas cuando no es necesario, y que algunas secuencias de caracteres del texto se pueden tratar de forma diferente dependiendo del contexto actual. </para>

</sect2>

<sect2 id="highlight-context-styles-keywords">
<title
>Estilos y palabras clave del contexto</title>

<para
>En algunos lenguajes de programación, los número enteros son tratados por el compilador (el programa que convierte el código fuente en un ejecutable binario) de una forma diferente a los de coma flotante, y puede que haya caracteres que tengan un significado especial dentro de una cadena entrecomillada. En esos casos, tiene sentido procesarlos de diferente manera que el texto adyacente, para que resulten fáciles de identificar. Así que incluso si no representan contextos especiales, pueden ser vistos como tales por el sistema de resaltado de sintaxis, así que son marcados para un procesado diferente.</para>

<para
>Una definición de sintaxis puede contener tantos estilos como se requiera para cubrir todos los conceptos del forma para el que se utiliza.</para>

<para
>En muchos formatos hay listas de palabras que representan un concepto específico. Por ejemplo en los lenguajes de programación, las sentencias de control son un concepto, los nombres de los tipos de datos otro, y la funciones integradas en el lenguaje son un tercero. El sistema de resaltado de sintaxis de &kate; puede utilizar tales listas para detectar y marcar palabras del texto para enfatizar conceptos de los formatos de texto.</para>

</sect2>

<sect2 id="kate-highlight-system-default-styles">
<title
>Estilos predeterminados</title>

<para
>Si abre un archivo de código fuente de C++, un archivo fuente de &Java; y un archivo <acronym
>HTML</acronym
> en &kate; podrá comprobar que aunque los formatos son diferentes, y por lo tanto las palabras que reciben un tratamiento especial también son diferentes, los colores utilizados son los mismos. Esto es debido a que &kate; tiene una lista predefinida de estilos predeterminados, que se emplean en las definiciones de sintaxis individuales.</para>

<para
>Esto facilita el reconocer conceptos similares en diferentes formatos de texto. Por ejemplo los comentarios están presentes en prácticamente cualquier lenguaje de programación, guiones o descripción, y si se presentan utilizando el mismo estilo en todos los lenguajes, usted no tendrá que pararse a pensar e identificar su posición en el texto.</para>

<tip
> <para
>Todos los estilos de una definición de sintaxis utilizan uno de los estilos predeterminados. Hay pocas definiciones de sintaxis que utilicen más estilos de los que hay por defecto, así que, si utiliza un formato muy a menudo, puede que le merezca la pena abrir el diálogo de configuración para ver si algunos conceptos están utilizando el mismo estilo. Por ejemplo, sólo hay un estilo predeterminado para las cadenas, pero como el lenguaje de programación perl utiliza dos tipos de cadena, puede mejorar el resaltado configurando ambas de formas ligeramente diferentes.</para
> </tip>

</sect2>

</sect1>

<sect1 id="katehighlight-xml-format">
<title
>El formato &XML; de definición de resaltados</title>

<sect2>
<title
>Introducción</title>

<para
>Esta sección es una introducción al formato &XML; de definición de resaltado. Describe los componentes principales y su significado y utilización, y entra en detalles con las reglas de detección.</para>

<para
>La definición formal, es decir, el <acronym
>DTD</acronym
> se almacena en el archivo <filename
>language.dtd</filename
>, que debería estar instalado en el directorio <filename
>$<envar
>KDEDIR</envar
>/share/apps/kate/syntax</filename
> de su sistema.</para>

<variablelist
> <title
>Los componentes principales de las definiciones de resaltado de &kate;</title
> <varlistentry
> <term
>La sección general (General)</term
> <listitem
> <para
>La sección general contiene información sobre el formato de los comentarios del lenguaje descrito, y define si las palabras clave son sensibles a las mayúsculas.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>Resaltado (Highlighting)</term
> <listitem
> <para
>La sección de resaltado contiene toda la información requerida para analizar y procesar el texto. Esto incluye:</para
> <variablelist
> <varlistentry
> <term
>ItemDatas</term
> <listitem
><para
>Contiene elementos ItemData, cada uno definiendo un estilo.</para
></listitem
> </varlistentry
> <varlistentry
> <term
>Listas de palabras clave</term
> <listitem
> <para
>Cada lista tiene un nombre, y puede contener cualquier número de elementos.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>Contextos (Contexts)</term
> <listitem
> <para
>Contiene contextos, que a su vez contienen las reglas de detección de sintaxis.</para
> </listitem
> </varlistentry
> </variablelist
> </listitem
> </varlistentry
> </variablelist>

</sect2>

</sect1>

<sect1 id="kate-highlight-rules-detailled">
<title
>Reglas de detección del resaltado</title>

<para
>Esta sección describe las reglas de detección del resaltado.</para>

<para
>Cada regla puede coincidir en cero o más caracteres con el principio de la cadena con la que se comparan. Si la regla coincide, a los caracteres coincidentes se les asigna el estilo o <emphasis
>atributo</emphasis
> definido por la regla, y una regla puede pedir que se cambie el contexto actual.</para>

<para
>El <emphasis
>atributo</emphasis
> y los atributos de <emphasis
>contexto</emphasis
> son comunes a todas las reglas.</para>

<para
>Una regla tiene este aspecto:</para>

<programlisting
>&lt;RuleName attribute=&quot;(identificador)&quot; context=&quot;(identificador|orden)&quot; [atributos específicos de la regla] /&gt;</programlisting>

<para
>El <emphasis
>atributo</emphasis
> identifica el estilo que utilizaran los caracteres coincidentes por nombre o índice, y el <emphasis
>contexto</emphasis
> identifica el contexto a utilizar desde aquí.</para>

<para
>El <emphasis
>atributo</emphasis
> se puede identificar por un nombre o por su índice basado en cero en el grupo de los ItemDatas.</para>

<para
>El <emphasis
>contexto</emphasis
> se puede identificar por:</para>

<itemizedlist
> <listitem
> <para
>Un <emphasis
>identificador</emphasis
>, en la actualidad sólo su índice basado en cero en el grupo de contextos.</para
> </listitem
> <listitem
> <para
>Una <emphasis
>orden</emphasis
> que le indica al motor que permanezca en el contexto actual (<userinput
>#stay</userinput
>), o que salte al contexto anterior (<userinput
>#pop</userinput
>).</para
> <para
>Para retroceder más pasos, se puede repetir la palabra clave #pop: <userinput
>#pop#pop#pop</userinput
></para
> </listitem
> </itemizedlist>

<para
>Algunas reglas pueden tener <emphasis
>reglas hijas</emphasis
> que se ejecutan únicamente si la regla padre resulta aplicable. A toda la cadena coincidente se le dará el atributo definido por la regla padre. Una regla con reglas hijas tiene este aspecto:</para>

<programlisting>
&lt;NombreDeLaRegla (atributos)&gt;
  &lt;NombreDeLaReglaHija (atributos) /&gt;
  ...
&lt;/NombreDeLaRegla&gt;
</programlisting>


<para
>Los atributos específicos de la regla varían, y se describen en la siguiente lista.</para
> 

<variablelist
> <title
>Las reglas al detalle</title
> <varlistentry
> <term
>DetectChar</term
> <listitem
> <para
>Detecta un único carácter especificado. Normalmente se utiliza, por ejemplo, para hallar el final de las cadenas entrecomilladas.</para
> <programlisting
>&lt;DetectChar char=&quot;(carácter)&quot; (atributos comunes) /&gt;</programlisting
> <para
>El atributo <userinput
>char</userinput
> define el carácter a localizar.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>Detect2Chars</term
> <listitem
> <para
>Detecta dos caracteres especificados en el orden definido.</para
> <programlisting
>&lt;Detect2Chars char=&quot;(carácter)&quot; char1=&quot;(carácter)&quot; (atributos comunes) /&gt;</programlisting
> <para
>El atributo <userinput
>char</userinput
> define el primer carácter a localizar, <userinput
>char1</userinput
> el segundo.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>AnyChar</term
> <listitem
> <para
>Detecta un carácter de un conjunto de caracteres especificados.</para
> <programlisting
>&lt;AnyChar String=&quot;(cadena)&quot; (atributos comunes) /&gt;</programlisting
> <para
>El atributo <userinput
>String</userinput
> define el conjunto de caracteres.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>StringDetect</term
> <listitem
> <para
>Detecta una cadena exacta.</para
> <programlisting
>&lt;StringDetect String=&quot;(cadena)&quot; [insensitive=&quot;TRUE|FALSE;&quot;] (atributos comunes) /&gt;</programlisting
> <para
>El atributo <userinput
>String</userinput
> define la cadena a localizar. El atributo <userinput
>insensitive</userinput
>, cuyo valor predeterminado es <userinput
>FALSE</userinput
>, hacer referencia a la distinción entre mayúsculas y minúscula. Si el valor es <userinput
>TRUE</userinput
>, se realiza tal distinción.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>RegExpr</term
> <listitem
> <para
>Busca la coincidencia con una expresión regular.</para
> <programlisting
>&lt;RegExpr String=&quot;(cadena)&quot; [insensitive=&quot;TRUE|FALSE;&quot;] [minimal=&quot;TRUE|FALSE&quot;] (atributos comunes) /&gt;</programlisting
> <para
>El atributo <userinput
>String</userinput
> define la expresión regular.</para
> <para
><userinput
>insensitive</userinput
> tiene <userinput
>FALSE</userinput
> como valor predeterminado y se envía al motor de expresiones regulares.</para
> <para
><userinput
>minimal</userinput
> tiene <userinput
>FALSE</userinput
> como valor predeterminado y se envía al motor de expresiones regulares.</para
> <para
>Como siempre se trata de que las reglas coincidan con el principio de la cadena actual, una expresión regular que comience con el símbolo del circunflejo (<literal
>^</literal
>) indica que la regla se debe comparar únicamente con el principio de una línea.</para
> <para
>Vea la sección sobre <link linkend="regular-expressions"
>expresiones regulares</link
> para obtener más información.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>Keyword</term
> <listitem
> <para
>Detecta una palabra clave de una lista especificada.</para
> <programlisting
>&lt;keyword String=&quot;(nombre de la lista)&quot; (atributos comunes) /&gt;</programlisting
> <para
>El atributo <userinput
>String</userinput
> identifica la lista de palabras claves por su nombre. Debe existir una lista con ese nombre.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>Int</term
> <listitem
> <para
>Detecta un número entero.</para
> <para
><programlisting
>&lt;Int (atributos comunes) /&gt;</programlisting
></para
> <para
>Esta regla no tiene atributos específicos. Las reglas hijas normalmente se utilizan para detectar combinaciones de <userinput
>L</userinput
> y <userinput
>U</userinput
> después del número, indicando el tipo de entero en el código del programa.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>Float</term
> <listitem
> <para
>Detecta un número de coma flotante.</para
> <para
><programlisting
>&lt;Float (atributos comunes)
/&gt;</programlisting
></para
> <para
>Esta regla no tiene atributos específicos.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>HlCOct</term
> <listitem
> <para
>Detecta una representación numérica de un número octal.</para
> <para
><programlisting
>&lt;HlCOct (atributos comunes) /&gt;</programlisting
></para
> <para
>Esta regla no tiene atributos específicos.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>HlCHex</term
> <listitem
> <para
>Detecta una representación numérica de un número hexadecimal.</para
> <para
><programlisting
>&lt;Int (atributos comunes) /&gt;</programlisting
></para
> <para
>Esta regla no tiene atributos específicos.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>HlCStringChar</term
> <listitem
> <para
>Detecta un carácter escapado.</para
> <para
><programlisting
>&lt;HlCStringChar (atributos comunes)
/&gt;</programlisting
></para
> <para
>Esta regla no tiene atributos específicos.</para
> <para
>Localiza representaciones tipográficas de caracteres invisibles que se utilizan habitualmente en el código de programación, por ejemplo <userinput
>\n</userinput
> (nueva línea) o <userinput
>\t</userinput
> (TAB).</para
> <para
>Los siguientes caracteres cumplirán con la regla si siguen a una barra invertida (<literal
>\</literal
>): <userinput
>abefnrtv&quot;'?</userinput
>. Además serán válidos los números hexadecimales escapados como por ejemplo <userinput
>\xff</userinput
>, y los números octales escapados como <userinput
>\033</userinput
>.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>RangeDetect</term
> <listitem
> <para
>Detecta una cadena con caracteres de inicio y fin definidos.</para
> <programlisting
>&lt;RangeDetect char=&quot;(carácter)&quot;  char1=&quot;(carácter)&quot; (atributos comunes) /&gt;</programlisting
> <para
><userinput
>char</userinput
> define el carácter que inicia el rango, <userinput
>char2</userinput
> el carácter que finaliza el rango.</para
> <para
>Es muy útil para detectar por ejemplo pequeña cadenas entrecomilladas y similares, pero tenga en cuenta que el motor de resaltado puede trabajar sólo con una cada vez, así que no detectarán cadenas que estén divididas en dos líneas o más.</para
> </listitem
> </varlistentry
> <varlistentry
> <term
>LineContinue</term
> <listitem
> <para
>Localiza el final de la línea.</para
> <programlisting
>&lt;LineContinue (atributos comunes) /&gt;</programlisting
> <para
>Esta regla no tiene atributos específicos.</para
> <para
>Esta regla es útil para cambiar el contexto al finalizar la línea.</para
> </listitem
> </varlistentry
> </variablelist>

</sect1>

</appendix>

