Newsgroup: it.comp.software.tex
Titolo: listings e file .diff

Salve a tutti,
ho cercato un po' in giro sul manuale di listings, su google e sul sito di
GuIT, ma ancora non ho trovato risposta. Vi pongo la mia domanda.
Qualcuno ha mai definito un stile per listings da usare con i file .diff ?
La mia intenzione e' di mostrare le righe da rimuovere in rosso e le righe da
aggiungere in blu (o verde), e fino a qui non ho grandi problemi, il problema
e' riuscire a conservare la formattazione delle parole chiave secondo lo stile
del linguaggio di programmazione usato nei file sui quali sono state fatte le
modifiche. Creco di spiegarmi con un esempio :)
Ho un .diff fatto fra dule file C, voglio aggiungere i colori ma lasciare che
le parole chiave, o le stringhe, o i commenti siano evidenziati con il loro
stile caratteristico.
Una soluzione barbara sarebbe quella di sottoporre il file in questione ad un
po' di "preprocessing" aggiungendo qualche marcatore e poi usare
"moredelim=[s]{}{}" in listings, funziona, ma vorrei evitare di modificare il
file (cosi' posso includerlo senza problemi).
La seconda soluzione, insoddisfacente, e' quella di usare
"morecomment=[f][]{+}" e "morecomment=[f][]{-}" ma in queusato modo non posso
conservare lo stile delle parole chiave e degli altri elementi del cosice
sorgente.
Un file abbastanza minimale che evidenzia il mio problema e' questo:
--------  file -----------
\documentclass[12pt]{article}
\usepackage{color}
\usepackage{listings}
\lstnewenvironment{diff}
  {
    \lstset{language=C,%
      tabsize=8, columns=fullflexible, keepspaces=false,%
      frame=shadowbox, framerule=0.5pt, rulesepcolor=\color{black},%
      deletecomment=[f],
      morecomment=[f][\bfseries]{@@},
      morecomment=[f][\color{blue}]{+++},
      morecomment=[f][\color{red}]{---},
      moredelim=**[l][\color{blue}]{+},
      moredelim=**[l][\color{red}]{-}
    }
  }
  {}
\begin{document}
\section{diff}
\begin{diff}
diff -pruN smsg-0.1_old/smsg.c smsg-0.1/smsg.c
--- smsg-0.1_old/smsg.c	2004-08-17 18:43:39.000000000 +0200
+++ smsg-0.1/smsg.c	2004-08-14 00:11:59.000000000 +0200
@@ -65,26 +66,33 @@ static void help()
 
 int main(int argc, char *argv[])
 {
+  struct addrinfo hints, *res, *ressave;
+  int error;
 
   pid_t pid;
   int counter = 0;
   int listenfd=-1, connfd;
 
 
-  service=htons(DEFAULT_SERVICE);
+  snprintf(service, 5, "%d", DEFAULT_SERVICE );
 
   while( (c=getopt(argc, argv, "p:h")) != -1 )
     switch(c)
     {
     case 'p':
-      service=htons(atoi(optarg));
+      strncpy(service, optarg, 5);
       break;
 
     case 'h':
\end{diff}  
\end{document}
--------  file -----------
Se qualcosa non e' chiaro fatemelo sapere, per favore.
Se qualcuno potesse aiutarmi a trovare una soluzione...
Grazie mille.
Ciao ciao,
   RN.

 Qualcuno ha mai definito un stile per listings da usare con i file .diff ?
Beh, mi rispondo da solo dopo qualche mese :)
Rileggendo il manuale di listings ho pensato di usare "alsolanguage" per
ottenere quello che desideravo.
La mia soluzione e' questa:
\newcommand{\diffinput}[1]
{
  \lstset{language=, alsolanguage=C,%
  tabsize=8, columns=flexible, keepspaces=false,%
  %frame=shadowbox, framerule=0.3pt, rulesepcolor=\color{gray},%
  xleftmargin=0.5em,
  xrightmargin=1em,
  moredelim=[l][\bfseries]{@@},
  moredelim=[l][\color{blue}]{+++},
  moredelim=[l][\color{red}]{---},
  morecomment=**[f][\color{blue}]{+},
  morecomment=**[f][\color{red}]{-}
  }
  \lstinputlisting{#1}
}
in questo modo il file incluso rispettera' lo stile definito per il linguaggio
C, ma avra' le righe prodotte da diff colorate in modo opportuno, evviva!
Dato che diff puo' essere usato per qualsiasi tipo di file, vi bastera'
modificare in modo opportuno la direttiva alsolanguage per usare questa cosa
anche con altri linguaggi...
Ciao,
   RN.