Prettyprint - Prettyprint

Pretty-printing (o prettyprinting ) è l'applicazione di una qualsiasi delle varie convenzioni di formattazione stilistica a file di testo , come codice sorgente , markup e tipi di contenuto simili. Queste convenzioni di formattazione possono comportare l'adesione a uno stile di indentazione , l'utilizzo di colori e caratteri tipografici diversi per evidenziare gli elementi sintattici del codice sorgente o la regolazione delle dimensioni per rendere il contenuto più facile da leggere e comprendere per le persone. Le belle stampanti per il codice sorgente sono talvolta chiamate formattatori di codice o abbellitori .

Matematica da stampa carina

Image
Un'espressione matematica composta

La stampa graziosa di solito si riferisce alla visualizzazione di espressioni matematiche in modo simile al modo in cui verrebbero digitate professionalmente. Ad esempio, nei sistemi di computer algebra come Maxima o Mathematica il sistema può scrivere output come " x ^ 2 + 3 * x " come " ". Alcune calcolatrici grafiche , come la serie Casio 9860 , la serie HP-49 , la TI-84 Plus , la TI-89 e la TI-Nspire , la TI-83 Plus con il componente aggiuntivo PrettyPt o la TI-84 Plus con la lo stesso componente aggiuntivo o i sistemi operativi abilitati per "MathPrint" possono eseguire una bella stampa. Inoltre, un certo numero di calcolatrici scientifiche più recenti sono dotate di schermi a matrice di punti in grado di eseguire stampe piacevoli come la serie Casio FX-ES (Natural Display), la serie Sharp EL-W (WriteView), HP SmartCalc 300s e TI-30XB .

Molti programmi di formattazione del testo possono anche comporre la matematica: TeX è stato sviluppato specificamente per la composizione matematica di alta qualità .

Markup stampabile e codice basato su tag

Image
Codice sorgente HTML, piuttosto stampato per mostrare meglio le relazioni gerarchiche dei suoi elementi (chiamati tag)

La stampa graziosa nelle istanze del linguaggio di markup è generalmente associata al rientro di tag e contenuto di stringhe per determinare visivamente la gerarchia e l'annidamento. Sebbene le strutture sintattiche dei linguaggi basati su tag non varino in modo significativo, il rientro può variare in modo significativo a causa del modo in cui viene interpretato un linguaggio di markup o dei dati che descrive.

In MathML , i caratteri di spaziatura non riflettono dati, significato o sintassi superiori a quanto richiesto dalla sintassi XML . In HTML , i caratteri di spaziatura tra i tag sono considerati testo e vengono analizzati come nodi di testo nel risultato analizzato. Sebbene l'indentazione possa essere generosamente applicata a un documento MathML, è necessario prestare ulteriore attenzione nella stampa di un documento HTML per garantire che nodi di testo aggiuntivi non vengano creati o distrutti in prossimità generale del contenuto o degli elementi del tag che riflettono il contenuto. Questa differenza di complessità non è banale dal punto di vista di un'operazione di stampa graziosa automatizzata in cui non sono necessarie regole speciali o casi limite, come nel più semplice esempio MathML. L'esempio HTML può richiedere una serie di algoritmi interconnessi progressivi per tenere conto di vari modelli di elementi tag e contenuto che è conforme a uno stile uniforme ed è coerente nell'applicazione in varie istanze, come evidenziato dal componente dell'applicazione markup.ts utilizzato per abbellire l'HTML, XML e tecnologie correlate per lo strumento Pretty Diff .

Formattazione del codice di programmazione

