~ubuntu-branches/ubuntu/vivid/kde-l10n-es/vivid

« back to all changes in this revision

Viewing changes to docs/applications/kate/highlighting.docbook

  • Committer: Package Import Robot
  • Author(s): Jonathan Riddell
  • Date: 2013-04-04 14:14:50 UTC
  • mfrom: (1.12.27)
  • Revision ID: package-import@ubuntu.com-20130404141450-2d7izkhncd45keps
Tags: 4:4.10.2-0ubuntu1
New upstream release

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<appendix id="highlight">
 
2
<appendixinfo>
 
3
<authorgroup>
 
4
<author
 
5
><personname
 
6
><firstname
 
7
></firstname
 
8
></personname
 
9
></author>
 
10
<othercredit role="translator"
 
11
> <firstname
 
12
>Rocío</firstname
 
13
> <surname
 
14
>Gallego</surname
 
15
> <affiliation
 
16
><address
 
17
><email
 
18
>traducciones@rociogallego.com</email
 
19
></address
 
20
></affiliation
 
21
> <contrib
 
22
>Traductora</contrib
 
23
> </othercredit
 
24
><othercredit role="translator"
 
25
> <firstname
 
26
>Pablo</firstname
 
27
> <surname
 
28
>de Vicente</surname
 
29
> <affiliation
 
30
><address
 
31
><email
 
32
>pablo.devicente@gmail.com</email
 
33
></address
 
34
></affiliation
 
35
> <contrib
 
36
>Traductor</contrib
 
37
> </othercredit
 
38
> <othercredit role="translator"
 
39
> <firstname
 
40
>Marcos</firstname
 
41
> <surname
 
42
>Fouces Lago</surname
 
43
> <affiliation
 
44
><address
 
45
><email
 
46
>mfouces@yahoo.es</email
 
47
></address
 
48
></affiliation
 
49
> <contrib
 
50
>Traductor</contrib
 
51
> </othercredit
 
52
> <othercredit role="translator"
 
53
> <firstname
 
54
>Santiago</firstname
 
55
> <surname
 
56
>Fernández Sancho</surname
 
57
> <affiliation
 
58
><address
 
59
><email
 
60
>santi@kde-es.org</email
 
61
></address
 
62
></affiliation
 
63
> <contrib
 
64
>Traductor</contrib
 
65
> </othercredit
 
66
 
67
</authorgroup>
 
68
</appendixinfo>
 
69
<title
 
70
>Trabajo con resaltado de sintaxis</title>
 
71
 
 
72
<sect1 id="highlight-overview">
 
73
 
 
74
<title
 
75
>Introducción</title>
 
76
 
 
77
<para
 
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>
 
79
 
 
80
<mediaobject>
 
81
<imageobject
 
82
><imagedata format="PNG" fileref="highlighted.png"/></imageobject>
 
83
<textobject
 
84
><phrase
 
85
>Una función de perl, presentada con resaltado de sintaxis.</phrase
 
86
></textobject>
 
87
<caption
 
88
><para
 
89
>Una función de perl, presentada con resaltado de sintaxis.</para>
 
90
</caption>
 
91
</mediaobject>
 
92
 
 
93
<mediaobject>
 
94
<imageobject
 
95
><imagedata format="PNG" fileref="unhighlighted.png"/></imageobject>
 
96
<textobject
 
97
><phrase
 
98
>La misma función de perl, sin el resaltado.</phrase
 
99
></textobject>
 
100
<caption
 
101
><para
 
102
>La misma función de perl, sin el resaltado.</para
 
103
></caption>
 
104
</mediaobject>
 
105
 
 
106
<para
 
107
>De los dos ejemplos, ¿cuál resulta más sencillo de leer?</para>
 
108
 
 
109
<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>
 
111
 
 
112
<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
 
114
><guimenu
 
115
>Herramientas</guimenu
 
116
><guisubmenu
 
117
> Resaltado </guisubmenu
 
118
></menuchoice
 
119
>.</para>
 
120
 
 
121
<para
 
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
 
128
>.</para>
 
129
 
 
130
<note>
 
131
<para
 
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>
 
133
</note>
 
134
 
 
135
<tip>
 
136
<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
 
143
>.</para>
 
144
</tip>
 
145
 
 
146
</sect1>
 
147
 
 
148
<sect1 id="katehighlight-system">
 
149
 
 
150
<title
 
151
>Sistema de resaltado de sintaxis de &kappname;</title>
 
152
 
 
153
<para
 
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>
 
155
 
 
156
<sect2 id="katehighlight-howitworks">
 
157
 
 
158
<title
 
159
>Cómo funciona</title>
 
160
 
 
161
<para
 
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>
 
163
 
 
164
<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>
 
166
 
 
167
<para
 
168
>Las definiciones de sintaxis utilizadas por el sistema de resaltado de sintaxis de &kappname; son archivos &XML;, que contienen lo siguiente: <itemizedlist>
 
169
<listitem
 
170
><para
 
171
>Reglas para decidir el papel del texto, organizadas en bloques de contexto</para
 
172
></listitem>
 
173
<listitem
 
174
><para
 
175
>Listas de palabras clave.</para
 
176
></listitem>
 
177
<listitem
 
178
><para
 
179
>Definiciones de estilos de elementos</para
 
180
></listitem>
 
181
</itemizedlist>
 
182
</para>
 
183
 
 
184
<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>
 
186
 
 
187
</sect2>
 
188
 
 
189
<sect2 id="highlight-system-rules">
 
190
<title
 
191
>Reglas</title>
 
192
 
 
193
<para
 
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>
 
197
 
 
198
<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>
 
200
 
 
201
<para
 
202
>Es posible generar dinámicamente contextos para permitir el uso de datos específicos de instancias en las reglas.</para>
 
203
 
 
204
</sect2>
 
205
 
 
206
<sect2 id="highlight-context-styles-keywords">
 
207
<title
 
208
>Estilos y palabras clave del contexto</title>
 
209
 
 
210
<para
 
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>
 
212
 
 
213
<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>
 
215
 
 
216
<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>
 
218
 
 
219
</sect2>
 
220
 
 
221
<sect2 id="kate-highlight-system-default-styles">
 
222
<title
 
223
>Estilos predeterminados</title>
 
224
 
 
225
<para
 
226
>Si abre un archivo de código fuente de C++, un archivo fuente de &Java; y un archivo <acronym
 
227
>HTML</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>
 
229
 
 
230
<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>
 
232
 
 
233
<tip>
 
