]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/es/usage/updating.itely
Doc-es: update Usage/Updating.
[lilypond.git] / Documentation / es / usage / updating.itely
1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
2
3 @ignore
4     Translation of GIT committish: 094be7d770e887169f70249804e1e96e04a44ca5
5
6     When revising a translation, copy the HEAD committish of the
7     version that you are working on.  For details, see the Contributors'
8     Guide, node Updating translation committishes..
9 @end ignore
10
11 @c \version "2.16.0"
12
13
14 @node Actualizar ficheros con convert-ly
15 @chapter Actualizar ficheros con @command{convert-ly}
16 @translationof Updating files with convert-ly
17
18 @cindex actualización de un archivo de LilyPond
19 @cindex convert-ly
20
21 Según LilyPond va mejorando, puede cambiar la sintaxis de algunas
22 instrucciones y funcioens del lenguaje de entrada.  Ello puede
23 conducir a errores inesperados, advertencias y hasta salida
24 errónea cada vez que se utilizan con la versión actual de LilyPond
25 archivos de entrada que habían sido creados para versiones
26 anteriores.
27
28 Como ayuda para este problema, puede usarse la herramienta
29 @command{convert-ly} para actualizar esos archivos de entrada
30 antiguos y que sigan la sintaxis nueva.
31
32 @menu
33 * ¿Por qué cambia la sintaxis?::
34 * Invocar convert-ly::
35 * Opciones de la línea de órdenes para convert-ly::
36 * Problemas con convert-ly::
37 * Conversiones manuales::
38 * Escritura de código que contemple varias versiones::
39 @end menu
40
41
42 @node ¿Por qué cambia la sintaxis?
43 @section ¿Por qué cambia la sintaxis?
44 @translationof Why does the syntax change?
45
46 @cindex convert-ly
47 @cindex actualizar archivos de entrada antiguos
48
49 Con frecuencia, los cambios en la sintaxis se llevan a cabo para
50 hacer que la entrada sea más sencilla tanto de leer como de
51 escribir, pero en ocasiones se hacen los cambios para acomodar
52 nuevas funcionalidades o mejoras para las funciones existentes.
53
54 Lo ilustramos a continuación con un ejemplo real:
55
56 Se supone que todos los nombres de las propiedades de
57 @code{\paper} y de @code{\layout} están escritos en la forma
58 @code{primero-segundo-tercero}.  Sin embargo, en la versión
59 2.11.60, observamos que la propiedad @code{printallheaders} no
60 seguía esta convención.  ¿Deberíamos dejarla como está
61 (confundiendo a los nuevos usuarios que tienen que tratar con un
62 formato de entrada inconsistente), o cambiarla (fastidiando a los
63 usuarios con experiencia que tienen partituras antiguas)?
64
65 Se tomó la decisión de cambiar el nombre de la propiedad por
66 @code{print-all-headers}, y mediante el uso de la herramienta
67 @command{convert-ly} se dio a los usuarios existentes la
68 posibiilidad de actualizar automáticamente los archivos de entrada
69 que tenían previamente.
70
71 Sin embargo, el uso de la herramienta @command{convert-ly} no
72 permite tratar todos los cambios de sintaxis.  En versiones de
73 LilyPond anteriores a la 2.4.2, los acentos y las letras no
74 inglesas se introducían utilizando LaTeX: por ejemplo,
75 @code{No\"el} (que significa @q{Navidad} en francés).  Pero a
76 partir de LilyPond 2.6, el carácter especial @code{ë} debe
77 introducirse directamente en el archivo de LilyPond como un
78 carácter UTF-8.  La herramienta @command{convert-ly} no sabe cómo
79 cambiar los caracteres especiales de LaTeX a caracteres de UTF-8;
80 tendrá que actualizar manualmente sus archivos de LilyPond
81 antiguos.
82
83 Las reglas de conversión de @command{convert-ly} funcionan usando
84 correspondencia y sustitución de patrones de texto en lugar de una
85 @q{comprensión} profunda de los cambios producidos en un archivo
86 dado.  Esto tiene varias consecuencias:
87
88 @itemize @bullet
89 @item
90 El buen funcionamiento de la conversión depende de la calidad de
91 cada conjunto de reglas que se aplican y de la complejidad del
92 cambio correspondiente.  A veces las conversiones pueden necesitar
93 correcciones manuales adicionales, por lo que los archivos
94 originales deberían conservarse a efectos de comparación, si es
95 necesario.
96
97 @item
98 Solamente son posibles las conversiones a las sintaxis más
99 recientes: no existe ningún conjunto de reglas para volver a
100 versiones más antiguas de LilyPond.  Así pues, el archivo de
101 entrada solamente se debe actualizar cuando ya no se mantienen las
102 versiones antiguas de LilyPond.  De nuevo, es conveniente
103 conservar, por si acaso, los archivos de entrada, quizá mediante
104 el uso de un sistema de control de versiones como el Git, que
105 puede ser de gran ayuda para realizar el mantenimiento de varias
106 versiones de los mismos archivos.
107
108 @item
109 LilyPond es bastante robusto al procesar espacios añadidos y
110 suprimidos de manera @qq{creativa}, pero las reglas utilizadas por
111 @command{convert-ly} con frecuencia hacen ciertas suposiciones de
112 estilo.  Por tanto, se recomienda seguir el estilo de la entrada
113 tal y como se usa en los manuales de LilyPond para que las
114 actualizaciones sean indoloras, especialmente porque todos los
115 ejemplos de los propios manuales se actualizan usando la
116 herramienta @command{convert-ly}.
117 @end itemize
118
119
120 @node Invocar convert-ly
121 @section Invocar @command{convert-ly}
122 @translationof Invoking convert-ly
123
124 La herramienta @command{convert-ly} utiliza los enunciados
125 @code{\version} del archivo de entrada para detectar el número de
126 versión antiguo.  En casi todos los casos, para actualizar el
127 archivo de entrada basta con ejecutar lo siguiente:
128
129 @example
130 convert-ly -e miarchivo.ly
131 @end example
132
133 @noindent
134 dentro del directorio que contiene el archivo de entrada.  Con
135 esto se actualiza @file{miarchivo.ly} @emph{in situ} y se preserva
136 el archivo original renombrándolo como @file{miarchivo.ly~}.  Se
137 modifica también el número de @code{\version} en el archivo
138 actualizado además de la necesaria puesta al día de la sintaxis.
139
140 Al ejecutarse, la herramienta @command{convert-ly} imprime los
141 números de versión de las conversiones que se han hecho.  Si no
142 aparece en el listado ningún número de versión para este archivo,
143 significa que ya está actualizado y que es compatible con la
144 sintaxis de la última versión de LilyPond.
145
146 @warning{Para cada versión nueva de LilyPond, se crea una
147 herramienta @command{convert-ly} asimismo nueva, aunque no todas y
148 cada una de las versiones de LilyPond requiere cambios en la
149 sintaxis de sus archivos de entrada a partir de la versión
150 anterior.  Ello significa que la herramienta @command{convert-ly}
151 solamente convierte archivos hasta el último cambio de sintaxis
152 que tiene, lo que a su vez podría implicar que el número de
153 @code{\version} que se escribe en el archivo actualizado es, a
154 veces, anterior que la versión de la propia herramienta
155 @command{convert-ly}.}
156
157 Para convertir todos los archivos de entrada que hay en un solo
158 directorio, utilice lo siguiente:
159
160 @example
161 convert-ly -e *.ly
162 @end example
163
164 Tanto los usuarios de Linux como los de MacOS@tie{}X pueden usar
165 la aplicación de terminal correspondiente, pero los usuarios de
166 MacOS@tie{}X pueden también ejecutar esta orden directamente desde
167 el menú @code{Compilar > Actualizar la sintaxis}.
168
169 Un usuario de Windows ejecutaría la instrucción:
170
171 @example
172 convert-ly.py -e *.ly
173 @end example
174
175 @noindent
176 escribiéndola en un terminal de línea de órdenes o @code{indicador
177 del sistema} que normalmente se encuentra bajo @code{Inicio >
178 Accessorios > Consola de órdenes} o, para los usuarios de la
179 versión 8, escribiendo en la ventana de búsqueda @q{consola de
180 órdenes}.
181
182 Para converitr todos los archivos de entrada que residen en
183 distintos conjuntos de subdirectorios:
184
185 @example
186 find . -name '*.ly' -exec convert-ly -e '@{@}' \;
187 @end example
188
189 Este ejemplo busca y convierte todos los archivos de entrada que
190 están en el directorio actual y en todos los directorios que están
191 dentro de él, de forma recursiva.  Los archivos convertidos se
192 colocan en el mismo directorio que sus originales renombrados.
193 También debería funcionar para los usuarios de MacOS@tie{}X, si
194 bien solamente a través de la aplicación de terminal.
195
196 Los usuarios de Windows deben hacer lo siguiente:
197
198 @example
199 forfiles /s /M *.ly /c "cmd /c convert-ly.py -e @@file"
200 @end example
201
202 Como alternativa, se puede indicar una ruta explícita al nivel
203 superior del directorio que contiene todos los sub-directorios que
204 contienen archivos de entrada, mediante la opción @code{/p}:
205
206 @example
207 forfiles /s /p C:\Documentos\MisPartituras /M *.ly /c "cmd /c convert-ly.py -e @@file"
208 @end example
209
210 Si el nombre o la ruta del directorio de nivel superior contienen
211 espacios, entonces hay que poner entre comillas la ruta completa:
212
213 @example
214 forfiles /s /p "C:\Documentos\Mis Partituras" /M *.ly /c "cmd /c convert-ly.py -e @@file"
215 @end example
216
217
218
219 @node Opciones de la línea de órdenes para convert-ly
220 @section Opciones de la línea de órdenes para @command{convert-ly}
221 @translationof Command line options for convert-ly
222
223 En general, el programa se invoca de la manera siguiente:
224
225 @example
226 convert-ly [@var{opción}]@dots{} @var{archivo}@dots{}
227 @end example
228
229 Se pueden dar las siguientes opciones:
230
231 @table @code
232 @item -d, --diff-version-update
233 incrementar la cadena @code{\version} solamente si el archivo
234 efectivamente ha cambiado.  En tal caso, la cabecera de versión
235 corresponderá a la versión siguiente al último cambio efectivo.
236 Los números de las versiones de desarrollo se redondean hacia
237 arriba al número de la siguiente versión estable, a no ser que
238 fuera superior al número de la versión objetivo.  Sin esa opción,
239 la versión refleja la última conversión que se @emph{intentó}
240 hacer.
241
242 @item -e, --edit
243 Aplicar las conversiones directamente al archivo de entrada,
244 modificándolo in situ.  El archivo original se cambia de nombre a
245 @file{miarchivo.ly~}.  Este archivo de copia de seguridad podría
246 ser un archivo oculto en algunos sistemas operativos.  Como
247 alternativa, si queremos especificar un nombre distinto para el
248 archivo actualizado sin que la tilde curva @code{~},
249 predeterminada de la opción @code{-e}, se añada al final del
250 nombre del archivo antiguo, se puede en su lugar redirigir la
251 entrada:
252
253 @example
254 convert-ly miarchivo.ly > miarchivonuevo.ly
255 @end example
256
257 Los usuarios de Windows harán lo siguiente:
258
259 @example
260 convert-ly.py miarchivo.ly > miarchivonuevo.ly
261 @end example
262
263 @item -b, --backup-numbered
264 Cuando se usa con la opción @samp{-e}, numerar los archivos de
265 copia de seguridad de forma que no se sobreescriba ninguna versión
266 anterior.  Los archivos de copia de seguridad podrían ser archivos
267 ocultos en algunos sistemas operativos.
268
269 @item -f, --from=@var{versión_de_origen}
270 Establece la versión desde la que convertir.  Si no aparece esta
271 opción, @command{convert-ly} tratará de adivinarla, basándose en el
272 enunciado @code{\version} del archivo.  Ejemplo: @option{--from=2.10.25}
273
274 @item -h, --help
275 Imprimir la ayuda de utilización.
276
277 @item -l @var{loglevel}, --loglevel=@var{loglevel}
278 Fijar el grado en que la salida es prolija a @var{loglevel}. Los
279 valores posibles son @code{NONE} (ninguno), @code{ERROR}
280 (errores), @code{WARNING} (advertencias), @code{PROGRESS} (avance;
281 predeterminado) y @code{DEBUG} (depuración).
282
283 @item -n, --no-version
284 Normalmente @command{convert-ly} añade un indicador
285 @code{\version} a la salida.  La especificación de esta opción lo
286 suprime.
287
288 @item -s, --show-rules
289 Mostrar todas las conversiones conocidas y salir.
290
291 @item -t, --to=@var{versión_final}
292 Fijar explícitamente a qué @code{\version} convertir, en caso
293 contrario el valor predeterminado es la versión más actual.  Debe
294 ser más alta que la versión de partida.
295
296 @example
297 convert-ly --to=2.14.1 miarchivo.ly
298 @end example
299
300 @end table
301
302 Para actualizar fragmentos de LilyPond en archivos de texinfo, use
303
304 @example
305 convert-ly --from=@dots{} --to=@dots{} --no-version *.itely
306 @end example
307
308 Para ver los cambios en la sintaxis de LilyPond entre dos
309 versiones dadas, use
310
311 @example
312 convert-ly --from=@dots{} --to=@dots{} -s
313 @end example
314
315
316 @node Problemas con convert-ly
317 @section Problemas con @code{convert-ly}
318 @translationof Problems running convert-ly
319
320 Al ejecutar convert-ly en una ventana del Símbolo del Sistema bajo
321 Windows sobre un archivo que tiene espacios en el nombre o en la
322 ruta, es necesario encerrar todo el nombre del archivo de entrada
323 con tres (!) pares de comillas:
324
325 @example
326 convert-ly """D:/Mis partituras/Oda.ly""" > "D:/Mis partituras/nueva Oda.ly"
327 @end example
328
329 Si la orden simple @command{convert-ly -e *.ly} no funciona porque
330 la instrucción expandida se hace muy larga, en vez de ello la
331 orden @command{convert-ly} se puede poner dentro de un bucle.
332 Este ejemplo para UNIX actualiza todos los documentos @file{.ly}
333 del directorio actual
334
335 @example
336 for f in *.ly; do convert-ly -e $f; done;
337 @end example
338
339 En la ventana del terminal de órdenes de Windows, la instrucción
340 correspondiente es
341
342 @example
343 for %x in (*.ly) do convert-ly -e """%x"""
344 @end example
345
346 No se manejan todos los cambios en el lenguaje.  Sólo se puede
347 especificar una opción de salida.  La actualización automática de
348 Scheme y los interfaces Scheme de LilyPond es bastante improbable;
349 prepárese para trucar el código de Scheme a mano.
350
351
352 @node Conversiones manuales
353 @section Conversiones manuales
354 @translationof Manual conversions
355
356 En teoría, un programa como @command{convert-ly} debería poder
357 tratar cualquier cambio en la sintaxis.  Después de todo, un
358 programa de ordenador interpreta las versiones antigua y nueva,
359 por lo que otro programa de ordenador podría traducir un archivo
360 al otro@footnote{Al menos, esto es posible en cualquier archivo de
361 LilyPond que no contenga Scheme.  Si hay Scheme dentro del
362 archivo, contiene un lenguaje Turing-completo, y nos encontramos
363 con el famoso @qq{Problema de la parada} en informática.}.
364
365 Sin embargo, el proyecto LilyPond cuenta con unos recursos
366 limitados: no todas las conversiones se efectúan automáticamente.
367 A continuación aparece una lista de los problemas conocidos.
368
369
370 @verbatim
371 1.6->2.0:
372  No siempre convierte el bajo cifrado correctamente, específicamente cosas como {<
373 >}.  El comentario de Mats sobre cómo solventar el problema:
374    Para poder ejecutar convert-ly
375    sobre él, primero sustituí todas las apariciones de '{<' a algo mudo como '{#'
376    y de forma similar sustituí '>}' con '&}'.  Después de la conversión, pude
377    volver a cambiarlos de '{ #' a '{ <' y de '& }' a '> }'.
378  No convierte todos los marcados de texto correctamente.  En sintaxis antigua,
379  se podían agrupar varios marcados entre paréntesis, p.ej.
380    -#'((bold italic) "cadena")
381    Esto se convierte incorrectamente en
382    -\markup{{\bold italic} "cadena"}
383    en vez del correcto
384    -\markup{\bold \italic "cadena"}
385 2.0->2.2:
386  No maneja \partcombine
387  No hace \addlyrics => \lyricsto, esto rompe algunas partituras con varias estrofas.
388 2.0->2.4:
389  \magnify no se cambia por \fontsize.
390     - \magnify #m => \fontsize #f, donde f = 6ln(m)/ln(2)
391  remove-tag no se cambia.
392     - \applyMusic #(remove-tag '. . .) => \keepWithTag #'. . .
393  first-page-number no se cambia.
394     - first-page-number no => print-first-page-number = ##f
395  Los saltos de línea en las cadenas de cabecera no se convierten.
396     - \\\\  como salto de línea en las cadenas de \header  => \markup \center-align <
397       "Primera línea" "Segunda línea" >
398  Los terminadores de crescendo y decrescendo no se convierten.
399     - \rced => \!
400     - \rc => \!
401 2.2->2.4:
402  \turnOff (usado en \set Staff.VoltaBracket = \turnOff) no se convierte
403 adecuadamente.
404 2.4.2->2.5.9
405  \markup{ \center-align <{ ... }> } se tendría que convertir en:
406  \markup{ \center-align {\line { ... }} }
407  pero ahora, falta el \line.
408 2.4->2.6
409  Los caracteres especiales de LaTeX como $~$ en el texto no se convierten a UTF8.
410 2.8
411  \score{} ahora debe empezar con una expresión musical.  Cualquier otra cosa
412  (en particular, \header{}) debe ir después de la música.
413 @end verbatim
414
415 @node Escritura de código que contemple varias versiones
416 @section Escritura de código que contemple varias versiones
417 @translationof Writing code to support multiple versions
418
419 En ciertos casos, especialmente al escribir código de
420 @emph{bibliotecas}, es deseable dar apoyo a más de una versión de
421 LilyPond, por encima de los cambios de sintaxis que rompen con la
422 práctica anterior.  Para hacerlo, se pueden envolver porciones de
423 código alternativas dentro de expresiones condicionales que
424 dependen de la versión de LilyPond que se está ejecutando
425 actualmente.  La función de Scheme @code{ly:version?}  admite un
426 operador de comparación @var{op} y una versión de referencia
427 @var{ver} que se pasa como una lista de enteros con un máximo de
428 tres elementos.  Se ignoran los elementos que faltan, de forma que
429 @code{'(2 20)} equivale a @emph{cualquier} versión de la línea de
430 2.20.  Son posibles construcciones como las siguientes:
431
432 @verbatim
433 #(cond
434   ((ly:version? > '(2 20))
435    (ly:message "Esto es código para LilyPond posterior a 2.20"))
436   ((ly:version? = '(2 19 57))
437    (ly:message "Esto solamente se ejecuta con LilyPond 2.19.57"))
438   (else (ly:message "Esto se ejecuta en cualquier otra versión")))
439 @end verbatim
440
441 Por lo general, esto se encontrará integrado dentro de funciones
442 de biblioteca que permitan usar más de un tipo de sintaxis
443 alternativas, pero también es posible usar la comparación
444 directamente dentro de la música como en el ejemplo siguiente:
445
446 @verbatim
447 {
448   c' d' e' f'
449   #(if (ly:version? = '(2 21))
450        #{ \override NoteHead.color = #red #}
451        #{ \override NoteHead.color = #blue #})
452   g' a' b' c''
453 }
454 @end verbatim
455
456 @strong{Nota:} Esta función fue introducida en LilyPond 2.19.57,
457 por lo que no es posible hacer la comparación con versiones
458 anteriores a esa.