1
<appendix id="highlight">
10
<othercredit role="translator"
18
>traducciones@rociogallego.com</email
24
><othercredit role="translator"
32
>pablo.devicente@gmail.com</email
38
> <othercredit role="translator"
46
>mfouces@yahoo.es</email
52
> <othercredit role="translator"
56
>Fernández Sancho</surname
60
>santi@kde-es.org</email
70
>Trabajo con resaltado de sintaxis</title>
72
<sect1 id="highlight-overview">
78
>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>
82
><imagedata format="PNG" fileref="highlighted.png"/></imageobject>
85
>Una función de perl, presentada con resaltado de sintaxis.</phrase
89
>Una función de perl, presentada con resaltado de sintaxis.</para>
95
><imagedata format="PNG" fileref="unhighlighted.png"/></imageobject>
98
>La misma función de perl, sin el resaltado.</phrase
102
>La misma función de perl, sin el resaltado.</para
107
>De los dos ejemplos, ¿cuál resulta más sencillo de leer?</para>
110
>&kappname; cuenta con un sistema de resaltado de sintaxis flexible, configurable y capaz para resaltar la sintaxis y la distribución estándar proporciona definiciones para una amplia gama de lenguajes de programación, de scripts y de marcado, y para otros formatos de archivos de texto. Además, usted puede incluir sus propias definiciones en sencillos archivos &XML;.</para>
113
>&kappname; 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
115
>Herramientas</guimenu
117
> Resaltado </guisubmenu
122
>Los estilos y colores utilizados en cada definición del resaltado de sintaxis pueden configurarse en la pestaña <link linkend="prefcolors-highlighting-text-styles"
123
>Estilos de resaltado de texto</link
124
>, del <link linkend="config-dialog"
125
>Diálogo de configuración</link
126
>, mientras que los tipos &MIME; y las extensiones de archivo para los que se debe utilizar, se pueden configurar en la pestaña <link linkend="pref-open-save-modes- filetypes"
127
>Modos y tipos de archivo</link
132
>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 el 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>
137
>Puede actualizar o descargar más definiciones de resaltado de sintaxis de la página web de &kappname; pulsando el botón <guibutton
138
>Descargar archivos de resaltado...</guibutton
139
> en la pestaña <link linkend="pref-open- save-modes-filetypes"
140
>Modos y tipos de archivo</link
141
> del <link linkend=" config-dialog"
142
>Diálogo de configuración</link
148
<sect1 id="katehighlight-system">
151
>Sistema de resaltado de sintaxis de &kappname;</title>
154
>Esta sección tratará sobre el mecanismo de resaltado de sintaxis de &kappname; con más detalle. Le recomendamos su lectura si desea aprender sobre ello, o si desea crear o modificar las definiciones de sintaxis.</para>
156
<sect2 id="katehighlight-howitworks">
159
>Cómo funciona</title>
162
>Siempre que abre un archivo, una de las primeras cosas que hace el editor de &kappname; es detectar qué definición de sintaxis se utilizará en dicho archivo. Mientras va leyendo el texto del archivo y va escribiendo en él, el sistema de resaltado de sintaxis analiza el texto utilizando las reglas establecidas por la definición de sintaxis y va marcando dónde comienzan y terminan los diferentes contextos y estilos.</para>
165
>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>
168
>Las definiciones de sintaxis utilizadas por el sistema de resaltado de sintaxis de &kappname; son archivos &XML;, que contienen lo siguiente: <itemizedlist>
171
>Reglas para decidir el papel del texto, organizadas en bloques de contexto</para
175
>Listas de palabras clave.</para
179
>Definiciones de estilos de elementos</para
185
>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>
189
<sect2 id="highlight-system-rules">
194
>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"
195
>expresión regular</link
196
> 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>
199
>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>
202
>Es posible generar dinámicamente contextos para permitir el uso de datos específicos de instancias en las reglas.</para>
206
<sect2 id="highlight-context-styles-keywords">
208
>Estilos y palabras clave del contexto</title>
211
>En algunos lenguajes de programación, los números enteros son tratados por el compilador (el programa que convierte el código fuente en un ejecutable binario) de una forma diferente de los de coma flotante, y puede que haya caracteres que tengan un significado especial dentro de una cadena entrecomillada. En esos casos, tiene sentido representarlos 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>
214
>Una definición de sintaxis puede contener tantos estilos como sean requeridos para cubrir todos los conceptos del formato para el que se utilizan.</para>
217
>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 las funciones integradas en el lenguaje son un tercero. El sistema de resaltado de sintaxis de &kappname; puede utilizar dichas listas para detectar y marcar palabras del texto para enfatizar conceptos de los formatos de texto.</para>
221
<sect2 id="kate-highlight-system-default-styles">
223
>Estilos predeterminados</title>
226
>Si abre un archivo de código fuente de C++, un archivo fuente de &Java; y un archivo <acronym
228
> en &kappname; 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 se debe a que &kappname; tiene una lista predefinida de estilos predeterminados, que se utilizan en las definiciones de sintaxis individuales.</para>
231
>Esto facilita que se reconozcan conceptos similares en diferentes formatos de texto. Por ejemplo, los comentarios están presentes en prácticamente cualquier lenguaje de programación, de scripts o de marcado 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>
235
>Todos los estilos de definición de sintaxis utilizan uno de los estilos predeterminados. Hay pocas definiciones de sintaxis que utilicen más estilos de los que hay de forma predeterminada, 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, solo 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 forma ligeramente diferente. Más adelante se explicarán todos los <link linkend="kate-highlight-default-styles"
236
>estilos incluidos predeterminados</link
244
<sect1 id="katehighlight-xml-format">
246
>El formato &XML; de definición de resaltados</title>
250
>Introducción</title>
253
>Esta sección es una introducción al formato &XML; de definición de resaltado. Describe los componentes principales, su significado y utilización, y entra en detalles con las reglas de detección.</para>
256
>La definición formal, es decir, el <acronym
258
>, se almacena en el archivo <filename
259
>language.dtd</filename
260
>, que debería estar instalado en la carpeta <filename
263
>/share/apps/kate/syntax</filename
264
> de su sistema. </para>
268
>Secciones principales de los archivos de definición de resaltado de &kappname;</title>
272
>Todos los archivos de resaltado contienen un encabezado que define la definición de XML y el doctype (tipo de documento):</term>
275
><?xml version="1.0" encoding="UTF-8"?>
276
<!DOCTYPE language SYSTEM "language.dtd">
283
>La parte principal del archivo de definición es el elemento <userinput
284
>languaje. Los atrib</userinput
285
>utos disponibles son:</term>
289
>Atributos requeridos:</para>
293
> configura el nombre del lenguaje. Después aparecerá en el menú y en los diálogos.</para>
297
> especifica la categoría.</para>
300
>extensions</userinput
301
> define las extensiones de los archivos, como "*.cpp;*.h"</para>
304
>Atributos opcionales:</para>
308
> archivos &MIME; asociados al tipo en que se basan.</para>
312
> especifica la versión actual del archivo de definición.</para>
315
>kateversion</userinput
316
> especifica la última versión soportada por &kappname;.</para>
319
>casesensitive</userinput
320
> define, si las palabras clave son sensibles a mayúsculas y minúsculas o no.</para>
324
> se necesita si otra definición de resaltado utiliza las mismas extensiones. Se utilizará la de mayor prioridad.</para>
328
> contiene el nombre del autor y su dirección de correo electrónico.</para>
332
> contiene la licencia, normalmente LPGL, artística, GPL y otras.</para>
336
> define cuándo debería aparecer el nombre en los menús de &kappname;.</para>
338
>De ahí que dicha línea pueda tener un aspecto similar a:</para>
340
><language name="C++" version="1.00" kateversion="2.4" section="Sources" extensions="*.cpp;*.h" />
348
>A continuación estaría el elemento <userinput
349
>highlighting</userinput
350
>, que contiene el elemento opcional <userinput
352
> y los elementos requeridos <userinput
355
>itemDatas</userinput
359
>Los elementos <userinput
361
> contienen una lista de palabras clave. En este caso las palabras clave son <emphasis
365
>. Puede añadir tantas listas como necesite.</para>
367
>El elemento <userinput
369
> contiene todos los contextos. El primer contexto es el predeterminado y con él se iniciará el resaltado. Existen dos reglas en el contexto <emphasis
370
>Normal Text</emphasis
371
>, que harán coincidir la lista de palabras clave con el nombre <emphasis
373
> y una regla que detecta una comilla y cambia el contexto a <emphasis
375
>. Para aprender más sobre las reglas lea el siguiente capítulo.</para>
377
>La tercera parte es el elemento <userinput
378
>itemDatas</userinput
379
>. Contiene todos los colores y tipos de letra que necesitan los contextos y las reglas. En este ejemplo, se utilizan <userinput
382
>Normal Text</emphasis
389
><highlighting>
390
<list name="somename">
391
<item> class </item>
392
<item> const </item>
395
<context attribute="Normal Text" lineEndContext="#pop" name="Normal Text" >
396
<keyword attribute="Keyword" context="#stay" String="somename" />
397
<DetectChar attribute="String" context="string" char="&quot;" />
399
<context attribute="String" lineEndContext="#stay" name="string" >
400
<DetectChar attribute="String" context="#pop" char="&quot;" />
404
<itemData name="Normal Text" defStyleNum="dsNormal" />
405
<itemData name="Keyword" defStyleNum="dsKeyword" />
406
<itemData name="String" defStyleNum="dsString" />
408
</highlighting>
415
>La última parte de la definición de resaltado es la sección opcional <userinput
417
>. Puede contener información sobre palabras clave, plegado de código, comentarios y sangrado.</term>
421
>La sección <userinput
423
> define con qué cadena se introduce un comentario en una línea sencilla. También puede definir comentarios en múltiples líneas utilizando <emphasis
425
> con el atributo adicional <emphasis
427
>. Esto se utiliza si el usuario pulsa el correspondiente acceso rápido para <emphasis
428
>comentar/descomentar</emphasis
431
>La sección <userinput
433
> define si las listas de palabras clave son sensibles a mayúsculas y minúsculas o no. Posteriormente se explicarán otros atributos.</para>
437
<comment name="singleLine" start="#"/>
439
<keywords casesensitive="1"/>
451
<sect2 id="kate-highlight-sections">
453
>Las secciones al detalle</title>
455
>Esta parte describe todos los atributos para los contextos, listas de datos, palabras clave, comentarios, plegado de código y sangrado.</para>
460
>El elemento <userinput
462
> pertenece al grupo <userinput
464
>. Un contexto define las reglas específicas de contexto que se deben seguir cuando el sistema de resaltado alcanza el final de una línea. Los atributos disponibles son:</term>
471
> es el nombre del contexto. Las reglas utilizarán el nombre para especificar el contexto al que cambiar en el caso de que coincidan las reglas.</para>
474
>lineEndContext</userinput
475
> define el contexto al que cambiará el sistema de resaltado si alcanza el final de la línea. Puede ser un nombre u otro contexto, <userinput
477
> permitirá que no se cambie el contexto (⪚, no hacer nada) o <userinput
479
> hará que se salga de este contexto. Es posible utilizar por ejemplo <userinput
480
>#pop#pop#pop</userinput
481
> para salir tres veces.</para>
484
>lineEmptyContext</userinput
485
> define el contexto si se encuentra una línea vacía. De forma predeterminada: #stay.</para>
488
>fallthrough</userinput
489
> define si el sistema de resaltado cambiará al contexto especificado en fallthroughtContext si no coinciden las reglas. De forma predeterminada vale <emphasis
494
>fallthroughContext</userinput
495
> especifica el siguiente contexto si no hay reglas que coincidan.</para>
501
>, el contexto recordará cadenas/elementos reemplazables guardados por las reglas dinámicas. Esto se necesita, por ejemplo, en los documentos HERE. Su valor predeterminado es <emphasis
510
>El elemento <userinput
512
> se encuentra en el grupo <userinput
513
>itemDatas</userinput
514
>. Define el estilo y los colores de los tipos de letra. Por tanto es posible definir sus propios estilos y colores, sin embargo recomendamos utilizar los estilos predeterminados, ya que así el usuario verá colores homogéneos para los diferentes lenguajes. Si bien, algunas veces no existen otras posibilidades y es necesario cambiar el color y los atributos de los tipos de letra. Los atributos name y defStyleNum son necesarios, los otros son opcionales. Los atributos disponibles son:</term>
520
> configura el nombre del itemData. Los contextos y las reglas utilizarán este nombre en sus atributos <emphasis
522
> para referenciar un itemData.</para>
525
>defStyleNum</userinput
526
> define qué estilo se utilizará de forma predeterminada. Los estilos predeterminados disponibles se explicarán posteriormente.</para>
530
> define un color. Los formatos válidos son «#rrggbb» o «#rgb».</para>
534
> define el color de la selección.</para>
540
> el texto se mostrará en cursiva.</para>
546
> el texto se mostrará en negrita.</para>
549
>underline</userinput
552
> el texto se mostrará subrayado.</para>
555
>strikeout</userinput
558
> el texto se mostrará tachado.</para>
561
>spellChecking</userinput
564
>, se realizará la comprobación ortográfica del texto, si no, se ignorará durante la comprobación ortográfica.</para>
571
>El elemento <userinput
573
> en el grupo <userinput
575
> define la propiedad keyword. Los atributos disponibles son:</term>
580
>casesensitive</userinput
581
> puede valer <emphasis
587
>, todas las palabras clave son sensibles a mayúsculas y minúsculas</para>
590
>weakDeliminator</userinput
591
> es una lista de caracteres que no actúan como delimitadores de palabras (delimitador débil). Por ejemplo el punto <userinput
593
> es un delimitador de palabra. Si tenemos una palabra clave en una <userinput
595
> que contiene un punto, solo habrá coincidencia si especifica el punto como delimitador débil.</para>
598
>additionalDeliminator</userinput
599
> define delimitadores adicionales.</para>
602
>wordWrapDeliminator</userinput
603
> define los caracteres tras los cuales se puede producir un ajuste de línea.</para>
605
>Los delimitadores predeterminados de ajuste de línea son los caracteres <userinput
606
>.():!+,-<=>%&*/;?[]^{|}~\</userinput
607
>, espacio (<userinput
609
>) y tabulador (<userinput
618
>El elemento <userinput
620
> en el grupo <userinput
622
> define las propiedades de los comentarios que va a utilizar <menuchoice
624
>Herramientas</guimenu
626
>Comentar</guimenuitem
630
>Herramientas</guimenu
632
>Descomentar</guimenuitem
634
>. Los atributos disponibles son:</term>
640
> puede ser <emphasis
641
>singleLine</emphasis
644
>. Si selecciona <emphasis
646
> se necesitan los atributos <emphasis
654
> define la cadena que se utiliza para iniciar un comentario. En C++ debería ser "/*".</para>
658
> define la cadena utilizada para cerrar un comentario. En C++ debería ser "*/".</para>
662
> debería ser el nombre con el que se guardará el comentario multilínea. Si asumimos que tenemos una región <emphasis
663
>beginRegion="Comentario"</emphasis
665
>endRegion="Comentario"</emphasis
666
> en sus reglas debería utilizar <emphasis
667
>region="Comentario"</emphasis
668
>. De esta forma se descomentará incluso aunque no haya seleccionado todo el texto en un comentario multilínea. Solo es necesario que el cursor esté dentro del comentario multilínea.</para>
675
>El elemento <userinput
677
> en el grupo <userinput
679
> define las propiedades de plegado del código. Los atributos disponibles son:</term>
684
>indentationsensitive</userinput
687
>, los marcadores de plegado de código se añadirán al sangrado, como en el lenguaje de script Python. Normalmente no necesitará utilizarlo, y por ello su valor predeterminado es <emphasis
696
>El elemento <userinput
697
>indentation</userinput
698
> en el grupo <userinput
700
> define qué sangrado se utilizará, sin embargo, le recomendamos fervientemente que omita este elemento, ya que el elemento de sangrado suele estar configurado en el tipo de archivo o al añadir el modo de línea al archivo de texto. Aunque especifique un sangrado, podrá forzar un sangrado específico para un usuario, por otra que le agrade más. Los atributos disponibles son:</term>
706
> es el nombre del sangrado. Los sangrados a la derecha disponibles son: <emphasis
707
>normal, cstyle, haskell, lilypond, lisp, python, ruby</emphasis
720
<sect2 id="kate-highlight-default-styles">
722
>Estilos predeterminados disponibles</title>
724
>Los estilos predeterminados <link linkend="kate-highlight-system-default-styles"
725
>ya se explicaron</link
726
>, a modo de resumen: Los estilos predeterminados están predefinidos para los estilos de tipos de letras y colores.</para>
730
>Veamos la lista de los estilos predeterminados disponibles:</term>
735
>, utilizados para el texto normal.</para>
738
>dsKeyword</userinput
739
>, utilizados para las palabras clave.</para>
742
>dsDataType</userinput
743
>, utilizados para los tipos de datos.</para>
747
>, utilizados para los valores decimales.</para>
751
>, utilizados para los valores en una base diferente de 10.</para>
755
>, utilizados para valores de coma flotante.</para>
759
>, utilizados para caracteres.</para>
763
>, utilizados para cadenas.</para>
766
>dsComment</userinput
767
>, utilizados para comentarios.</para>
771
>, utilizados para 'otras' cosas.</para>
775
>, utilizados para mensajes de aviso.</para>
778
>dsFunction</userinput
779
>, utilizados para llamadas a funciones.</para>
782
>dsRegionMarker</userinput
783
>, utilizados para marcadores de región.</para>
787
>, utilizados para errores de resaltado y sintaxis incorrecta.</para>
796
<sect1 id="kate-highlight-rules-detailled">
798
>Reglas de detección del resaltado</title>
801
>Esta sección describe las reglas de detección del resaltado.</para>
804
>Cada regla puede coincidir en ninguno o con varios caracteres del principio de la cadena con la que se comparan. Si la regla coincide, a los caracteres coincidentes se les asigna el estilo o <emphasis
806
> definido por la regla, asimismo una regla puede pedir que se cambie el contexto actual.</para>
809
>Una regla tiene este aspecto:</para>
812
><NombreRegla attribute="(identificador)" context="(identificador)" [atributos específicos de la regla] /></programlisting>
817
> identifica el estilo que utilizaran los caracteres coincidentes por nombre, y el <emphasis
819
> identifica el contexto a utilizar desde aquí.</para>
824
> se puede identificar por:</para>
830
>identificador</emphasis
831
>, que es el nombre de los otros contextos.</para>
837
> que le indica al motor que permanezca en el contexto actual (<userinput
839
>), o que salte al contexto anterior (<userinput
843
>Para retroceder más pasos, se puede repetir la palabra clave #pop: <userinput
844
>#pop#pop#pop</userinput
850
>Algunas reglas pueden tener <emphasis
851
>reglas hijas</emphasis
852
> 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>
855
><NombreRegla (atributos)>
856
<NombreReglaHija (atributos) />
863
>Los atributos específicos de la regla varían, y se describen en las siguientes secciones.</para>
868
>Atributos comunes</title>
870
>Todas las reglas tienen los siguientes atributos comunes y están disponibles siempre que aparezcan <userinput
871
>(atributos comunes)</userinput
876
> son atributos requeridos, los demás son opcionales. </para>
882
>: Un atributo se asigna a un determinado <emphasis
890
>: Especifica el contexto al que cambiará el sistema de resaltado si las reglas coinciden.</para>
895
>beginRegion</emphasis
896
>: Inicia un bloque de plegado de código. Valor predeterminado: unset.</para>
902
>: Finaliza un bloque de plegado de código. Valor predeterminado: unset.</para>
910
>, el sistema de resaltado no procesará las longitudes coincidentes. Valor predeterminado: <emphasis
917
>firstNonSpace</emphasis
918
>: Coincidirán únicamente si la cadena no contiene un espacio en blanco al principio de la línea. Valor predeterminado: <emphasis
926
>: Únicamente coincidirá si coincide la columna. Valor predeterminado: unset.</para>
932
>Reglas dinámicas</title>
934
>Algunas reglas permiten el atributo opcional <userinput
936
> de tipo lógico, cuyo valor predeterminado es <emphasis
938
>. Si dynamic vale <emphasis
940
>, la regla puede utilizar argumentos que representen el texto coincidente con una regla de una <emphasis
941
>expresión regular</emphasis
942
> que cambie al contexto actual por el contenido en los atributos <userinput
948
>, el argumento <replaceable
950
> (donde N es un número) se reemplazará con el equivalente <replaceable
952
> de la llamada de la expresión regular. En un <userinput
954
> el argumento debería ser un número <replaceable
956
> y será reemplazado con el primer carácter del equivalente <replaceable
958
> de la llamada de la expresión regular. Siempre que un regla permita este atributo deberá contener un <emphasis
966
>: puede ser <emphasis
967
>(true|false)</emphasis
972
<sect2 id="highlighting-rules-in-detail">
974
>Las reglas al detalle</title>
982
>Detecta un único carácter especificado. Normalmente se utiliza, por ejemplo, para hallar el final de las cadenas entrecomilladas.</para>
984
><DetectChar char="(carácter)" (atributos comunes) (dynamic) /></programlisting>
986
>El atributo <userinput
988
> define el carácter que debe coincidir.</para>
997
>Detecta dos caracteres especificados en el orden definido.</para>
999
><Detect2Chars char="(carácter)" char1="(carácter)" (atributos comunes) (dynamic) /></programlisting>
1001
>El atributo <userinput
1003
> define el primer carácter que debe coincidir, <userinput
1005
> el segundo.</para>
1014
>Detecta un carácter de un conjunto de caracteres especificados.</para>
1016
><AnyChar String="(cadena)" (atributos comunes) /></programlisting>
1018
>El atributo <userinput
1020
> define el conjunto de caracteres.</para>
1026
>StringDetect</term>
1029
>Detecta una cadena exacta.</para>
1031
><StringDetect String="(string)" [insensitive="true|false"] (atributos comunes) (dynamic) /></programlisting>
1033
>El atributo <userinput
1035
> define la cadena a localizar. El atributo <userinput
1036
>insensitive</userinput
1037
> tiene como valor predeterminado <emphasis
1039
> y se pasa a la función de comparación de cadena. Si el valor es <emphasis
1041
> la comparación no es sensible a mayúsculas y minúsculas.</para>
1050
>Detecta una cadena exacta, pero también necesita delimitadores de palabra como un punto<userinput
1052
> o un espacio al principio y al final de la palabra. Piense en <userinput
1053
>\b<string>\b</userinput
1054
> como expresión regular, pero es más rápido que la regla <userinput
1055
>RegExpr </userinput
1058
><WordDetect String="(string)" [insensitive="true|false"] (atributos comunes) (dynamic) /></programlisting>
1060
>El atributo <userinput
1062
> define la cadena a localizar. El atributo <userinput
1063
>insensitive</userinput
1064
> tiene como valor predeterminado <emphasis
1066
> y se pasa a la función de comparación de cadena. Si el valor es <emphasis
1068
> la comparación no es sensible a mayúsculas y minúsculas.</para>
1070
>Desde: Kate 3.5 (KDE 4.5)</para>
1079
>Busca la coincidencia con una expresión regular.</para>
1081
><RegExpr String="(string)" [insensitive="true|false"] [minimal="true|false"] (atributos comunes) (dynamic) /></programlisting>
1083
>El atributo <userinput
1085
> define la expresión regular.</para>
1088
>insensitive</userinput
1091
> como valor predeterminado y se pasa al motor de expresiones regulares.</para>
1097
> como valor predeterminado y se pasa al motor de expresiones regulares.</para>
1099
>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
1101
>) indica que la regla se debe comparar únicamente con el principio de una línea.</para>
1103
>Vea la sección sobre <link linkend="regular-expressions"
1104
>expresiones regulares</link
1105
> para obtener más información.</para>
1114
>Detecta una palabra clave de una lista especificada.</para>
1116
><keyword String="(nombre de la lista)" (atributos comunes) /></programlisting>
1118
>El atributo <userinput
1120
> identifica la lista de palabras clave por su nombre. Debe existir una lista con ese nombre.</para>
1129
>Detecta un número entero.</para>
1132
><Int (atributos comunes) (dynamic) /></programlisting
1135
>Esta regla no tiene atributos específicos. Las reglas hijas normalmente se utilizan para detectar combinaciones de <userinput
1139
> después del número, indicando el tipo de entero en el código del programa. En realidad se admiten todas las reglas como reglas hijas, aunque, el <acronym
1141
> únicamente permite la regla hija <userinput
1142
>StringDetect</userinput
1145
>El siguiente ejemplo encuentra números enteros seguidos del carácter 'L'. <programlisting
1146
><Int attribute="Decimal" context="#stay" >
1147
<StringDetect attribute="Decimal" context="#stay" String="L" insensitive="true"/>
1160
>Detecta un número de coma flotante.</para>
1163
><Float (atributos comunes) /></programlisting
1166
>Esta regla no tiene atributos específicos. Se permite <userinput
1168
> como regla hija y normalmente se utiliza para detectar combinaciones, vea la regla <userinput
1170
> para obtener una referencia.</para>
1179
>Detecta una representación numérica de un número octal.</para>
1182
><HlCOct (atributos comunes) /></programlisting
1185
>Esta regla no tiene atributos específicos.</para>
1194
>Detecta una representación numérica de un número hexadecimal.</para>
1197
><HlCHex (atributos comunes) /></programlisting
1200
>Esta regla no tiene atributos específicos.</para>
1206
>HlCStringChar</term>
1209
>Detecta un carácter escapado.</para>
1212
><HlCStringChar (atributos comunes) /></programlisting
1215
>Esta regla no tiene atributos específicos.</para>
1218
>Localiza representaciones tipográficas de caracteres que se utilizan habitualmente en el código de programación, por ejemplo <userinput
1220
> (nueva línea) o <userinput
1225
>Los siguientes caracteres cumplirán con la regla si siguen a una barra inversa (<literal
1228
>abefnrtv"'?\</userinput
1229
>. Además, coincidirán los números hexadecimales escapados como, por ejemplo, <userinput
1231
>, y los números octales escapados como <userinput
1243
>Detecta un carácter C.</para>
1246
><HlCChar (atributos comunes) /></programlisting
1249
>Esta regla no tiene atributos específicos.</para>
1252
>Localiza caracteres C encerrados en una marca (Ejemplo: <userinput
1254
>). La marca puede ser un carácter sencillo o un carácter escapado. Vea HICStringChar para localizar secuencias de caracteres escapados.</para>
1264
>Detecta una cadena con caracteres de inicio y fin definidos.</para>
1266
><RangeDetect char="(carácter)" char1="(carácter)" (atributos comunes) /></programlisting>
1270
> define el carácter que inicia el intervalo, <userinput
1272
> el carácter que finaliza el rango.</para>
1274
>Es muy útil para detectar por ejemplo pequeña cadenas entrecomilladas y similares, pero tenga en cuenta que el motor de resaltado puede trabajar solo con una cada vez, así que no se detectarán cadenas que estén divididas en dos líneas o más.</para>
1280
>LineContinue</term>
1283
>Coincide con una barra inversa (<userinput
1285
>) al final de una línea.</para>
1287
><LineContinue (atributos comunes) /></programlisting>
1289
>Esta regla no tiene atributos específicos.</para>
1291
>Esta regla es práctica para cambiar el contexto al final de la línea, si el último carácter es una barra inversa (<userinput
1293
>). Esto es necesario por ejemplo en C/C++ para continuar macros o cadenas.</para>
1299
>IncludeRules</term>
1302
>Incluye reglas de otro contexto o lenguaje/archivo.</para>
1304
><IncludeRules context="contextlink" [includeAttrib="true|false"] /></programlisting>
1307
>El atributo <userinput
1309
> define el contexto a incluir.</para>
1311
>Si es una cadena sencilla incluye todas las reglas definidas en el contexto actual, ejemplo: <programlisting
1312
><IncludeRules context="anotherContext" /></programlisting
1316
>Si la cadena comienza con <userinput
1318
> el sistema de resaltado buscará otra definición de lenguaje con el nombre dado, ejemplo: <programlisting
1319
><IncludeRules context="##C++" /></programlisting
1322
>Si el atributo <userinput
1323
>includeAttrib</userinput
1326
>, cambia el atributo de destino por otro de la fuente. Esto es necesario, por ejemplo, para incluir comentarios si para el texto que coincide con contexto introducido se utiliza un resaltado diferente que para el contexto anfitrión. </para>
1333
>DetectSpaces</term>
1336
>Detectar espacios en blanco.</para>
1338
><DetectSpaces (atributos comunes) /></programlisting>
1341
>Esta regla no tiene atributos específicos.</para>
1343
>Utilice esta regla si sabe que pueden existir varios espacios en blanco delante, por ejemplo, al principio de las líneas sangradas. Esta regla saltará todos los espacios en blanco a la vez, en lugar de comprobar múltiples reglas y saltar si no existen coincidencias.</para>
1350
>DetectIdentifier</term>
1353
>Detecta identificadores de cadenas (como una expresión regular: [a-zA-Z_][a-zA-Z0-9_]*).</para>
1355
><DetectIdentifier (atributos comunes) /></programlisting>
1358
>Esta regla no tiene atributos específicos.</para>
1360
>Utilice esta regla para saltar una cadena de una palabra de caracteres, en lugar de comprobar múltiples reglas y saltar si no existen coincidencias.</para>
1369
>Trucos y consejos</title>
1373
>Una vez que haya entendido cómo funciona el cambio de contexto será sencillo escribir definiciones de resaltado. Aunque debería ser cuidadoso para comprobar qué regla debería seleccionar en qué situación. Las expresiones regulares son muy potentes, pero son lentas en comparación con otras reglas. Por ello debería tener en cuenta los siguientes consejos. </para>
1377
>Si solo deben coincidir dos caracteres utilice <userinput
1378
>Detect2Chars</userinput
1379
> en lugar de <userinput
1380
>StringDetect</userinput
1381
>. Lo mismo se aplica a <userinput
1382
>DetectChar</userinput
1387
>Las expresiones regulares son fáciles de utilizar pero algunas veces existen formas mucho más rápidas de obtener el mismo resultado. Imagine que el carácter<userinput
1389
> únicamente debe coincidir si es el primer carácter de la línea. Un solución basada en una expresión regular sería algo parecido a esto: <programlisting
1390
><RegExpr attribute="Macro" context="macro" String="^\s*" /></programlisting
1391
> Puede conseguir lo mismo mucho más rápido utilizando: <programlisting
1392
><DetectChar attribute="Macro" context="macro" char="#" firstNonSpace="true" /></programlisting
1393
> Si desea que la expresión regular localice <userinput
1395
> también puede utilizar <userinput
1396
>DetectChar</userinput
1397
> con el atributo <userinput
1398
>column="0"</userinput
1399
>. El atributo <userinput
1401
> cuenta los caracteres base, por tanto el tabulador es solo un carácter. </para>
1405
>Puede cambiar de contexto sin procesar caracteres. Suponga que desea cambiar de contexto cuando encuentra una cadena <userinput
1407
>, pero necesita procesar esta cadena en el siguiente contexto. La siguiente regla encontrará una coincidencia y el atributo <userinput
1408
> lookAhead</userinput
1409
> hará que se guarde la cadena localizada para el siguiente contexto. <programlisting
1410
><Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" lookAhead="true" /></programlisting>
1416
>DetectSpaces</userinput
1417
> si sabe cuantos espacios en blanco existen.</para>
1422
>DetectIdentifier</userinput
1423
> en lugar de la expresión regular <userinput
1424
>'[a-zA-Z_]\w*'</userinput
1429
>Utilice los estilos predeterminados siempre que pueda. De esta forma el usuario se encontrará con un entorno familiar.</para>
1433
>Vea otros archivos XML para comprobar de qué forma otras personas implementan reglas delicadas.</para>
1437
>Puede validar cada uno de los archivos XML utilizando la orden <command
1438
>xmllint --dtdvalid lenguaje.dtd miSintaxis.xml</command
1443
>Si repite expresiones regulares complejas muy frecuentemente puede utlizar <emphasis
1445
> (entidades). Ejemplo:</para>
1447
><?xml version="1.0" encoding="UTF-8"?>
1448
<!DOCTYPE language SYSTEM "lenguaje.dtd"
1450
<!ENTITY miref "[A-Za-z_:][\w.:_-]*">
1454
>Ahora puede utilizar <emphasis
1455
>&miref;</emphasis
1456
> en lugar de la expresión regular.</para>