234
<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
 
237
>.</para>
 
238
</tip>
 
239
 
 
240
</sect2>
 
241
 
 
242
</sect1>
 
243
 
 
244
<sect1 id="katehighlight-xml-format">
 
245
<title
 
246
>El formato &XML; de definición de resaltados</title>
 
247
 
 
248
<sect2>
 
249
<title
 
250
>Introducción</title>
 
251
 
 
252
<para
 
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>
 
254
 
 
255
<para
 
256
>La definición formal, es decir, el <acronym
 
257
>DTD</acronym
 
258
>, se almacena en el archivo <filename
 
259
>language.dtd</filename
 
260
>, que debería estar instalado en la carpeta <filename
 
261
>$<envar
 
262
>KDEDIR</envar
 
263
>/share/apps/kate/syntax</filename
 
264
> de su sistema. </para>
 
265
 
 
266
<variablelist>
 
267
<title
 
268
>Secciones principales de los archivos de definición de resaltado de &kappname;</title>
 
269
 
 
270
<varlistentry>
 
271
<term
 
272
>Todos los archivos de resaltado contienen un encabezado que define la definición de XML y el doctype (tipo de documento):</term>
 
273
<listitem>
 
274
<programlisting
 
275
>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
 
276
&lt;!DOCTYPE language SYSTEM &quot;language.dtd&quot;&gt;
 
277
</programlisting>
 
278
</listitem>
 
279
</varlistentry>
 
280
 
 
281
<varlistentry>
 
282
<term
 
283
>La parte principal del archivo de definición es el elemento <userinput
 
284
>languaje. Los atrib</userinput
 
285
>utos disponibles son:</term>
 
286
 
 
287
<listitem>
 
288
<para
 
289
>Atributos requeridos:</para>
 
290
<para
 
291
><userinput
 
292
>name</userinput
 
293
> configura el nombre del lenguaje. Después aparecerá en el menú y en los diálogos.</para>
 
294
<para
 
295
><userinput
 
296
>section</userinput
 
297
> especifica la categoría.</para>
 
298
<para
 
299
><userinput
 
300
>extensions</userinput
 
301
> define las extensiones de los archivos, como &quot;*.cpp;*.h&quot;</para>
 
302
 
 
303
<para
 
304
>Atributos opcionales:</para>
 
305
<para
 
306
><userinput
 
307
>mimetype</userinput
 
308
> archivos &MIME; asociados al tipo en que se basan.</para>
 
309
<para
 
310
><userinput
 
311
>version</userinput
 
312
> especifica la versión actual del archivo de definición.</para>
 
313
<para
 
314
><userinput
 
315
>kateversion</userinput
 
316
> especifica la última versión soportada por &kappname;.</para>
 
317
<para
 
318
><userinput
 
319
>casesensitive</userinput
 
320
> define, si las palabras clave son sensibles a mayúsculas y minúsculas o no.</para>
 
321
<para
 
322
><userinput
 
323
>priority</userinput
 
324
> se necesita si otra definición de resaltado utiliza las mismas extensiones. Se utilizará la de mayor prioridad.</para>
 
325
<para
 
326
><userinput
 
327
>author</userinput
 
328
> contiene el nombre del autor y su dirección de correo electrónico.</para>
 
329
<para
 
330
><userinput
 
331
>license</userinput
 
332
> contiene la licencia, normalmente LPGL, artística, GPL y otras.</para>
 
333
<para
 
334
><userinput
 
335
>hidden</userinput
 
336
> define cuándo debería aparecer el nombre en los menús de &kappname;.</para>
 
337
<para
 
338
>De ahí que dicha línea pueda tener un aspecto similar a:</para>
 
339
<programlisting
 
340
>&lt;language name=&quot;C++&quot; version=&quot;1.00&quot; kateversion=&quot;2.4&quot; section=&quot;Sources&quot; extensions=&quot;*.cpp;*.h&quot; /&gt;
 
341
</programlisting>
 
342
</listitem>
 
343
</varlistentry>
 
344
 
 
345
 
 
346
<varlistentry>
 
347
<term
 
348
>A continuación estaría el elemento <userinput
 
349
>highlighting</userinput
 
350
>, que contiene el elemento opcional <userinput
 
351
>list</userinput
 
352
> y los elementos requeridos <userinput
 
353
>contexts</userinput
 
354
> e <userinput
 
355
>itemDatas</userinput
 
356
>.</term>
 
357
<listitem>
 
358
<para
 
359
>Los elementos <userinput
 
360
>list</userinput
 
361
> contienen una lista de palabras clave. En este caso las palabras clave son <emphasis
 
362
>class</emphasis
 
363
> y <emphasis
 
364
>const</emphasis
 
365
>. Puede añadir tantas listas como necesite.</para>
 
366
<para
 
367
>El elemento <userinput
 
368
>contexts</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
 
372
>somename</emphasis
 
373
> y una regla que detecta una comilla y cambia el contexto a <emphasis
 
374
>string</emphasis
 
375
>. Para aprender más sobre las reglas lea el siguiente capítulo.</para>
 
376
<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
 
380
>itemData</userinput
 
381
> <emphasis
 
382
>Normal Text</emphasis
 
383
>, <emphasis
 
384
>String</emphasis
 
385
> y <emphasis
 
386
>Keyword</emphasis
 
387
>. </para>
 
388
<programlisting
 
389
>&lt;highlighting&gt;
 
390
    &lt;list name=&quot;somename&quot;&gt;
 
391
      &lt;item&gt; class &lt;/item&gt;
 
392
      &lt;item&gt; const &lt;/item&gt;
 
393
    &lt;/list&gt;
 
394
    &lt;contexts&gt;
 
395
      &lt;context attribute=&quot;Normal Text&quot; lineEndContext=&quot;#pop&quot; name=&quot;Normal Text&quot; &gt;
 
396
        &lt;keyword attribute=&quot;Keyword&quot; context=&quot;#stay&quot; String=&quot;somename&quot; /&gt;
 
397
        &lt;DetectChar attribute=&quot;String&quot; context=&quot;string&quot; char=&quot;&amp;quot;&quot; /&gt;
 
398
      &lt;/context&gt;
 
399
      &lt;context attribute=&quot;String&quot; lineEndContext=&quot;#stay&quot; name=&quot;string&quot; &gt;
 
400
        &lt;DetectChar attribute=&quot;String&quot; context=&quot;#pop&quot; char=&quot;&amp;quot;&quot; /&gt;
 
