| ANSWER TO EXERCISE 75 | |
|
(Cf. the blackboard code in 'Toyshop'.)
Global from_char; Global to_char;
[ QuotedText i j f;
i = parse->((++wn)*4-3);
if (buffer->i=='"')
{ for (j=i+1:j<=(buffer->1)+1:j++)
if (buffer->j=='"') f=j;
if (f==0) return -1;
from_char = i+1; to_char=f-1;
if (from_char>to_char) return -1;
while (f> (parse->(wn*4-3))) wn++; wn++;
return 0;
}
return -1;
];
Note that in the case of success, the word marker wn is moved beyond the
last word accepted (since the Z-machine automatically tokenises
a double-quote as a single word). The text is treated as though it
were a preposition, and the positions where the quoted text starts and
finishes in the raw text buffer are recorded, so that an action routine
can easily extract the text and use it later. (Note that "" with no
text inside is not matched by this routine but only because the last
if statement throws out that one case.)
|