Articulo de referencia

Nueva línea

Se insertó un salto de línea entre las palabras "Hola" y "mundo". Un salto de línea (frecuentemente llamado final de línea , fin de línea ( EOL ), siguiente línea ( NEL ) o rupt...

Se insertó un salto de línea entre las palabras "Hola" y "mundo".

Un salto de línea (frecuentemente llamado final de línea , fin de línea ( EOL ), siguiente línea ( NEL ) o ruptura de línea ) es un carácter de control o una secuencia de caracteres de control en especificaciones de codificación de caracteres como ASCII , EBCDIC , Unicode , etc. Un salto de línea se utiliza para indicar el final de una línea de texto y el comienzo de una nueva. [ 1 ]

Historia

A mediados del siglo XIX, mucho antes de la llegada de las teleimpresoras y los teletipos, los telegrafistas o operadores de código Morse inventaron y utilizaron señales Morse para codificar el formato de texto en blanco en mensajes de texto formales. En particular, la señal Morse BT (texto de ruptura mnemotécnico), representada por la concatenación de los caracteres textuales literales "B" y "T" del código Morse, enviada sin el espaciado habitual entre caracteres, se utiliza en código Morse para codificar e indicar una nueva línea o sección en un mensaje de texto formal.

Más tarde, en la era de los teletipos modernos , se desarrollaron códigos de control de conjuntos de caracteres estandarizados para facilitar el formato del texto con espacios en blanco. ASCII fue desarrollado simultáneamente por la Organización Internacional de Normalización (ISO) y la Asociación Estadounidense de Estándares (ASA), esta última predecesora del Instituto Nacional Estadounidense de Estándares (ANSI). Durante el período de 1963 a 1968, los borradores de las normas ISO admitían el uso de retorno de carro más salto de línea ( CR + LF ) o solo LF como salto de línea, mientras que los borradores de la ASA solo admitían CR + LF .

La secuencia CR + LF se usaba comúnmente en muchos de los primeros sistemas informáticos que habían adoptado máquinas de teletipo —típicamente un Teletipo Modelo 33 ASR— como dispositivo de consola, porque esta secuencia era necesaria para posicionar esas impresoras al inicio de una nueva línea. La separación del salto de línea en dos funciones ocultaba el hecho de que el cabezal de impresión no podía regresar desde el extremo derecho al principio de la siguiente línea a tiempo para imprimir el siguiente carácter. Cualquier carácter impreso después de un CR a menudo se imprimía como una mancha en el centro de la página mientras el cabezal de impresión aún movía el carro de vuelta a la primera posición. "La solución fue hacer que el salto de línea fuera dos caracteres: CR para mover el carro a la primera columna y LF para mover el papel hacia arriba". [ 2 ] De hecho, a menudo era necesario enviar caracteres de relleno adicionales —CR o NUL superfluos— que se ignoraban pero daban tiempo al cabezal de impresión para moverse al margen izquierdo. Muchas de las primeras pantallas de vídeo también requerían varios tiempos de caracteres para desplazar la pantalla.

En estos sistemas, las aplicaciones debían comunicarse directamente con la máquina de teletipo y seguir sus convenciones, ya que el concepto de controladores de dispositivo que ocultaban estos detalles de hardware a la aplicación aún no estaba bien desarrollado. Por lo tanto, el texto se componía habitualmente para satisfacer las necesidades de las máquinas de teletipo. La mayoría de los sistemas de minicomputadoras de DEC utilizaban esta convención. CP/M también la empleaba para imprimir en los mismos terminales que las minicomputadoras. Posteriormente, MS-DOS (1981) adoptó la convención CR + LF de CP/M para ser compatible, y esta convención fue heredada por el sistema operativo Windows de Microsoft .

El sistema operativo Multics comenzó a desarrollarse en 1964 y utilizaba únicamente LF como salto de línea. Multics empleaba un controlador de dispositivo para traducir este carácter a la secuencia que necesitara la impresora (incluidos caracteres de relleno adicionales ), y el byte único resultaba más conveniente para la programación. No se utilizó la opción más obvia, CR , ya que CR proporcionaba la útil función de superponer una línea con otra para crear efectos de negrita , subrayado y tachado . Quizás aún más importante , el uso de LF como terminador de línea ya se había incorporado a los borradores del estándar ISO/IEC 646. Unix siguió la práctica de Multics, y posteriormente los sistemas tipo Unix siguieron la de Unix. Esto generó conflictos entre Windows y los sistemas operativos tipo Unix , de modo que los archivos creados en un sistema operativo no podían formatearse ni interpretarse correctamente en otro (por ejemplo, un script de shell de UNIX escrito en un editor de texto de Windows como el Bloc de notas [ 3 ] [ 4 ] ).

Representación

Los conceptos de retorno de carro (CR) y salto de línea (LF) están estrechamente relacionados y pueden considerarse por separado o juntos. En los soportes físicos de las máquinas de escribir e impresoras , se necesitan dos ejes de movimiento, "hacia abajo" y "hacia los lados", para crear una nueva línea en la página . Aunque el diseño de una máquina (máquina de escribir o impresora) debe considerarlos por separado, la lógica abstracta del software puede combinarlos como un solo evento. Por eso, un salto de línea en la codificación de caracteres puede definirse como CRy LFcombinarse en uno (comúnmente llamado CR+LFo CRLF).

Algunos conjuntos de caracteres proporcionan un código de carácter de salto de línea independiente. EBCDIC , por ejemplo, proporciona un código de carácter NL además de los códigos CR y LF . Unicode , además de proporcionar los códigos de control ASCII CR y LF , también proporciona un código de control de "siguiente línea" ( NEL ), así como códigos de control para los marcadores de "separador de línea" y "separador de párrafo". Unicode también contiene caracteres imprimibles para representar visualmente el salto de línea ␊, el retorno de carro ␍ y otros códigos de control C0 (así como un salto de línea genérico, ␤) en el bloque de imágenes de control .

  • Los sistemas EBCDIC —principalmente los sistemas mainframe de IBM , incluidos z/OS ( OS/390 ) e IBM i ( OS/400 )— utilizan NL (Nueva línea, 0x15 ) [ 8 ] como el carácter que combina las funciones de salto de línea y retorno de carro. El carácter Unicode equivalente ( ) se llama NEL (Siguiente línea). EBCDIC también tiene caracteres de control llamados CR y LF , pero el valor numérico de LF ( 0x25 ) difiere del utilizado por ASCII ( 0x0A ). Además, algunas variantes de EBCDIC también utilizan NL pero asignan un código numérico diferente al carácter. Sin embargo, esos sistemas operativos utilizan un sistema de archivos basado en registros , que almacena archivos de texto como un registro por línea. En la mayoría de los formatos de archivo, no se almacenan realmente terminadores de línea.0x85
  • Los sistemas operativos de la serie CDC 6000 definían un salto de línea como dos o más caracteres de seis bits con valor cero al final de una palabra de 60 bits. Algunas configuraciones también definían un carácter con valor cero como un carácter de dos puntos , lo que provocaba que varios dos puntos se interpretaran como un salto de línea según su posición.
  • RSX-11 y OpenVMS también utilizan un sistema de archivos basado en registros, que almacena archivos de texto como un registro por línea. En la mayoría de los formatos de archivo, no se almacenan terminadores de línea, pero la función de Servicios de Gestión de Registros (RMS) puede agregar un terminador a cada línea de forma transparente cuando una aplicación la recupera. Los propios registros pueden contener los mismos caracteres de terminador de línea, lo que puede considerarse una ventaja o un inconveniente según la aplicación. RMS no solo almacena registros, sino que también almacena metadatos sobre los separadores de registros en diferentes bits para el archivo, lo que complica aún más las cosas (ya que los archivos pueden tener registros de longitud fija, registros precedidos por un contador o registros terminados por un carácter específico). Los bits no son genéricos, por lo que, si bien pueden especificar que CR LF o LF o incluso CR es el terminador de línea, no pueden sustituir otro código.
  • Algunos de los primeros sistemas operativos para mainframes utilizaban una longitud de línea fija . En estos sistemas, se asumía un final de línea implícito cada 72 u 80 caracteres, por ejemplo. No se almacenaba ningún carácter de nueva línea. Si se importaba un archivo del exterior, las líneas más cortas que la longitud de línea debían rellenarse con espacios, mientras que las más largas debían truncarse. Esto imitaba el uso de tarjetas perforadas , en las que cada línea se almacenaba en una tarjeta independiente, generalmente con 80 columnas por tarjeta, a menudo con números de secuencia en las columnas 73 a 80. Muchos de estos sistemas añadían un carácter de control de carro al inicio del siguiente registro; este podía indicar si el siguiente registro era una continuación de la línea iniciada por el registro anterior, una nueva línea o si debía sobrescribir la línea anterior (similar a un CR ). A menudo, se trataba de un carácter de impresión normal, por lo que no podía utilizarse como primer carácter de una línea. Algunas de las primeras impresoras de línea interpretaban estos caracteres directamente en los registros que recibían.#

protocolos de comunicación

Muchos protocolos de comunicación tienen algún tipo de convención de nueva línea. En particular, los protocolos publicados por el Grupo de Trabajo de Ingeniería de Internet (IETF) suelen utilizar la secuencia ASCII CRLF.

En algunos protocolos más antiguos, la nueva línea puede ir seguida de un carácter de suma de comprobación o de paridad.

Unicode

El estándar Unicode define una serie de caracteres que las aplicaciones conformes deben reconocer como terminadores de línea: [ 9 ]

Aunque pueda parecer excesivamente complicado en comparación con un enfoque como convertir todos los terminadores de línea a un solo carácter (por ejemplo, LF ), dado que Unicode está diseñado para preservar toda la información al convertir un archivo de texto de cualquier codificación existente a Unicode y viceversa ( integridad de ida y vuelta ), Unicode necesita hacer las mismas distinciones entre los saltos de línea que hacen otras codificaciones. Por ejemplo, EBCDIC tiene los caracteres NL , CR y LF , por lo que los tres también deben existir en Unicode.

La mayoría de los caracteres y secuencias de salto de línea se encuentran en los controles C0 de ASCII (es decir, tienen puntos de código Unicode hasta 0x1F ). Los tres caracteres de salto de línea que quedan fuera de este rango —NEL , LS y PS— a menudo no son reconocidos como saltos de línea por el software. Por ejemplo:

  • JSON reconoce CR y LF como espacios en blanco, pero no ningún otro carácter de salto de línea. [ 10 ] Los controles C0 no pueden aparecer sin escape dentro de las cadenas, pero cualquier otro carácter de salto de línea sí puede. [ 11 ]
  • ECMAScript solo reconoce CR , LF , LS y PS como terminadores de línea. [ 12 ] Históricamente, no se permitían terminadores de línea sin escape en literales de cadena, [ 13 ] pero esto cambió en ES2019 para permitir LS y PS sin escape en cadenas [ 12 ] para compatibilidad con JSON. [ 14 ]
  • YAML 1.1 reconocía los tres como saltos de línea; YAML 1.2 ya no los reconoce como saltos de línea para ser compatible con JSON . [ 15 ]
  • El Bloc de notas de Windows , el editor de texto predeterminado de Microsoft Windows , no trata los caracteres NEL , LS o PS como saltos de línea.
  • gedit , el editor de texto predeterminado del entorno de escritorio GNOME , trata LS y PS como saltos de línea, pero no NEL .

Unicode incluye algunos glifos destinados a presentar un carácter visible para el usuario que lee el documento, y por lo tanto no se reconocen como un salto de línea:

  • U+23CE SÍMBOLO DE RETORNO
  • U+240A SÍMBOLO DE SALIDA DE LÍNEA
  • U+240D SÍMBOLO DE RETORNO DE CARRO
  • U+2424 SÍMBOLO DE SALTO DE LÍNEA

HTML

En HTML , los saltos de línea son espacios en blanco y generalmente se tratan [ a ] de la misma manera que los espacios. [ 16 ] Los párrafos se crean utilizando instancias separadas del elemento HTML , y la separación física de los párrafos la controla el motor de renderizado. [ 17 ]<p>

Los saltos de línea se pueden crear explícitamente usando el elemento HTML . Para facilitar que los lectores de pantalla puedan interpretar las páginas, la documentación HTML recomienda no usar este elemento para párrafos. En cambio, fuentes como MDN Web Docs sugieren usar este elemento para poemas . [ 18 ]<br>

En lenguajes de programación

Para facilitar la creación de programas portátiles , los lenguajes de programación proporcionan algunas abstracciones para manejar los diferentes tipos de secuencias de salto de línea que se utilizan en diferentes entornos.

El lenguaje C proporciona las secuencias de escape\n (salto de línea) y \r(retorno de carro). Sin embargo, no es necesario que sean equivalentes a los caracteres de control ASCII LF y CR . El estándar C solo garantiza dos características:

  1. Cada una de estas secuencias de escape se corresponde con un número único definido por la implementación, que puede almacenarse en un valor de tipo carácter .
  2. Al escribir en un archivo, nodo de dispositivo o socket/fifo en modo texto , \nse traduce de forma transparente a la secuencia de salto de línea nativa utilizada por el sistema, que puede ser más larga que un carácter. Al leer en modo texto, la secuencia de salto de línea nativa se traduce de nuevo a \n. En modo binario , no se realiza ninguna traducción y la representación interna producida por \nse muestra directamente.

En las plataformas de sistemas operativos Unix , donde se originó C, la secuencia nativa de salto de línea es ASCII LF ( 0x0A ), por lo que simplemente se definió con ese valor. Dado que la representación interna y externa son idénticas, la traducción realizada en modo texto no tiene efecto , y Unix no distingue entre modo texto y modo binario. Esto ha provocado que muchos programadores que desarrollaron su software en sistemas Unix simplemente ignoren esta distinción, lo que resulta en código que no es portable a otras plataformas.\n

Se recomienda evitar la función fgets () de la biblioteca estándar de C en modo binario, ya que cualquier archivo que no siga la convención de salto de línea de Unix se interpretará erróneamente. Asimismo, en modo texto, cualquier archivo que no utilice la secuencia de salto de línea nativa del sistema (como un archivo creado en un sistema Unix y copiado a un sistema Windows) también se interpretará erróneamente.

Otro problema común surge al \ncomunicarse mediante un protocolo de Internet que exige el uso de CR + LF para el final de línea en ASCII. Escribir en un flujo de texto funciona correctamente en sistemas Windows, pero produce solo LF en Unix y algo completamente diferente en sistemas más exóticos. Usar en modo binario ofrece una solución ligeramente mejor.\n\r\n

Muchos lenguajes, como C++ , Perl , [ 19 ] y Haskell, proporcionan la misma interpretación que \nC. C++ tiene un modelo de entrada/salida (E/S) alternativo donde el manipulador std::endl se puede usar para generar un salto de línea (y vacía el búfer de flujo).

Java , PHP [ 20 ] y Python [ 21 ] proporcionan la secuencia (para ASCII CR + LF ). A diferencia de C, se garantiza que estas representen los valores U+000D y U+000A , respectivamente.\r\n

Los métodos de entrada/salida (E/S) de la biblioteca de clases de Java no traducen de forma transparente estas secuencias de salto de línea dependientes de la plataforma en la entrada o salida. En cambio, proporcionan funciones para escribir una línea completa que agregan automáticamente la secuencia de salto de línea nativa, y funciones para leer líneas que aceptan cualquiera de CR , LF o CR + LF como terminador de línea (consulte BufferedReader.readLine() ). El método System.lineSeparator() se puede usar para recuperar el separador de línea subyacente. Este también se inserta automáticamente cuando se usa el especificador de formato en .%nSystem.out::printf

Ejemplo:

String eol = System.lineSeparator ( ); String lineColor = "Color: Rojo " + eol ;

Python tiene una función de "compatibilidad universal con saltos de línea" habilitada por defecto, que traduce las tres convenciones de fin de línea más comunes ( \n, \r, \r\n) a la convención estándar de Python \nal abrir un archivo para lectura, al importar módulos y al ejecutar un archivo. Esta función se puede controlar mediante el newlineargumento en la open()función al abrir el archivo. [ 22 ] [ 23 ]

Algunos lenguajes han creado variables , constantes y subrutinas especiales para facilitar los saltos de línea durante la ejecución del programa. En algunos lenguajes como PHP y Perl , se requieren comillas dobles\n para realizar la sustitución de escape para todas las secuencias de escape, incluidas y \r. En PHP, para evitar problemas de portabilidad, las secuencias de salto de línea deben emitirse utilizando la constante PHP_EOL. [ 24 ]

Ejemplo en C# :

string eol = Environment.NewLine ; string lineColor = "Color: Red" + eol ; string eol2 = " \n" ; string lineColor2 = " Color: Blue" + eol2 ;

Problemas con diferentes formatos de salto de línea

Un archivo de texto creado con gedit y visualizado con un editor hexadecimal . Además de los objetos de texto, solo hay marcadores EOL con el valor hexadecimal 0A.

Las diferentes convenciones de salto de línea provocan que los archivos de texto que se han transferido entre sistemas de diferentes tipos se muestren incorrectamente.

El texto en archivos creados con programas comunes en sistemas tipo Unix o Mac OS clásico , aparece como una sola línea larga en la mayoría de los programas comunes en MS-DOS y Microsoft Windows porque estos no muestran un solo line feedo un solo carriage returncomo salto de línea.

Por el contrario, al visualizar un archivo procedente de un ordenador Windows en un sistema tipo Unix, el CR adicional puede mostrarse como un segundo salto de línea, como ^M o como <cr> al final de cada línea.

Además, es posible que otros programas que no sean editores de texto no acepten un archivo, por ejemplo, un archivo de configuración, codificado utilizando la convención de salto de línea extranjera, como un archivo válido.

El problema puede ser difícil de detectar porque algunos programas manejan correctamente los saltos de línea extranjeros, mientras que otros no. Por ejemplo, un compilador puede fallar con errores de sintaxis difíciles de detectar, aunque el archivo fuente parezca correcto al visualizarlo en la consola o en un editor . Los editores de texto modernos generalmente reconocen todas las variantes de saltos de línea CR + LF y permiten a los usuarios convertir entre los diferentes estándares. Los navegadores web también suelen ser capaces de mostrar archivos de texto y sitios web que utilizan distintos tipos de saltos de línea.

Aunque un programa admita diferentes convenciones de salto de línea, estas funciones a menudo no están suficientemente etiquetadas, descritas ni documentadas. Normalmente, se muestra un menú o cuadro combinado con las distintas convenciones sin indicar si la selección reinterpretará, convertirá temporalmente o convertirá permanentemente los saltos de línea. Algunos programas realizan la conversión implícitamente al abrir, copiar, pegar o guardar, a menudo de forma inconsistente.

La mayoría de los protocolos de Internet textuales (incluidos HTTP , SMTP , FTP , IRC y muchos otros) exigen el uso de CR + LF ASCII ( , 0x0D 0x0A ) a nivel de protocolo, pero recomiendan que las aplicaciones tolerantes reconozcan también LF solo ( , 0x0A ). A pesar del estándar dictado, muchas aplicaciones utilizan erróneamente la secuencia de escape de nueva línea de C ( LF ) en lugar de la combinación correcta de secuencias de escape de retorno de carro y nueva línea ( CR + LF ) (véase la sección Nueva línea en lenguajes de programación más arriba). Este uso accidental de secuencias de escape incorrectas genera problemas al intentar comunicarse con sistemas que se adhieren a la interpretación más estricta de los estándares en lugar de la interpretación tolerante sugerida. Un ejemplo de sistema intolerante es el agente de transferencia de correo qmail , que se niega activamente a aceptar mensajes de sistemas que envían LF solo en lugar de CR + LF requeridos . [ 25 ]\r\n\n\n\r\n

El formato estándar de mensajes de Internet [ 26 ] para correo electrónico establece: "CR y LF SOLO DEBEN aparecer juntos como CRLF; NO DEBEN aparecer de forma independiente en el cuerpo". Las diferencias entre las implementaciones de SMTP en la forma en que tratan los caracteres LF y/o CR sin formato han dado lugar a ataques de suplantación de identidad SMTP conocidos como "contrabando SMTP". [ 27 ]

El protocolo de transferencia de archivos (FTP) puede convertir automáticamente los saltos de línea en archivos que se transfieren entre sistemas con diferentes representaciones de salto de línea cuando la transferencia se realiza en "modo ASCII". Sin embargo, transferir archivos binarios en este modo suele tener resultados desastrosos: cualquier aparición de la secuencia de bytes de salto de línea —que en este contexto no tiene semántica de terminador de línea, sino que es simplemente parte de una secuencia normal de bytes— se traducirá a la representación de salto de línea que utilice el otro sistema, lo que corromperá el archivo. Los clientes FTP suelen emplear algunas heurísticas (por ejemplo, la inspección de las extensiones de los nombres de archivo ) para seleccionar automáticamente el modo binario o ASCII, pero en última instancia, es responsabilidad del usuario asegurarse de que sus archivos se transfieran en el modo correcto. Si existe alguna duda sobre el modo correcto, se debe utilizar el modo binario, ya que así ningún archivo será alterado por FTP, aunque podrían mostrarse incorrectamente. [ 28 ]

Conversión entre formatos de salto de línea

Los editores de texto se utilizan a menudo para convertir un archivo de texto entre diferentes formatos de salto de línea; la mayoría de los editores modernos pueden leer y escribir archivos utilizando al menos las diferentes convenciones ASCII CR / LF .

Por ejemplo, el editor Vim puede hacer que un archivo sea compatible con el editor de texto Bloc de notas de Windows. Dentro de Vim

: establecer formato de archivo = dos : wq

Los editores pueden no ser adecuados para convertir archivos grandes o para la conversión masiva de muchos archivos. Para archivos grandes (en Windows NT) se suele utilizar el siguiente comando:

D:\> TYPE unix_file | FIND /V "" > dos_file 

Los programas de propósito especial para convertir archivos entre diferentes convenciones de salto de línea incluyen unix2dos y dos2unix , mac2unix y unix2mac , mac2dos y dos2mac , y flip . [ 29 ] El comando tr está disponible en prácticamente todos los sistemas tipo Unix y se puede utilizar para realizar operaciones de reemplazo arbitrarias en caracteres individuales. Un archivo de texto de DOS/Windows se puede convertir al formato Unix simplemente eliminando todos los caracteres CR ASCII con

$ tr -d '\r' < archivo de entrada > archivo de salida

o, si el texto solo tiene saltos de línea CR , convirtiendo todos los saltos de línea CR a LF con

$ tr '\r' '\n' < archivo de entrada > archivo de salida

A veces, las mismas tareas se realizan con awk , sed o en Perl si la plataforma dispone de un intérprete de Perl:

$ awk '{sub("$","\r\n"); printf("%s",$0);}' archivo_entrada > archivo_salida # UNIX a DOS (añadiendo CR en Linux y sistemas operativos basados ​​en BSD que no tienen extensiones GNU) $ awk '{gsub("\r",""); print;}' archivo_entrada > archivo_salida # DOS a UNIX (eliminando CR en sistemas operativos basados ​​en Linux y BSD que no tienen extensiones GNU) $ sed -e 's/$/\r/' archivo_entrada > archivo_salida # UNIX a DOS (añadiendo CR en sistemas operativos basados ​​en Linux que usan extensiones GNU) $ sed -e 's/\r$//' archivo_entrada > archivo_salida # DOS a UNIX (eliminando CR en sistemas operativos basados ​​en Linux que usan extensiones GNU) $ perl -pe 's/\r?\n|\r/\r\n/g' archivo_entrada > archivo_salida # Convertir a DOS $ perl -pe 's/\r?\n|\r/\n/g' archivo_entrada > archivo_salida # Convertir a UNIX $ perl -pe 's/\r?\n|\r/\r/g' archivo_entrada > archivo_salida # Convertir a Mac antiguo

El comando de archivo puede identificar el tipo de finales de línea:

$ archivo myfile.txt myfile.txt: texto en inglés ASCII, con terminadores de línea CRLF

El comando Unix egrep (grep extendido) se puede utilizar para imprimir los nombres de archivo de archivos Unix o DOS (suponiendo que solo se trate de archivos de estilo Unix y DOS, no de archivos clásicos de estilo Mac OS):

$ egrep -L '\r\n' myfile.txt # muestra un archivo de estilo UNIX (terminado con LF) $ egrep -l '\r\n' myfile.txt # muestra un archivo de estilo DOS (terminado con CRLF)

Otras herramientas permiten al usuario visualizar los caracteres EOL:

$ od -a miarchivo.txt $ cat -e miarchivo.txt $ cat -v miarchivo.txt $ hexdump -c miarchivo.txt 

Interpretación

Existen dos maneras de ver los saltos de línea, ambas consistentes en sí mismas : que los saltos de línea separan líneas o que las terminan . Si un salto de línea se considera un separador, no habrá ninguno después de la última línea de un archivo. Algunos programas tienen problemas para procesar la última línea de un archivo si no termina con un salto de línea. Por otro lado, los programas que esperan que el salto de línea se utilice como separador interpretarán un salto de línea final como el inicio de una nueva línea (vacía). En cambio, si un salto de línea se considera un terminador, se espera que todas las líneas de texto, incluida la última, terminen con un salto de línea. Si la secuencia de caracteres final en un archivo de texto no es un salto de línea, la última línea del archivo puede considerarse una línea de texto incorrecta o incompleta, o el archivo puede considerarse truncado incorrectamente. El estándar POSIX adopta esta última postura, considerando los saltos de línea como terminadores de línea. [ 30 ]

En textos destinados principalmente a ser leídos por humanos mediante software que implementa la función de ajuste de línea , un carácter de nueva línea generalmente solo necesita almacenarse si se requiere un salto de línea independientemente de si la siguiente palabra cabe en la misma línea, como entre párrafos y en listas verticales. Por lo tanto, en la lógica del procesamiento de textos y la mayoría de los editores de texto , la nueva línea se usa como un salto de párrafo y se conoce como "retorno duro", a diferencia de los "retornos suaves", que se crean dinámicamente para implementar el ajuste de línea y cambian con cada instancia de visualización. En muchas aplicaciones existe un carácter de control separado llamado "salto de línea manual" para forzar saltos de línea dentro de un solo párrafo. El glifo para el carácter de control de un retorno duro suele ser un signo de párrafo (¶), y para el salto de línea manual suele ser una flecha de retorno de carro (↵).

Avances de línea inversos y parciales

RI ( U +008D REVERSE LINE FEED, [ 31 ] ISO/IEC 6429 8D, decimal 141) se utiliza para desplazar la posición de impresión una línea hacia atrás (invirtiendo la alimentación del papel o moviendo el cursor de visualización una línea hacia arriba) para que otros caracteres puedan imprimirse sobre el texto existente. Esto puede hacerse para ponerlos en negrita o para añadir subrayados, tachados u otros caracteres como diacríticos . El salto de línea inverso se denominaba " line starve" ( agotamiento de línea) —un juego de palabras con " line feed" (alimentación de línea )— en el Hacker's Dictionary . [ 32 ]  

De forma similar, PLD ( U + 008B LÍNEA PARCIAL HACIA ADELANTE, decimal 139) y PLU ( U + 008C LÍNEA PARCIAL HACIA ATRÁS, decimal 140) se pueden usar para avanzar o retroceder la posición de impresión del texto en una fracción del espaciado vertical entre líneas (normalmente, la mitad). Se pueden usar en combinación para subíndices (avanzando y luego retrocediendo) y superíndices (retrocediendo y luego avanzando), y también pueden ser útiles para imprimir diacríticos.

Véase también

Notas

  1. Se respetanlos saltos de línea internos, por ejemplo<PRE>...</PRE>

Referencias

  1. "¿Qué es un salto de línea?" . www.computerhope.com . Consultado el 10 de mayo de 2021 .
  2. ^ Qualline, Steve (2001). Vi mejorado - Vim (PDF) . Editorial Sams . pag. 120 . ISBN  9780735710016Archivado del original (PDF) el 8 de abril de 2022. Consultado el 4 de enero de 2023 .
  3. Duckett, Chris. "El Bloc de notas de Windows finalmente entiende los caracteres de fin de línea de todos los demás" . ZDNet . Archivado del original el 13 de mayo de 2018. Recuperado el 4 de enero de 2023. [Después de décadas de frustración y de tener que descargar un editor de texto real para cambiar una sola línea en un archivo de configuración desde una máquina Linux, Microsoft ha actualizado el Bloc de notas para que pueda manejar los caracteres de fin de línea utilizados en entornos Unix, Linux y macOS.
  4. López, Michel (8 de mayo de 2018). "Introducción a la compatibilidad con finales de línea extendidos en el Bloc de notas" . Línea de comandos de Windows . Archivado del original el 6 de abril de 2019. Recuperado el 4 de enero de 2023. Como ocurre con cualquier cambio en una herramienta de larga trayectoria, existe la posibilidad de que este nuevo comportamiento no funcione en sus casos, o que prefiera deshabilitarlo y volver al comportamiento original del Bloc de notas. Para ello, puede modificar [...claves del registro...] para ajustar cómo el Bloc de notas gestiona el pegado de texto y qué carácter de fin de línea usar al pulsar Intro/Retorno.
  5. Kahn-Greene, Will Guaraldi. "Tabla ASCII" . bluesock.org .
  6. Bray, Andrew C.; Dickens, Adrian C.; Holmes, Mark A. (1983). Guía avanzada del usuario para el microordenador BBC (PDF) . Centro de Microordenadores de Cambridge. págs. 103, 104. ISBN  978-0946827008Consultado el 30 de enero de 2019 .
  7. "Salida de caracteres" . Manual de referencia para programadores de RISC OS 3. 3QD Developments Ltd. 3 de noviembre de 2015. Consultado el 18 de julio de 2018 .
  8. Tarjeta de datos de referencia del sistema IBM/360, publicación GX20-1703, División de procesamiento de datos de IBM, White Plains, NY
  9. Heninger, Andy (20 de septiembre de 2013). "UAX #14: Algoritmo de salto de línea Unicode" . El Consorcio Unicode.
  10. Bray, Tim (marzo de 2014). "Gramática JSON" . El formato de intercambio de datos de notación de objetos JavaScript (JSON) . IETF . sec. 2. doi : 10.17487/RFC7159 . RFC 7159 . 
  11. Bray, Tim (marzo de 2014). "Strings" . El formato de intercambio de datos de notación de objetos JavaScript (JSON) . IETF . sec. 7. doi : 10.17487/RFC7159 . RFC 7159 . 
  12. 1 2 "Especificación del lenguaje ECMAScript 2019" . ECMA International. Junio ​​de 2019. 11.3 Terminadores de línea .
  13. "Especificación del lenguaje ECMAScript 2019" . ECMA International. Junio ​​de 2018. 11.3 Terminadores de línea .
  14. "Subsumir JSON (también conocido como JSON ⊂ ECMAScript)" . GitHub . 22 de mayo de 2018.
  15. "5.4. Caracteres de salto de línea" . YAML no es un lenguaje de marcado, revisión 1.2.2 . 1 de octubre de 2021.
  16. "Lenguaje de marcado de hipertexto" . info.cern.ch. CERN . Consultado el 15 de agosto de 2025 .
  17. " < p > : El elemento Paragraph - HTML" . MDN . Mozilla. 13 de agosto de 2025.
  18. " < br > : El elemento de salto de línea - HTML" . MDN . Mozilla. 9 de julio de 2025 . Consultado el 15 de agosto de 2025 .
  19. "binmode" . Documentación de Perl . Portadores de Perl 5.
  20. "PHP: Cadenas - Manual" . Manual de PHP . El Grupo PHP.
  21. "2. Análisis léxico" . The Python Language Reference . The Python Foundation.
  22. Jansen, Jack (14 de enero de 2002). "PEP 278 – Soporte universal para saltos de línea" . Propuestas de mejora de Python . Python Software Foundation. sec. Especificación.
  23. "Novedades de Python 2.3" . Python 2.3 . Python Software Foundation. Sec. General, Saltos de línea universales. Saltos de línea universales: los archivos abiertos para lectura con el modo especial "U" (en lugar de "r") traducen las tres convenciones de fin de línea más comunes (n, r, rn) a la convención estándar n de Python. Contribuido por Jack Jansen. (PEP 278)
  24. "PHP: Constantes predefinidas - Manual" . Manual de PHP . El Grupo PHP.
  25. Bernstein, DJ "Bare LFs in SMTP" .
  26. Resnick, Pete (abril de 2001). Formato de mensaje de Internet . IETF . doi : 10.17487/RFC2822 . RFC 2822 .
  27. Longin, Timo (18 de diciembre de 2023). "SMTP Smuggling - Spoofing E-Mails Worldwide" . SEC Consult .
  28. Zeil, Steven (19 de enero de 2015). "Transferencia de archivos" . Universidad Old Dominion. Archivado del original el 14 de mayo de 2016. En caso de duda, transfiera en modo binario.
  29. Sapp, Craig Stuart. "Conversión de texto ASCII entre UNIX, Macintosh y MS-DOS" . Centro de Investigación Informática en Música y Acústica. Archivado del original el 9 de febrero de 2009.
  30. "3. Definiciones § 3.185 Línea" . The Open Group Base Specifications Issue 8, IEEE Std 1003.1-2024 . The IEEE y The Open Group. 3.185 Línea: Una secuencia de cero o más caracteres que no sean <newline> más un carácter <newline> de terminación.Una explicación más detallada sobre las implicaciones de esta definición de línea está disponible en https://stackoverflow.com/a/729795
  31. "Controles C1 y suplemento Latin-1" (PDF) . unicode.org . Consultado el 13 de febrero de 2016 .
  32. Spears, Richard A.; Steele, Guy L. (1986). Woods, Donald R.; Finkel, Raphael A.; Crispin, Mark R.; Stallman, Richard M.; Goodfellow, Geoffrey S.; Abel, Ernest L. (eds.). "Two Specialty Dictionaries" . American Speech . 61 (3): 273–277 . doi : 10.2307/454671 . ISSN 0003-1283 . Algunas entradas son terminología informática típica. ... Se incluye Line feed para explicar la entrada de juego de palabras line starve . 
  • Referencia Unicode; véase el párrafo 5.8 del capítulo 5 del estándar Unicode 4.0 (PDF).
  • "El carácter de nueva línea [ NEL ] " .
  • El rompecabezas del final de la línea
  • Comprender los saltos de línea en la Wayback Machine (archivado el 20 de agosto de 2006)
  • "La historia del final del camino"
Obtenido de " https://en.wikipedia.org/w/index.php?title=Newline&oldid=1359227191 "