401
      &lt;/context&gt;
 
402
    &lt;/contexts&gt;
 
403
    &lt;itemDatas&gt;
 
404
      &lt;itemData name=&quot;Normal Text&quot; defStyleNum=&quot;dsNormal&quot; /&gt;
 
405
      &lt;itemData name=&quot;Keyword&quot; defStyleNum=&quot;dsKeyword&quot; /&gt;
 
406
      &lt;itemData name=&quot;String&quot; defStyleNum=&quot;dsString&quot; /&gt;
 
407
    &lt;/itemDatas&gt;
 
408
  &lt;/highlighting&gt;
 
409
</programlisting>
 
410
</listitem>
 
411
</varlistentry>
 
412
 
 
413
<varlistentry>
 
414
<term
 
415
>La última parte de la definición de resaltado es la sección opcional <userinput
 
416
>general</userinput
 
417
>. Puede contener información sobre palabras clave, plegado de código, comentarios y sangrado.</term>
 
418
 
 
419
<listitem>
 
420
<para
 
421
>La sección <userinput
 
422
>comment</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
 
424
>multiLine</emphasis
 
425
> con el atributo adicional <emphasis
 
426
>end</emphasis
 
427
>. Esto se utiliza si el usuario pulsa el correspondiente acceso rápido para <emphasis
 
428
>comentar/descomentar</emphasis
 
429
>.</para>
 
430
<para
 
431
>La sección <userinput
 
432
>keywords</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>
 
434
<programlisting
 
435
>&lt;general&gt;
 
436
    &lt;comments&gt;
 
437
      &lt;comment name="singleLine" start="#"/&gt;
 
438
    &lt;/comments&gt;
 
439
    &lt;keywords casesensitive="1"/&gt;
 
440
  &lt;/general&gt;
 
441
&lt;/language&gt;
 
442
</programlisting>
 
443
</listitem>
 
444
</varlistentry>
 
445
 
 
446
</variablelist>
 
447
 
 
448
 
 
449
</sect2>
 
450
 
 
451
<sect2 id="kate-highlight-sections">
 
452
<title
 
453
>Las secciones al detalle</title>
 
454
<para
 
455
>Esta parte describe todos los atributos para los contextos, listas de datos, palabras clave, comentarios, plegado de código y sangrado.</para>
 
456
 
 
457
<variablelist>
 
458
<varlistentry>
 
459
<term
 
460
>El elemento <userinput
 
461
>context</userinput
 
462
> pertenece al grupo <userinput
 
463
>contexts</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>
 
465
 
 
466
 
 
467
<listitem>
 
468
<para
 
469
><userinput
 
470
>name</userinput
 
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>
 
472
<para
 
473
><userinput
 
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
 
476
>#stay</userinput
 
477
> permitirá que no se cambie el contexto (&eg;, no hacer nada) o <userinput
 
478
>#pop</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>
 
482
<para
 
483
><userinput
 
484
>lineEmptyContext</userinput
 
485
> define el contexto si se encuentra una línea vacía. De forma predeterminada: #stay.</para>
 
486
<para
 
487
><userinput
 
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
 
490
>false</emphasis
 
491
>.</para>
 
492
<para
 
493
><userinput
 
494
>fallthroughContext</userinput
 
495
> especifica el siguiente contexto si no hay reglas que coincidan.</para>
 
496
<para
 
497
><userinput
 
498
>dynamic</userinput
 
499
> si vale <emphasis
 
500
>true</emphasis
 
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
 
502
>false</emphasis
 
503
>.</para>
 
504
</listitem>
 
505
</varlistentry>
 
506
 
 
507
 
 
508
<varlistentry>
 
509
<term
 
510
>El elemento <userinput
 
511
>itemData</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>
 
515
 
 
516
<listitem>
 
517
<para
 
518
><userinput
 
519
>name</userinput
 
520
> configura el nombre del itemData. Los contextos y las reglas utilizarán este nombre en sus atributos <emphasis
 
521
>attribute</emphasis
 
522
> para referenciar un itemData.</para>
 
523
<para
 
524
><userinput
 
525
>defStyleNum</userinput
 
526
> define qué estilo se utilizará de forma predeterminada. Los estilos predeterminados disponibles se explicarán posteriormente.</para>
 
527
<para
 
528
><userinput
 
529
>color</userinput
 
530
> define un color. Los formatos válidos son «#rrggbb» o «#rgb».</para>
 
531
<para
 
532
><userinput
 
533
>selColor</userinput
 
534
> define el color de la selección.</para>
 
535
<para
 
536
><userinput
 
537
>italic</userinput
 
538
>. Si vale <emphasis
 
539
>true</emphasis
 
540
> el texto se mostrará en cursiva.</para>
 
541
<para
 
542
><userinput
 
543
>bold</userinput
 
544
>. Si vale <emphasis
 
545
>true</emphasis
 
546
> el texto se mostrará en negrita.</para>
 
547
<para
 
548
><userinput
 
549
>underline</userinput
 
550
>. Si vale <emphasis
 
551
>true</emphasis
 
552
> el texto se mostrará subrayado.</para>
 
553
<para
 
554
><userinput
 
555
>strikeout</userinput
 
556
>. Si vale <emphasis
 
557
>true</emphasis
 
558
> el texto se mostrará tachado.</para>
 
559
<para
 
560
><userinput
 
561
>spellChecking</userinput
 
562
>. Si vale <emphasis
 
563
>true</emphasis
 
564
>, se realizará la comprobación ortográfica del texto, si no, se ignorará durante la comprobación ortográfica.</para>
 
565
</listitem>
 
566
</varlistentry>
 
567
 
 
568
 
 
569
<varlistentry>
 
570
<term
 
571
>El elemento <userinput
 
572
>keywords</userinput
 
573
> en el grupo <userinput
 
574
>general</userinput
 
575
> define la propiedad keyword. Los atributos disponibles son:</term>
 
576
 
 
577
<listitem>
 
578
<para
 
579
><userinput
 
580
>casesensitive</userinput
 
581
> puede valer <emphasis
 
582
>true</emphasis
 
583
> o <emphasis
 
584
>false</emphasis
 
585
>. Si vale <emphasis
 
586
>true</emphasis
 
587
>, todas las palabras clave son sensibles a mayúsculas y minúsculas</para>
 
588
<para
 
589
><userinput
 
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
 
592
>'.'</userinput
 
593
> es un delimitador de palabra. Si tenemos una palabra clave en una <userinput
 