I programmatori spesso utilizzano strumenti per formattare il codice sorgente del linguaggio di programmazione in un modo particolare. Una corretta formattazione del codice semplifica la lettura e la comprensione. Diversi programmatori spesso preferiscono diversi stili di formattazione, come l'uso del rientro del codice e degli spazi bianchi o il posizionamento delle parentesi graffe . Un formattatore di codice converte il codice sorgente da uno stile di formato a un altro. Questo è relativamente semplice a causa della sintassi non ambigua dei linguaggi di programmazione. L'abbellimento del codice implica l'analisi del codice sorgente in strutture componenti, come istruzioni di assegnazione, blocchi if , loop , ecc. (vedi anche flusso di controllo ) e la loro formattazione in un modo specificato dall'utente in un file di configurazione.

Gli abbellitori di codice esistono come applicazioni standalone e integrati in editor di testo e ambienti di sviluppo integrati . Ad esempio, le varie modalità linguistiche di Emacs possono indentare correttamente blocchi di codice in modo attraente.

HTML

Lisp bella stampante

Un primo esempio di stampa graziosa fu il programma "GRINDEF" ( cioè 'funzione grind') di Bill Gosper ( ca. 1967), che usava la ricerca combinatoria con la potatura per formattare i programmi LISP . Le prime versioni operavano sulla forma eseguibile (struttura a lista) del programma Lisp ed erano ignare dei significati speciali delle varie funzioni. Le versioni successive avevano convenzioni di lettura speciali per incorporare commenti non eseguibili e anche per preservare le macro di lettura in forma non espansa. Consentivano anche convenzioni di indentazione speciali per funzioni speciali come . Il termine "macinare" è stato utilizzato in alcuni circoli Lisp come sinonimo di bella stampa. if

Regole di stile del progetto

Molti progetti open source hanno stabilito regole per il layout del codice. I più tipici sono la formattazione GNU e lo stile BSD. La più grande differenza tra i due è la posizione delle parentesi graffe: nello stile GNU, le parentesi graffe di apertura e chiusura sono su righe da sole, con lo stesso rientro. Lo stile BSD inserisce una parentesi graffa di apertura alla fine della riga precedente e le parentesi graffe di chiusura possono essere seguite da else . Anche la dimensione del rientro e la posizione degli spazi bianchi differiscono.

Esempio di formattazione e abbellimento del codice

L'esempio seguente mostra alcune tipiche strutture C e come le varie regole di stile di indentazione le formattano. Senza alcuna formattazione, appare così:

int foo(int k){if(k<1||k>2){printf("out of range\n");
printf("this function requires a value of 1 or 2\n");}else{
printf("Switching\n");switch(k){case 1:printf("1\n");break;case
2:printf("2\n");break;}}}

Il programma di indentazione GNU produce il seguente output quando viene chiesto di indentare secondo le regole GNU :

int
foo (int k)
{
  if (k < 1 || k > 2)
    {
      printf ("out of range\n");
      printf ("this function requires a value of 1 or 2\n");
    }
  else
    {
      printf ("Switching\n");
      switch (k)
        {
        case 1:
          printf ("1\n");
          break;
        case 2:
          printf ("2\n");
          break;
        }
    }
}

Produce questo output durante la formattazione secondo le regole BSD:

int
foo(int k) {
	if (k < 1 || k > 2) {
		printf("out of range\n");
		printf("this function requires a value of 1 or 2\n");
	} else {
		printf("Switching\n");
		switch (k) {
		case 1:
			printf("1\n");
			break;
		case 2:
			printf("2\n");
			break;
		}
	}
}

Guarda anche

Concetti correlati

  • Tabstop elastico , una funzionalità di molti editor di codice sorgente che rileva e mantiene i rientri allineati
  • Minificazione , rendendo compatto il codice sorgente, anche se diventa più difficile da capire per gli umani
  • Offuscamento , che rende deliberatamente il codice sorgente molto difficile da capire per gli umani, anche se diventa un po' contorto

Utilità

  • enscript , un convertitore da testo a PostScript, con belle funzionalità di stampa
  • indent , una bella stampante per codice C e C++, in bundle con Unix
  • Pretty Diff , un'app web per il confronto dei dati, con funzionalità di stampa graziose

Riferimenti

link esterno