Pretty-printing (o prettyprinting ) es la aplicación de varias convenciones de formato estilístico a archivos de texto , como código fuente , marcado y tipos de contenido similares. Estas convenciones de formato pueden implicar adherirse a un estilo de sangría , usar diferentes colores y tipos de letra para resaltar los elementos sintácticos del código fuente, o ajustar el tamaño para que el contenido sea más fácil de leer y comprender para las personas. Las impresoras bonitas para el código fuente a veces se denominan formateadores de código o embellecedores .
Matemáticas bonitas
La impresión bonita generalmente se refiere a mostrar expresiones matemáticas similares a la forma en que se compondrían profesionalmente. Por ejemplo, en sistemas de álgebra computarizada como Maxima o Mathematica, el sistema puede escribir resultados como " x ^ 2 + 3 * x " como "". Algunas calculadoras gráficas , como la serie Casio 9860 , la serie HP-49 , la TI-84 Plus , la TI-89 y la TI-Nspire , la TI-83 Plus con el complemento PrettyPt [1] o la TI -84 Plus con el mismo complemento o los sistemas operativos habilitados para "MathPrint", pueden realizar impresiones bonitas. Además, varias calculadoras científicas más nuevas están equipadas con pantallas de matriz de puntos capaces de imprimir bonitas, como la Casio FX-ES serie (pantalla natural), serie Sharp EL-W (WriteView), HP SmartCalc 300s y TI-30XB .
Muchos programas de formato de texto también pueden componer matemáticas: TeX se desarrolló específicamente para la composición tipográfica matemática de alta calidad .
Marcado de impresión bonita y código basado en etiquetas
La impresión bonita en instancias de lenguaje de marcado suele asociarse con la sangría de las etiquetas y el contenido de la cadena para determinar visualmente la jerarquía y el anidamiento. 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 que requiere la sintaxis XML . En HTML , los caracteres de espacio en blanco entre las 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 en la impresión bonita de un documento HTML para garantizar que no se creen o destruyan nodos de texto adicionales en la proximidad general al contenido o elementos de etiqueta reflectantes del 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 ajusta a un estilo uniforme y es consistente en la aplicación en varias instancias, como lo demuestra el componente de aplicación markup.ts [3] utilizado para embellezca HTML, XML y tecnologías relacionadas para la herramienta Pretty Diff .
Formateo del código de programación
Los programadores a menudo usan herramientas para formatear el código fuente del lenguaje de programación de una manera particular. El formato adecuado del código hace que sea más fácil de leer y comprender. Los diferentes programadores a menudo prefieren diferentes estilos de formato, como el uso de sangría de código y espacios en blanco o posicionamiento de llaves . Un formateador 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 de código implica analizar el código fuente en estructuras de componentes, como declaraciones de asignación, bloques if , bucles , etc. (ver también flujo de control ) y formatearlos de la 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 diversos modos de lenguaje de Emacs pueden sangrar correctamente bloques de código de forma atractiva. [4]
HTML
Impresora bonita 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 formatear programas LISP . Las primeras versiones operaban en la forma ejecutable (estructura de lista) del programa Lisp y eran ajenas a los significados especiales de varias funciones. Las versiones posteriores tenían convenciones de lectura especiales para incorporar comentarios no ejecutables y también para conservar macros de lectura en forma no expandida. También permitieron convenciones especiales de sangría para funciones especiales como . [5] [6] El término "grind" se utilizó en algunos círculos Lisp como sinónimo de impresión bonita. [7]if
Reglas de estilo del proyecto
Muchos proyectos de código abierto han establecido reglas para el diseño del código. Los más típicos son el formato GNU [8] y el estilo BSD. [9] La mayor diferencia entre los dos es la ubicación de las llaves: en el estilo GNU, las llaves de apertura y cierre están en líneas por sí mismas, con la misma sangría. El estilo BSD coloca una llave de apertura al final de la línea anterior, 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 formateo y embellecimiento de código
El siguiente ejemplo muestra algunas estructuras típicas de C y cómo las formatean varias reglas de estilo de sangría . Sin ningún formato en absoluto, 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 ( "Cambiar \ n " ); switch ( k ) { caso 1 : printf ( "1 \ n " ); romper ; caso 2 : printf ( "2 \ n " ); romper ;}}}
El programa de sangría GNU produce la siguiente salida cuando se le pide que aplique sangría 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 ( "Cambiar \ n " ); switch ( k ) { caso 1 : printf ( "1 \ n " ); romper ; caso 2 : printf ( "2 \ n " ); romper ; } } }
Produce esta salida al formatear de acuerdo con 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 ( "Cambiar \ n " ); switch ( k ) { caso 1 : printf ( "1 \ n " ); romper ; caso 2 : printf ( "2 \ n " ); romper ; } } }
Ver también
Conceptos relacionados
- Tabstop elástico , una función de muchos editores de código fuente que detecta y mantiene sangrías alineadas
- Minificación , lo que hace que el código fuente sea compacto, incluso si se vuelve más difícil de entender para los humanos
- Ofuscación , deliberadamente haciendo que el código fuente sea muy difícil de entender para los humanos, incluso si se vuelve algo complicado
Utilidades
- enscript , un conversor de texto a PostScript, con bonitas funciones de impresión
- indent , una bonita impresora para código C y C ++, incluida con Unix
- Pretty Diff , una aplicación web de comparación de datos, con bonitas funciones de impresión
Referencias
- ^ PrettyPt
- ^ Barón, L. David. "Espacio en blanco en el DOM" . Red de desarrolladores de Mozilla . Consultado el 27 de agosto de 2012 .
- ^ markup.ts
- ^ Stallman, Richard M. "Sangría para programas" . Manual de GNU Emacs . Fundación de Software Libre . Consultado el 20 de octubre de 2011 .
- ^ Ira Goldstein, "Pretty Printing: Convertir lista en estructura lineal", Memo 279 de inteligencia artificial, Instituto de Tecnología de Massachusetts, febrero de 1973. texto completo
- ^ Richard C. Waters, "Usando la nueva impresora bonita Lisp común", 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 completa de archivos TEX
- NEATER2: un reformateador de declaraciones de fuentes de PL / I Kenneth Conrow, Ronald G. Smith : Commun. ACM 13 (11): 669-675 (1970)
- SOAP - Simplifique los programas de Algol oscuros R. S. 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 SOAP.
- SOAP: un programa que documenta y edita programas ALGOL 60. RS Scowen, D. Allin, AL Hillman, M. Shimell : Computación. J. 14 (2): 133-135 (1971)
- Código fuente SOAP original del KDF9 (sin formato)
- Guía del usuario de SOAP. (para IMP de Edimburgo ) Peter Salkeld Robertson (1976)
- Código fuente SOAP en / para IMP9
- Soap80: un programa para formatear programas fuente IMP80. JM Murison, Centro Regional de Computación de Edimburgo (1980)
- Código fuente SOAP en / para IMP80 E. N. Gregory, Universidad de Kent en Canterbury; Peter D. Stephens, Centro Regional de Computación de Edimburgo
- PRETTYP.PAS Pascal prettyprinter temprano. Ledgard y col.
- Pascal con estilo (1979)
- style (9) Pautas de estilo de FreeBSD
- vgrind , The [Unix] Heirloom Project
- Formateo de su código fuente Pautas de estilo GNU