594
>list</userinput
 
595
> que contiene un punto, solo habrá coincidencia si especifica el punto como delimitador débil.</para>
 
596
<para
 
597
><userinput
 
598
>additionalDeliminator</userinput
 
599
> define delimitadores adicionales.</para>
 
600
<para
 
601
><userinput
 
602
>wordWrapDeliminator</userinput
 
603
> define los caracteres tras los cuales se puede producir un ajuste de línea.</para>
 
604
<para
 
605
>Los delimitadores predeterminados de ajuste de línea son los caracteres <userinput
 
606
>.():!+,-&lt;=&gt;%&amp;*/;?[]^{|}~\</userinput
 
607
>, espacio (<userinput
 
608
>' '</userinput
 
609
>) y tabulador (<userinput
 
610
>'\t'</userinput
 
611
>).</para>
 
612
</listitem>
 
613
</varlistentry>
 
614
 
 
615
 
 
616
<varlistentry>
 
617
<term
 
618
>El elemento <userinput
 
619
>comment</userinput
 
620
> en el grupo <userinput
 
621
>comments</userinput
 
622
> define las propiedades de los comentarios que va a utilizar <menuchoice
 
623
><guimenu
 
624
>Herramientas</guimenu
 
625
><guimenuitem
 
626
>Comentar</guimenuitem
 
627
></menuchoice
 
628
> y <menuchoice
 
629
><guimenu
 
630
>Herramientas</guimenu
 
631
><guimenuitem
 
632
>Descomentar</guimenuitem
 
633
></menuchoice
 
634
>. Los atributos disponibles son:</term>
 
635
 
 
636
<listitem>
 
637
<para
 
638
><userinput
 
639
>name</userinput
 
640
> puede ser <emphasis
 
641
>singleLine</emphasis
 
642
> o <emphasis
 
643
>multiLine</emphasis
 
644
>. Si selecciona <emphasis
 
645
>multiLine</emphasis
 
646
> se necesitan los atributos <emphasis
 
647
>end</emphasis
 
648
> y <emphasis
 
649
>region</emphasis
 
650
>.</para>
 
651
<para
 
652
><userinput
 
653
>start</userinput
 
654
> define la cadena que se utiliza para iniciar un comentario. En C++ debería ser &quot;/*&quot;.</para>
 
655
<para
 
656
><userinput
 
657
>end</userinput
 
658
> define la cadena utilizada para cerrar un comentario. En C++ debería ser &quot;*/&quot;.</para>
 
659
<para
 
660
><userinput
 
661
>region</userinput
 
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
 
664
> ... <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>
 
669
</listitem>
 
670
</varlistentry>
 
671
 
 
672
 
 
673
<varlistentry>
 
674
<term
 
675
>El elemento <userinput
 
676
>folding</userinput
 
677
> en el grupo <userinput
 
678
>general</userinput
 
679
> define las propiedades de plegado del código. Los atributos disponibles son:</term>
 
680
 
 
681
<listitem>
 
682
<para
 
683
><userinput
 
684
>indentationsensitive</userinput
 
685
>. Si vale <emphasis
 
686
>true</emphasis
 
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
 
688
>false</emphasis
 
689
>.</para>
 
690
</listitem>
 
691
</varlistentry>
 
692
 
 
693
 
 
694
<varlistentry>
 
695
<term
 
696
>El elemento <userinput
 
697
>indentation</userinput
 
698
> en el grupo <userinput
 
699
>general</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>
 
701
 
 
702
<listitem>
 
703
<para
 
704
><userinput
 
705
>mode</userinput
 
706
> es el nombre del sangrado. Los sangrados a la derecha disponibles son: <emphasis
 
707
>normal, cstyle, haskell, lilypond, lisp, python, ruby</emphasis
 
708
> y <emphasis
 
709
>xml</emphasis
 
710
>.</para>
 
711
</listitem>
 
712
</varlistentry>
 
713
 
 
714
 
 
715
</variablelist>
 
716
 
 
717
 
 
718
</sect2>
 
719
 
 
720
<sect2 id="kate-highlight-default-styles">
 
721
<title
 
722
>Estilos predeterminados disponibles</title>
 
723
<para
 
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>
 
727
<variablelist>
 
728
<varlistentry>
 
729
<term
 
730
>Veamos la lista de los estilos predeterminados disponibles:</term>
 
731
<listitem>
 
732
<para
 
733
><userinput
 
734
>dsNormal</userinput
 
735
>, utilizados para el texto normal.</para>
 
736
<para
 
737
><userinput
 
738
>dsKeyword</userinput
 
739
>, utilizados para las palabras clave.</para>
 
740
<para
 
741
><userinput
 
742
>dsDataType</userinput
 
743
>, utilizados para los tipos de datos.</para>
 
744
<para
 
745
><userinput
 
746
>dsDecVal</userinput
 
747
>, utilizados para los valores decimales.</para>
 
748
<para
 
749
><userinput
 
750
>dsBaseN</userinput
 
751
>, utilizados para los valores en una base diferente de 10.</para>
 
752
<para
 
753
><userinput
 
754
>dsFloat</userinput
 
755
>, utilizados para valores de coma flotante.</para>
 
756
<para
 
757
><userinput
 
758
>dsChar</userinput
 
759
>, utilizados para caracteres.</para>
 
760
<para
 
761
><userinput
 
762
>dsString</userinput
 
763
>, utilizados para cadenas.</para>
 
764
<para
 
765
><userinput
 
766
>dsComment</userinput
 
767
>, utilizados para comentarios.</para>
 
768
<para
 
769
><userinput
 
770
>dsOthers</userinput
 
771
>, utilizados para 'otras' cosas.</para>
 
772
<para
 
773
><userinput
 
774
>dsAlert</userinput
 
775
>, utilizados para mensajes de aviso.</para>
 
776
<para
 
777
><userinput
 
778
>dsFunction</userinput
 
779
>, utilizados para llamadas a funciones.</para>
 
780
<para
 
781
><userinput
 
782
>dsRegionMarker</userinput
 
783
>, utilizados para marcadores de región.</para>
 
784
<para
 
785
><userinput
 
786
>dsError</userinput
 
787
>, utilizados para errores de resaltado y sintaxis incorrecta.</para>
 
788
</listitem>
 
789
</varlistentry>
 
790
</variablelist>
 
791
 
 
792
</sect2>
 
793
 
 
794
</sect1>
 
795
 
 
796
<sect1 id="kate-highlight-rules-detailled">
 
