La impresión bonita (o prettyprinting ) es la aplicación de cualquiera de las diversas convenciones de formato estilístico a los archivos de texto , como el código fuente , el marcado y tipos de contenido similares. Estas convenciones de formato pueden implicar la adhesión a un estilo de sangría , el uso de diferentes colores y tipos de letra para resaltar los elementos sintácticos del código fuente o el ajuste del tamaño para que el contenido sea más fácil de leer y comprender para las personas. Los impresores bonitos para el código fuente a veces se denominan formateadores de código o embellecedores .
Matemáticas de impresión bonita

La impresión bonita generalmente se refiere a mostrar expresiones matemáticas de manera similar a como se escribirían profesionalmente . Por ejemplo, en sistemas de álgebra computacional como Maxima o Mathematica, el sistema puede escribir la salida como "x ^ 2 + 3 * x" como " ". Algunas calculadoras gráficas , como las series Casio 9860 , HP-49/50 y HP Prime , TI-84 Plus , TI-89 y TI-Nspire , la TI-83 Plus con el complemento PrettyPt [1] o la TI-84 Plus con el mismo complemento o los sistemas operativos compatibles con "MathPrint", pueden realizar impresión bonita. Además, varias calculadoras científicas más nuevas están equipadas con pantallas matriciales capaces de realizar impresión bonita, como la serie Casio FX-ES (Natural Display), la serie Sharp EL-W (WriteView), HP SmartCalc 300s, TI-30XB y Numworks .
Muchos programas de formato de texto también pueden componer texto matemático: TeX fue desarrollado específicamente para composición tipográfica matemática de alta calidad .
Marcado de impresión atractivo y código basado en etiquetas

