struct info_word *next_word(FILE *fp);permette di leggere gli ipertesti parola per parola. Il file
fp
è un file contenente un ipertesto precedentemente aperto (in lettura) con una chiamata alla funzione
FILE *open_ipertesto(char *fname);Questa funzione rimpiazza la usuale
fopen
necessaria per l'apertura di un file testo. Termina la lettura dell'ipertesto, il file va chiuso per mezzo di una chiamata alla funzione
FILE *close_ipertesto(char *fp);
next_word
ritorna una nuova struttura contenente tutte le informazioni della parola letta o NULL in caso di EOF. Ad esempio, se la parola è al'interno di un tag <b>
e di un'ancora <a href="documento">
, la struttura avrà un valore diverso da 0 nel campo bold
e un puntatore alla stringa "documento"
nel campo file_link
, oltre alla posizione della parola e alla posizione del link (pari al numero d'ordine dell'ancora contenente il link nell'ipertesto) nei corrispondenti campi. In maggior dettaglio, la next_word
ritorna un valore del tipo
struct info_word { char *parola; /* parola */ int word_pos; /* posizione parole nel file */ int title; /* vero se parola nel titolo */ int italic; /* vero se parola in corsivo */ int bold; /* vero se parola in grassetto */ size word_size; /* dimensione*/ char *file_link; /* in caso di link attivo, contiene il nome della pagina (file) del link */ int link_pos; /* posizione del link nel file */ };contenente i seguenti valori:
parola
contiene la stringa della parola letta;
word_pos
contiene la posizione nell'ipertesto della parola letta (pari al numero d'ordine della parola, ovvero, al numero di parole che la precedono più 1);
title
è diverso da 0 se la parola è nel titolo (dentro una coppia di tag <title> </title>
) e 0 se si trova nel body (dentro una coppia di tag <body> <body>
) o in un'altra parte del documento;
italic
è diverso da 0 se la parola è in corsivo (dentro una coppia di tag <i> </i>
);
bold
è diverso da 0 se la parola è in corsivo (dentro una coppia di tag <b> </b>
);
word_size
contiene la dimensione della parola, ovvero un valore compreso in normal
, small
(parola dentro coppia di tag <small> </small>
) o large
(parola dentro coppia di tag <large> </large>
);
file_link
contiene un puntatore alla stringa del link assocato all'ancora (coppia di tag <a> </a>
) dentro cui appare la parola, o NULL
se non ci sono link associati alla parola;
link_pos
contiene il numero di ancore che precedono la parola (inclusa, eventualmente quella dentro cui si trova la parola).
next_word
.
La next_word
rende trasparente al programma la utilizza i tag presenti nel documento; ad ogni nuova lettura, la next_word
mantiene le informazioni sugli attributi attivi in quel momento, legge i tag che precedono la successiva parola aggiornando gli attributi della paorla e infine legge la parola.
Il precedente funzionamento della next_token
rende molto semplice la lettura delle parole, ma rende non immediato l'inidividuazione dei link presenti nel testo, se si vuole evitare di considerare più volte i link associati ad ancore che contengono più di una parola. Ad esempio, se si ha
<a href="documento">vai al link</a>per tutte e tre le parole "vai", "al" e "link"
next_word
restituisce la stringa "documento"
nel campo file_link
. È però ovvio che per quanto riguarda la molteplicità del link, questa ancora deve portare solo ad un incremento di 1. Per individuare il punto in cui viene letto un nuovo link si può utilizzare il campo link_pos
restituito ad ogni lettura di una parola. Questo campo ritorna sempre il numero di link letti sino a quel punto, quindi, la lettura di un nuovo link può essere facilmente individuata osservando che il valore di link_pos
è aumentato rispetto a quello ritornato dalla precedente chiamata di next_word
.
test-parser.c
contiene un main per la verifica del funzionamento del parser. Il programma analizza una lista di file passati sulla linea di comando o stdin nel caso di lista vuota. Per ogni file letto viene stampata la lista delle parole (e dei corrispodeti attributi) lette, inoltre, alla fine viene stampata la sequenza ordinata dei link torvato nel file, riportando per ciascun link il suo numero d'ordine e la sua posizione nell'ipertesto.
![]() |
![]() |
Questo sito usa cookies, usandolo ne accettate la presenza. (CookiePolicy)
Torna al Dipartimento di Informatica ![]() |
|
![]() |
![]() |