797
<title
 
798
>Reglas de detección del resaltado</title>
 
799
 
 
800
<para
 
801
>Esta sección describe las reglas de detección del resaltado.</para>
 
802
 
 
803
<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
 
805
>atributo</emphasis
 
806
> definido por la regla, asimismo una regla puede pedir que se cambie el contexto actual.</para>
 
807
 
 
808
<para
 
809
>Una regla tiene este aspecto:</para>
 
810
 
 
811
<programlisting
 
812
>&lt;NombreRegla attribute=&quot;(identificador)&quot; context=&quot;(identificador)&quot; [atributos específicos de la regla] /&gt;</programlisting>
 
813
 
 
814
<para
 
815
>El <emphasis
 
816
>atributo</emphasis
 
817
> identifica el estilo que utilizaran los caracteres coincidentes por nombre, y el <emphasis
 
818
>contexto</emphasis
 
819
> identifica el contexto a utilizar desde aquí.</para>
 
820
 
 
821
<para
 
822
>El <emphasis
 
823
>contexto</emphasis
 
824
> se puede identificar por:</para>
 
825
 
 
826
<itemizedlist>
 
827
<listitem>
 
828
<para
 
829
>Un <emphasis
 
830
>identificador</emphasis
 
831
>, que es el nombre de los otros contextos.</para>
 
832
</listitem>
 
833
<listitem>
 
834
<para
 
835
>Una <emphasis
 
836
>orden</emphasis
 
837
> que le indica al motor que permanezca en el contexto actual (<userinput
 
838
>#stay</userinput
 
839
>), o que salte al contexto anterior (<userinput
 
840
>#pop</userinput
 
841
>).</para>
 
842
<para
 
843
>Para retroceder más pasos, se puede repetir la palabra clave #pop: <userinput
 
844
>#pop#pop#pop</userinput
 
845
></para>
 
846
</listitem>
 
847
</itemizedlist>
 
848
 
 
849
<para
 
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>
 
853
 
 
854
<programlisting
 
855
>&lt;NombreRegla (atributos)&gt;
 
856
  &lt;NombreReglaHija (atributos) /&gt;
 
857
  ...
 
858
&lt;/NombreRegla&gt;
 
859
</programlisting>
 
860
 
 
861
 
 
862
<para
 
863
>Los atributos específicos de la regla varían, y se describen en las siguientes secciones.</para>
 
864
 
 
865
 
 
866
<itemizedlist>
 
867
<title
 
868
>Atributos comunes</title>
 
869
<para
 
870
>Todas las reglas tienen los siguientes atributos comunes y están disponibles siempre que aparezcan <userinput
 
871
>(atributos comunes)</userinput
 
872
>. <emphasis
 
873
>attribute</emphasis
 
874
> y <emphasis
 
875
>context</emphasis
 
876
> son atributos requeridos, los demás son opcionales. </para>
 
877
 
 
878
<listitem>
 
879
<para
 
880
><emphasis
 
881
>attribute</emphasis
 
882
>: Un atributo se asigna a un determinado <emphasis
 
883
>itemData</emphasis
 
884
>.</para>
 
885
</listitem>
 
886
<listitem>
 
887
<para
 
888
><emphasis
 
889
>context</emphasis
 
890
>: Especifica el contexto al que cambiará el sistema de resaltado si las reglas coinciden.</para>
 
891
</listitem>
 
892
<listitem>
 
893
<para
 
894
><emphasis
 
895
>beginRegion</emphasis
 
896
>: Inicia un bloque de plegado de código. Valor predeterminado: unset.</para>
 
897
</listitem>
 
898
<listitem>
 
899
<para
 
900
><emphasis
 
901
>endRegion</emphasis
 
902
>: Finaliza un bloque de plegado de código. Valor predeterminado: unset.</para>
 
903
</listitem>
 
904
<listitem>
 
905
<para
 
906
><emphasis
 
907
>lookAhead</emphasis
 
908
>: Si vale <emphasis
 
909
>true</emphasis
 
910
>, el sistema de resaltado no procesará las longitudes coincidentes. Valor predeterminado: <emphasis
 
911
>false</emphasis
 
912
>.</para>
 
913
</listitem>
 
914
<listitem>
 
915
<para
 
916
><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
 
919
>false</emphasis
 
920
>.</para>
 
921
</listitem>
 
922
<listitem>
 
923
<para
 
924
><emphasis
 
925
>column</emphasis
 
926
>: Únicamente coincidirá si coincide la columna. Valor predeterminado: unset.</para>
 
927
</listitem>
 
928
</itemizedlist>
 
929
 
 
930
<itemizedlist>
 
931
<title
 
932
>Reglas dinámicas</title>
 
933
<para
 
934
>Algunas reglas permiten el atributo opcional <userinput
 
935
>dynamic</userinput
 
936
> de tipo lógico, cuyo valor predeterminado es <emphasis
 
937
>false</emphasis
 
938
>. Si dynamic vale <emphasis
 
939
>true</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
 
943
>string</userinput
 
944
> o <userinput
 
945
>char</userinput
 
946
>. En un <userinput
 
947
>string</userinput
 
948
>, el argumento <replaceable
 
949
>%N</replaceable
 
950
> (donde N es un número) se reemplazará con el equivalente <replaceable
 
951
>N</replaceable
 
952
> de la llamada de la expresión regular. En un <userinput
 
953
>char</userinput
 
954
> el argumento debería ser un número <replaceable
 
955
>N</replaceable
 
956
> y será reemplazado con el primer carácter del equivalente <replaceable
 
957
>N</replaceable
 
958
> de la llamada de la expresión regular. Siempre que un regla permita este atributo deberá contener un <emphasis
 
959
>(dynamic)</emphasis
 
960
>.</para>
 
961
 
 
962
<listitem>
 
963
<para
 
964
><emphasis
 
965
>dynamic</emphasis
 
966
>: puede ser <emphasis
 
967
>(true|false)</emphasis
 
968
>.</para>
 
969
</listitem>
 
970
</itemizedlist>
 
971
 
 
972
<sect2 id="highlighting-rules-in-detail">
 
973
<title
 
974
>Las reglas al detalle</title>
 
975
 
 
976
<variablelist>
 
977
<varlistentry>
 
978
<term
 
979
>DetectChar</term>
 
980
<listitem>
 
981
<para
 
982
>Detecta un único carácter especificado. Normalmente se utiliza, por ejemplo, para hallar el final de las cadenas entrecomilladas.</para>
 