La impresión bonita en instancias de lenguaje de marcado se asocia más comúnmente con la sangría de etiquetas y contenido de cadenas para determinar visualmente la jerarquía y la anidación. Aunque las estructuras sintácticas de los lenguajes basados en etiquetas no varían significativamente, la sangría puede variar significativamente debido a cómo se interpreta un lenguaje de marcado o debido a los datos que describe.
En MathML , los caracteres de espacio en blanco no reflejan datos, significado o sintaxis por encima de lo requerido por la sintaxis XML . En HTML , los caracteres de espacio en blanco entre etiquetas se consideran texto y se analizan como nodos de texto en el resultado analizado. [2] Si bien la sangría se puede aplicar generosamente a un documento MathML, se debe tener suficiente cuidado adicional al imprimir de forma bonita un documento HTML para garantizar que no se creen o destruyan nodos de texto adicionales en la proximidad general del contenido o los elementos de etiqueta que reflejan el contenido. Esta diferencia en complejidad no es trivial desde la perspectiva de una operación de impresión bonita automatizada donde no se necesitan reglas especiales o casos extremos, como en el ejemplo más simple de MathML. El ejemplo HTML puede requerir una serie de algoritmos progresivos interrelacionados para dar cuenta de varios patrones de elementos de etiqueta y contenido que se ajusten a un estilo uniforme y sean consistentes en la aplicación en varias instancias, como lo demuestra el componente de aplicación markup.ts [3] utilizado para embellecer HTML, XML y tecnologías relacionadas para la herramienta Pretty Diff .
Formato de código de programación
Los programadores suelen utilizar herramientas para formatear el código fuente de un lenguaje de programación de una manera particular. El formato adecuado del código facilita su lectura y comprensión. Diferentes programadores suelen preferir diferentes estilos de formato, como el uso de sangría de código y espacios en blanco o la colocación de llaves . Un formateador de código o un indentador de código convierte el código fuente de un estilo de formato a otro. Esto es relativamente sencillo debido a la sintaxis inequívoca de los lenguajes de programación. El embellecimiento del código implica analizar el código fuente en estructuras de componentes, como declaraciones de asignación, bloques if , bucles , etc. (consulte también flujo de control ), y formatearlos de una manera especificada por el usuario en un archivo de configuración.
Los embellecedores de código existen como aplicaciones independientes y están integrados en editores de texto y entornos de desarrollo integrados . Por ejemplo, los distintos modos de lenguaje de Emacs pueden sangrar correctamente bloques de código de forma atractiva. [4]
HTML
Impresora bonita de Lisp
Un ejemplo temprano de impresión bonita fue el programa "GRINDEF" ( es decir , 'función de molienda') de Bill Gosper ( c. 1967), que utilizaba la búsqueda combinatoria con poda para dar formato a los programas LISP . Las primeras versiones operaban en la forma ejecutable (estructura de lista) del programa Lisp y no tenían en cuenta los significados especiales de varias funciones. Las versiones posteriores tenían convenciones de lectura especiales para incorporar comentarios no ejecutables y también para preservar las macros de lectura en forma no expandida. También permitían convenciones de sangría especiales para funciones especiales como . [5] [6] El término "grind" se utilizó en algunos círculos de Lisp como sinónimo de impresión bonita. [7]if
Reglas de estilo de proyecto
Muchos proyectos de código abierto han establecido reglas para el diseño del código. Las más típicas son el formato GNU [8] y el estilo BSD [9] . La mayor diferencia entre ambos es la ubicación de las llaves: en el estilo GNU, las llaves de apertura y cierre están en líneas separadas, con la misma sangría. El estilo BSD coloca una llave de apertura al final de la línea precedente, y las llaves de cierre pueden ir seguidas de else . El tamaño de la sangría y la ubicación de los espacios en blanco también difieren.
Ejemplo de formato y embellecimiento de código
El siguiente ejemplo muestra algunas estructuras típicas de C y cómo las distintas reglas de estilo de sangría les dan formato. Sin ningún formato, se ve así:
int foo ( int k ){ if ( k < 1 || k > 2 ){ printf ( "fuera de rango \n " ); printf ( "esta función requiere un valor de 1 o 2 \n " );} else { printf ( "Cambio \n " ); switch ( k ){ caso 1 : printf ( "1 \n " ); break ; caso 2 : printf ( "2 \n " ); break ;}}}
El programa GNU indent produce la siguiente salida cuando se le solicita sangrar de acuerdo con las reglas GNU :
int
foo ( int k ) { if ( k < 1 || k > 2 ) { printf ( "fuera de rango \n " ); printf ( "esta función requiere un valor de 1 o 2 \n " ); } else { printf ( "Cambio \n " ); switch ( k ) { case 1 : printf ( "1 \n " ); break ; case 2 : printf ( "2 \n " ); break ; } } }
Produce esta salida al formatear según las reglas BSD:
int
foo ( int k ) { if ( k < 1 || k > 2 ) { printf ( "fuera de rango \n " ); printf ( "esta función requiere un valor de 1 o 2 \n " ); } else { printf ( "Cambio \n " ); switch ( k ) { case 1 : printf ( "1 \n " ); break ; case 2 : printf ( "2 \n " ); break ; } } }
Véase también
Conceptos relacionados
- Tabulación elástica , una característica de muchos editores de código fuente que detecta y mantiene sangrías alineadas
- Minificación , haciendo que el código fuente sea compacto, incluso si se vuelve más difícil de entender para los humanos.
- Ofuscación , hacer deliberadamente que el código fuente sea muy difícil de entender para los humanos, especialmente a medida que se vuelve más complicado.
Utilidades
- enscript , un convertidor de texto a PostScript, con funciones de impresión atractiva
Referencias
- ^ "PrettyPrint - ticalc.org". www.ticalc.org . Consultado el 13 de abril de 2022 .
- ^ Baron, L. David. "Espacio en blanco en el DOM". Mozilla Developer Network . Consultado el 27 de agosto de 2012 .
- ^ marcado.ts
- ^ Stallman, Richard M. "Indentación para programas". Manual de GNU Emacs . Free Software Foundation . Consultado el 20 de octubre de 2011 .
- ^ Ira Goldstein, "Pretty Printing: Converting List to Linear Structure", Artificial Intelligence Memo 279, Instituto Tecnológico de Massachusetts, febrero de 1973. Texto completo
- ^ Richard C. Waters, "Uso de la nueva impresora común Lisp", ACM SIGPLAN Lisp Pointers 5 :2:27-34, abril-junio de 1992. texto completo
- ^ Archivo de jerga , sv grind
- ^ Estilo GNU
- ^ Estilo BSD
Enlaces externos
- Algoritmo 268: editor del lenguaje de referencia ALGOL 60 William M. McKeeman : Commun. ACM 8(11): 667-668 (1965)
- lgrind, Red Integral de Archivos TEX
- NEATER2: un reformateador de declaraciones de origen PL/I Kenneth Conrow, Ronald G. Smith : Commun. ACM 13(11): 669-675 (1970)
- SOAP - Simplifique programas Algol oscuros RS Scowen, D. Allin, AL Hillman, M. Shimell : Informe CCU6 de la Unidad Central de Computación del Laboratorio Nacional de Física (abril de 1969) Incluye una lista formateada del código fuente de SOAP.
- SOAP: un programa que documenta y edita programas ALGOL 60. RS Scowen, D. Allin, AL Hillman, M. Shimell : Comput. J. 14(2): 133-135 (1971)
- Código fuente SOAP original de KDF9
- Guía del usuario de SOAP. (para el Instituto de Política Impositiva de Edimburgo ) Peter Salkeld Robertson (1976)
- Código fuente SOAP en/para IMP9
- Soap80: un programa para formatear programas fuente IMP80. JM Murison, Centro de Computación Regional de Edimburgo (1980)
- Código fuente SOAP en/para IMP80 E. N. Gregory, Universidad de Kent en Canterbury; Peter D. Stephens, Centro de Computación Regional de Edimburgo
- PRETTYP.PAS Primer impresor de Pascal. Ledgard et al.
- Pascal con estilo (1979)
- style(9) Pautas de estilo de FreeBSD
- vgrind, El proyecto Heirloom [Unix]
- Cómo formatear el código fuente según las pautas de estilo de GNU