983
<programlisting
 
984
>&lt;DetectChar char=&quot;(carácter)&quot; (atributos comunes) (dynamic) /&gt;</programlisting>
 
985
<para
 
986
>El atributo <userinput
 
987
>char</userinput
 
988
> define el carácter que debe coincidir.</para>
 
989
</listitem>
 
990
</varlistentry>
 
991
 
 
992
<varlistentry>
 
993
<term
 
994
>Detect2Chars</term>
 
995
<listitem>
 
996
<para
 
997
>Detecta dos caracteres especificados en el orden definido.</para>
 
998
<programlisting
 
999
>&lt;Detect2Chars char=&quot;(carácter)&quot; char1=&quot;(carácter)&quot; (atributos comunes) (dynamic) /&gt;</programlisting>
 
1000
<para
 
1001
>El atributo <userinput
 
1002
>char</userinput
 
1003
> define el primer carácter que debe coincidir, <userinput
 
1004
>char1</userinput
 
1005
> el segundo.</para>
 
1006
</listitem>
 
1007
</varlistentry>
 
1008
 
 
1009
<varlistentry>
 
1010
<term
 
1011
>AnyChar</term>
 
1012
<listitem>
 
1013
<para
 
1014
>Detecta un carácter de un conjunto de caracteres especificados.</para>
 
1015
<programlisting
 
1016
>&lt;AnyChar String=&quot;(cadena)&quot; (atributos comunes) /&gt;</programlisting>
 
1017
<para
 
1018
>El atributo <userinput
 
1019
>String</userinput
 
1020
> define el conjunto de caracteres.</para>
 
1021
</listitem>
 
1022
</varlistentry>
 
1023
 
 
1024
<varlistentry>
 
1025
<term
 
1026
>StringDetect</term>
 
1027
<listitem>
 
1028
<para
 
1029
>Detecta una cadena exacta.</para>
 
1030
<programlisting
 
1031
>&lt;StringDetect String=&quot;(string)&quot; [insensitive=&quot;true|false&quot;] (atributos comunes) (dynamic) /&gt;</programlisting>
 
1032
<para
 
1033
>El atributo <userinput
 
1034
>String</userinput
 
1035
> define la cadena a localizar. El atributo <userinput
 
1036
>insensitive</userinput
 
1037
> tiene como valor predeterminado <emphasis
 
1038
>false</emphasis
 
1039
> y se pasa a la función de comparación de cadena. Si el valor es <emphasis
 
1040
>true</emphasis
 
1041
> la comparación no es sensible a mayúsculas y minúsculas.</para>
 
1042
</listitem>
 
1043
</varlistentry>
 
1044
 
 
1045
<varlistentry>
 
1046
<term
 
1047
>WordDetect</term>
 
1048
<listitem>
 
1049
<para
 
1050
>Detecta una cadena exacta, pero también necesita delimitadores de palabra como un punto<userinput
 
1051
>«.»</userinput
 
1052
> o un espacio al principio y al final de la palabra. Piense en <userinput
 
1053
>\b&lt;string&gt;\b</userinput
 
1054
> como expresión regular, pero es más rápido que la regla <userinput
 
1055
>RegExpr </userinput
 
1056
>.</para>
 
1057
<programlisting
 
1058
>&lt;WordDetect String=&quot;(string)&quot; [insensitive=&quot;true|false&quot;] (atributos comunes) (dynamic) /&gt;</programlisting>
 
1059
<para
 
1060
>El atributo <userinput
 
1061
>String</userinput
 
1062
> define la cadena a localizar. El atributo <userinput
 
1063
>insensitive</userinput
 
1064
> tiene como valor predeterminado <emphasis
 
1065
>false</emphasis
 
1066
> y se pasa a la función de comparación de cadena. Si el valor es <emphasis
 
1067
>true</emphasis
 
1068
> la comparación no es sensible a mayúsculas y minúsculas.</para>
 
1069
<para
 
1070
>Desde: Kate 3.5 (KDE 4.5)</para>
 
1071
</listitem>
 
1072
</varlistentry>
 
1073
 
 
1074
<varlistentry>
 
1075
<term
 
1076
>RegExpr</term>
 
1077
<listitem>
 
1078
<para
 
1079
>Busca la coincidencia con una expresión regular.</para>
 
1080
<programlisting
 
1081
>&lt;RegExpr String=&quot;(string)&quot; [insensitive=&quot;true|false&quot;] [minimal=&quot;true|false&quot;] (atributos comunes) (dynamic) /&gt;</programlisting>
 
1082
<para
 
1083
>El atributo <userinput
 
1084
>String</userinput
 
1085
> define la expresión regular.</para>
 
1086
<para
 
1087
><userinput
 
1088
>insensitive</userinput
 
1089
> tiene <emphasis
 
1090
>false</emphasis
 
1091
> como valor predeterminado y se pasa al motor de expresiones regulares.</para>
 
1092
<para
 
1093
><userinput
 
1094
>minimal</userinput
 
1095
> tiene <emphasis
 
1096
>false</emphasis
 
1097
> como valor predeterminado y se pasa al motor de expresiones regulares.</para>
 
1098
<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
 
1100
>^</literal
 
1101
>) indica que la regla se debe comparar únicamente con el principio de una línea.</para>
 
1102
<para
 
1103
>Vea la sección sobre <link linkend="regular-expressions"
 
1104
>expresiones regulares</link
 
1105
> para obtener más información.</para>
 
1106
</listitem>
 
1107
</varlistentry>
 
1108
 
 
1109
<varlistentry>
 
1110
<term
 
1111
>keyword</term>
 
1112
<listitem>
 
1113
<para
 
1114
>Detecta una palabra clave de una lista especificada.</para>
 
1115
<programlisting
 
1116
>&lt;keyword String=&quot;(nombre de la lista)&quot; (atributos comunes) /&gt;</programlisting>
 
1117
<para
 
1118
>El atributo <userinput
 
1119
>String</userinput
 
1120
> identifica la lista de palabras clave por su nombre. Debe existir una lista con ese nombre.</para>
 
1121
</listitem>
 
1122
</varlistentry>
 
1123
 
 
1124
<varlistentry>
 
1125
<term
 
1126
>Int</term>
 
1127
<listitem>
 
1128
<para
 
1129
>Detecta un número entero.</para>
 
1130
<para
 
1131
><programlisting
 
1132
>&lt;Int (atributos comunes) (dynamic) /&gt;</programlisting
 
1133
></para>
 
1134
<para
 
1135
>Esta regla no tiene atributos específicos. Las reglas hijas normalmente se utilizan para detectar combinaciones de <userinput
 
1136
>L</userinput
 
1137
> y <userinput
 
1138
>U</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
 
1140
>DTD</acronym
 
1141
> únicamente permite la regla hija <userinput
 
1142
>StringDetect</userinput
 
1143
>.</para>
 
1144
<para
 
1145
>El siguiente ejemplo encuentra números enteros seguidos del carácter 'L'. <programlisting
 
1146
>&lt;Int attribute="Decimal" context="#stay" &gt;
 
1147
  &lt;StringDetect attribute="Decimal" context="#stay" String="L" insensitive="true"/&gt;
 
1148
&lt;/Int&gt;
 
1149
</programlisting
 
1150
></para>
 
1151
 
 
1152
</listitem>
 
1153
</varlistentry>
 
1154
 
 
1155
<varlistentry>
 
1156
<term
 
1157
>Float</term>
 
1158
<listitem>
 
1159
<para
 
1160
>Detecta un número de coma flotante.</para>
 
1161
<para
 
1162
><programlisting
 
1163
>&lt;Float (atributos comunes) /&gt;</programlisting
 
1164
></para>
 
1165
<para
 
1166
>Esta regla no tiene atributos específicos. Se permite <userinput
 
1167
>AnyChar</userinput
 
1168
> como regla hija y normalmente se utiliza para detectar combinaciones, vea la regla <userinput
 
1169
>Int</userinput
 
1170
> para obtener una referencia.</para>
 
1171
</listitem>
 
1172
</varlistentry>
 
1173
 
 
1174
<varlistentry>
 
1175
<term
 
1176
>HlCOct</term>
 
1177
<listitem>
 
1178
<para
 
1179
>Detecta una representación numérica de un número octal.</para>
 
1180
<para
 
1181
><programlisting
 
1182
>&lt;HlCOct (atributos comunes) /&gt;</programlisting
 
1183
></para>
 
1184
<para
 
1185
>Esta regla no tiene atributos específicos.</para>
 
1186
</listitem>
 
1187
</varlistentry>
 
1188
 
 
1189
<varlistentry>
 
1190
<term
 
1191
>HlCHex</term>
 
1192
<listitem>
 
1193
<para
 
1194
>Detecta una representación numérica de un número hexadecimal.</para>
 
1195
<para
 
1196
><programlisting
 
1197
>&lt;HlCHex (atributos comunes) /&gt;</programlisting
 
1198
></para>
 
1199
<para
 
1200
>Esta regla no tiene atributos específicos.</para>
 
1201
</listitem>
 
1202
</varlistentry>
 
1203
 
 
1204
<varlistentry>
 
1205
<term
 
1206
>HlCStringChar</term>
 
1207
<listitem>
 
1208
<para
 
1209
>Detecta un carácter escapado.</para>
 
1210
<para
 
1211
><programlisting
 
1212
>&lt;HlCStringChar (atributos comunes) /&gt;</programlisting
 
1213
></para>
 
1214
<para
 
1215
>Esta regla no tiene atributos específicos.</para>
 
1216
 
 
1217
<para
 
1218
>Localiza representaciones tipográficas de caracteres que se utilizan habitualmente en el código de programación, por ejemplo <userinput
 
1219
>\n</userinput
 
1220
> (nueva línea) o <userinput
 
1221
>\t</userinput
 
1222
> (TAB).</para>
 
1223
 
 
1224
<para
 
1225
>Los siguientes caracteres cumplirán con la regla si siguen a una barra inversa (<literal
 
1226
>\</literal
 
1227
>): <userinput
 
1228
>abefnrtv&quot;'?\</userinput
 
1229
>. Además, coincidirán los números hexadecimales escapados como, por ejemplo, <userinput
 
1230
>\xff</userinput
 
1231
>, y los números octales escapados como <userinput
 
1232
>\033</userinput
 
1233
>.</para>
 
1234
 
 
1235
</listitem>
 
1236
</varlistentry>
 
1237
 
 
1238
<varlistentry>
 
1239
<term
 
1240
>HlCChar</term>
 
1241
<listitem>
 
1242
<para
 
1243
>Detecta un carácter C.</para>
 
1244
<para
 
1245
><programlisting
 
1246
>&lt;HlCChar (atributos comunes) /&gt;</programlisting
 
1247
></para>
 
1248
<para
 
1249
>Esta regla no tiene atributos específicos.</para>
 
1250
 
 
1251
<para
 
1252
>Localiza caracteres C encerrados en una marca (Ejemplo: <userinput
 
1253
>'c'</userinput
 
1254
>). La marca puede ser un carácter sencillo o un carácter escapado. Vea HICStringChar para localizar secuencias de caracteres escapados.</para>
 
1255
 
 
1256
</listitem>
 
1257
</varlistentry>
 
1258
 
 
1259
<varlistentry>
 
1260
<term
 
1261
>RangeDetect</term>
 
1262
<listitem>
 
1263
<para
 
1264
>Detecta una cadena con caracteres de inicio y fin definidos.</para>
 
1265
<programlisting
 
1266
>&lt;RangeDetect char=&quot;(carácter)&quot;  char1=&quot;(carácter)&quot; (atributos comunes) /&gt;</programlisting>
 
1267
<para
 
1268
><userinput
 
1269
>char</userinput
 
1270
> define el carácter que inicia el intervalo, <userinput
 
1271
>char1</userinput
 
1272
> el carácter que finaliza el rango.</para>
 
1273
<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>
 
1275
</listitem>
 
1276
</varlistentry>
 
1277
 
 
1278
<varlistentry>
 
1279
<term
 
1280
>LineContinue</term>
 
1281
<listitem>
 
1282
<para
 
1283
>Coincide con una barra inversa (<userinput
 
1284
>'\'</userinput
 
1285
>) al final de una línea.</para>
 
1286
<programlisting
 
1287
>&lt;LineContinue (atributos comunes) /&gt;</programlisting>
 
1288
<para
 
1289
>Esta regla no tiene atributos específicos.</para>
 
1290
<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
 
1292
>'\'</userinput
 
1293
>). Esto es necesario por ejemplo en C/C++ para continuar macros o cadenas.</para>
 
1294
</listitem>
 
1295
</varlistentry>
 
1296
 
 
1297
<varlistentry>
 
1298
<term
 
1299
>IncludeRules</term>
 
1300
<listitem>
 
1301
<para
 
1302
>Incluye reglas de otro contexto o lenguaje/archivo.</para>
 
1303
<programlisting
 
1304
>&lt;IncludeRules context=&quot;contextlink&quot; [includeAttrib=&quot;true|false&quot;] /&gt;</programlisting>
 
1305
 
 
1306
<para
 
1307
>El atributo <userinput
 
1308
>context</userinput
 
1309
> define el contexto a incluir.</para>
 
1310
<para
 
1311
>Si es una cadena sencilla incluye todas las reglas definidas en el contexto actual, ejemplo: <programlisting
 
1312
>&lt;IncludeRules context=&quot;anotherContext&quot; /&gt;</programlisting
 
1313
></para>
 
1314
 
 
1315
<para
 
1316
>Si la cadena comienza con <userinput
 
1317
>##</userinput
 
1318
> el sistema de resaltado buscará otra definición de lenguaje con el nombre dado, ejemplo: <programlisting
 
1319
>&lt;IncludeRules context=&quot;##C++&quot; /&gt;</programlisting
 
1320
></para>
 
1321
<para
 
1322
>Si el atributo <userinput
 
1323
>includeAttrib</userinput
 
1324
> vale <emphasis
 
1325
>true </emphasis
 
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>
 
1327
</listitem>
 
1328
</varlistentry>
 
1329
 
 
1330
 
 
1331
<varlistentry>
 
1332
<term
 
1333
>DetectSpaces</term>
 
1334
<listitem>
 
1335
<para
 
1336
>Detectar espacios en blanco.</para>
 
1337
<programlisting
 
1338
>&lt;DetectSpaces (atributos comunes) /&gt;</programlisting>
 
1339
 
 
1340
<para
 
1341
>Esta regla no tiene atributos específicos.</para>
 
1342
<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>
 
1344
</listitem>
 
1345
</varlistentry>
 
1346
 
 
1347
 
 
1348
<varlistentry>
 
1349
<term
 
1350
>DetectIdentifier</term>
 
1351
<listitem>
 
1352
<para
 
1353
>Detecta identificadores de cadenas (como una expresión regular: [a-zA-Z_][a-zA-Z0-9_]*).</para>
 
1354
<programlisting
 
1355
>&lt;DetectIdentifier (atributos comunes) /&gt;</programlisting>
 
1356
 
 
1357
<para
 
1358
>Esta regla no tiene atributos específicos.</para>
 
1359
<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>
 
1361
</listitem>
 
1362
</varlistentry>
 
1363
 
 
1364
</variablelist>
 
1365
</sect2>
 
1366
 
 
1367
<sect2>
 
1368
<title
 
1369
>Trucos y consejos</title>
 
1370
 
 
1371
<itemizedlist>
 
1372
<para
 
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>
 
1374
 
 
1375
<listitem>
 
1376
<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
 
1383
>.</para>
 
1384
</listitem>
 
1385
<listitem>
 
1386
<para
 
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
 
1388
>'#'</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
>&lt;RegExpr attribute=&quot;Macro&quot; context=&quot;macro&quot; String=&quot;^\s*&quot; /&gt;</programlisting
 
1391
> Puede conseguir lo mismo mucho más rápido utilizando: <programlisting
 
1392
>&lt;DetectChar attribute=&quot;Macro&quot; context=&quot;macro&quot; char=&quot;#&quot; firstNonSpace=&quot;true&quot; /&gt;</programlisting
 
1393
> Si desea que la expresión regular localice <userinput
 
1394
>'^#'</userinput
 
1395
> también puede utilizar <userinput
 
1396
>DetectChar</userinput
 
1397
> con el atributo <userinput
 
1398
>column=&quot;0&quot;</userinput
 
1399
>. El atributo <userinput
 
1400
>column</userinput
 
1401
> cuenta los caracteres base, por tanto el tabulador es solo un carácter. </para>
 
1402
</listitem>
 
1403
<listitem>
 
1404
<para
 
1405
>Puede cambiar de contexto sin procesar caracteres. Suponga que desea cambiar de contexto cuando encuentra una cadena <userinput
 
1406
>*/ </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
>&lt;Detect2Chars attribute=&quot;Comment&quot; context=&quot;#pop&quot; char=&quot;*&quot; char1=&quot;/&quot; lookAhead=&quot;true&quot; /&gt;</programlisting>
 
1411
</para>
 
1412
</listitem>
 
1413
<listitem>
 
1414
<para
 
1415
>Utilice <userinput
 
1416
>DetectSpaces</userinput
 
1417
> si sabe cuantos espacios en blanco existen.</para>
 
1418
</listitem>
 
1419
<listitem>
 
1420
<para
 
1421
>Utilice <userinput
 
1422
>DetectIdentifier</userinput
 
1423
> en lugar de la expresión regular <userinput
 
1424
>'[a-zA-Z_]\w*'</userinput
 
1425
>.</para>
 
1426
</listitem>
 
1427
<listitem>
 
1428
<para
 
1429
>Utilice los estilos predeterminados siempre que pueda. De esta forma el usuario se encontrará con un entorno familiar.</para>
 
1430
</listitem>
 
1431
<listitem>
 
1432
<para
 
1433
>Vea otros archivos XML para comprobar de qué forma otras personas implementan reglas delicadas.</para>
 
1434
</listitem>
 
1435
<listitem>
 
1436
<para
 
1437
>Puede validar cada uno de los archivos XML utilizando la orden <command
 
1438
>xmllint --dtdvalid lenguaje.dtd miSintaxis.xml</command
 
1439
>.</para>
 
1440
</listitem>
 
1441
<listitem>
 
1442
<para
 
1443
>Si repite expresiones regulares complejas muy frecuentemente puede utlizar <emphasis
 
1444
>ENTITIES</emphasis
 
1445
> (entidades). Ejemplo:</para>
 
1446
<programlisting
 
1447
>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
 
1448
&lt;!DOCTYPE language SYSTEM "lenguaje.dtd"
 
1449
[
 
1450
        &lt;!ENTITY miref    "[A-Za-z_:][\w.:_-]*"&gt;
 
1451
]&gt;
 
1452
</programlisting>
 
1453
<para
 
1454
>Ahora puede utilizar <emphasis
 
1455
>&amp;miref;</emphasis
 
1456
> en lugar de la expresión regular.</para>
 
1457
</listitem>
 
1458
</itemizedlist>
 
1459
</sect2>
 
1460
 
 
1461
</sect1>
 
1462
 
 
1463
</appendix>