Bug Summary

File:modules/rxp/ttsxml.cc
Location:line 153, column 5
Description:Value stored to 'utt' is never read

Annotated Source Code

1 /*************************************************************************/
2 /* */
3 /* Centre for Speech Technology Research */
4 /* University of Edinburgh, UK */
5 /* Copyright (c) 1998 */
6 /* All Rights Reserved. */
7 /* */
8 /* Permission is hereby granted, free of charge, to use and distribute */
9 /* this software and its documentation without restriction, including */
10 /* without limitation the rights to use, copy, modify, merge, publish, */
11 /* distribute, sublicense, and/or sell copies of this work, and to */
12 /* permit persons to whom this work is furnished to do so, subject to */
13 /* the following conditions: */
14 /* 1. The code must retain the above copyright notice, this list of */
15 /* conditions and the following disclaimer. */
16 /* 2. Any modifications must be clearly marked as such. */
17 /* 3. Original authors' names are not deleted. */
18 /* 4. The authors' names are not used to endorse or promote products */
19 /* derived from this software without specific prior written */
20 /* permission. */
21 /* */
22 /* THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK */
23 /* DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING */
24 /* ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT */
25 /* SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE */
26 /* FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES */
27 /* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN */
28 /* AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, */
29 /* ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF */
30 /* THIS SOFTWARE. */
31 /* */
32 /*************************************************************************/
33 /* */
34 /* Author : Alan W Black */
35 /* Date : May 1998 */
36 /* ------------------------------------------------------------------- */
37 /* Interface between festival and the Richard's XML parser */
38 /* */
39 /* Provides a LISP function to do the analysis so that this directory */
40 /* reasonable be optional */
41 /* */
42 /*************************************************************************/
43
44#include "EST_Pathname.h"
45#include "festival.h"
46#include "text.h"
47#include "rxp.h"
48
49// So we can share the known_ids table.
50#include "ling_class/EST_utterance_xml.h"
51
52using namespace std;
53
54
55static InputSource entity_open(Entity ent, void *arg);
56
57static LISP tts_file_xml(LISP filename)
58{
59 // Parse the xml file using the LTG's xml parser
60 EST_String inname = get_c_string(filename);
61 EST_String line, type, remainder;
62 Parser p;
63 Entity ent = 0;
64 InputSource source = 0;
65 LISP element_defs;
66 LISP utt = NIL((struct obj *) 0); // for cummulation of tokens
67
68 if (inname == "-")
69 source = SourceFromStream("<stdin>",stdinstdin);
70 else
71 {
72 ent = NewExternalEntity("",0,strdup8(inname),0,0)NewExternalEntityN("", "" ? strlen(("")) : 0, 0, strdup8(inname
), 0, 0)
;
73 if (ent)
74 source = EntityOpen(ent);
75 }
76
77 if (!source)
78 {
79 cerr << "xml: unable to open input file \"" << inname << "\"" << endl;
80 festival_error()(errjmp_ok ? longjmp(*est_errjmp,1) : festival_tidy_up(),exit
(-1))
;
81 }
82 element_defs = siod_get_lval("xxml_elements",NULL__null);
83 p = NewParser();
84 ParserSetEntityOpener(p, entity_open);
85 ParserSetFlag(p, ReturnDefaultedAttributes, 1);
86 if (ParserPush(p, source) == -1)
87 {
88 cerr << "xml: parser error\n" << endl;
89 festival_error()(errjmp_ok ? longjmp(*est_errjmp,1) : festival_tidy_up(),exit
(-1))
;
90 }
91
92 while (1)
93 {
94 XBit bit = ReadXBit(p);
95 if (bit->type == XBIT_eof)
96 break;
97 else if (bit->type == XBIT_start)
98 {
99 Attribute b;
100 LISP att=NIL((struct obj *) 0);
101 for (b=bit->attributes; b; b=b->next)
102 att = cons(cons(rintern(b->definition->name),
103 cons(cons(rintern(b->value),NIL((struct obj *) 0)),NIL((struct obj *) 0))),att);
104 utt = xxml_call_element_function(
105 EST_String("(")+bit->element_definition->name,att,
106 element_defs,utt);
107 }
108 else if (bit->type == XBIT_end)
109 {
110 utt = xxml_call_element_function(
111 EST_String(")")+bit->element_definition->name,NIL((struct obj *) 0),
112 element_defs,utt);
113 }
114 else if (bit->type == XBIT_empty)
115 {
116 Attribute b;
117 LISP att=NIL((struct obj *) 0);
118 for (b=bit->attributes; b; b=b->next)
119 att = cons(cons(rintern(b->definition->name),
120 cons(cons(rintern(b->value),NIL((struct obj *) 0)),NIL((struct obj *) 0))),att);
121 utt = xxml_call_element_function(
122 EST_String(bit->element_definition->name),att,
123 element_defs,utt);
124 }
125 else if (bit->type == XBIT_pcdata)
126 {
127 utt = xxml_get_tokens(bit->pcdata_charsS1,
128 siod_get_lval("xxml_word_features",NULL__null),
129 utt);
130 }
131 else if (bit->type == XBIT_cdsect)
132 {
133 utt = xxml_get_tokens(bit->cdsect_charsS1,
134 siod_get_lval("xxml_word_features",NULL__null),
135 utt);
136 }
137 else if (bit->type == XBIT_pi)
138 {
139 cerr << "xml: ignoring pi " << bit->pi_charsS2 << endl;
140 }
141 else if (bit->type == XBIT_error)
142 {
143 ParserPerror(p,bit);
144 festival_error()(errjmp_ok ? longjmp(*est_errjmp,1) : festival_tidy_up(),exit
(-1))
;
145 }
146 else
147 {
148 // ignore it
149 }
150 FreeXBit(bit);
151 }
152 // Last call (should synthesize trailing tokens)
153 utt = xxml_call_element_function(" ",NIL((struct obj *) 0),element_defs,utt);
Value stored to 'utt' is never read
154
155 FreeDtd(p->dtd);
156 FreeParser(p);
157 if (ent) FreeEntity(ent);
158 return NIL((struct obj *) 0);
159}
160
161static LISP xml_register_id(LISP pattern_l, LISP result_l)
162{
163 EST_String pattern = get_c_string(pattern_l);
164 EST_String result = get_c_string(result_l);
165
166 utterance_xml_register_id(pattern, result);
167 return NIL((struct obj *) 0);
168}
169
170static LISP xml_registered_ids()
171{
172 EST_StrList ids;
173 utterance_xml_registered_ids(ids);
174 LISP result= NIL((struct obj *) 0);
175
176 EST_Litem *p;
177
178 for(p=ids.head(); p != NULL__null; p=p->next())
179 {
180 EST_String pat = ids(p);
181 p=p->next();
182 EST_String res = ids(p);
183 result = cons(
184 cons(strcons(pat.length(), pat),
185 strcons(res.length(), res)),
186 result);
187 }
188
189 return result;
190}
191
192void festival_rxp_init()
193{
194 proclaim_module("rxp");
195
196 init_subr_1("tts_file_xml",tts_file_xml,
197 "(tts_file_xml FILE)\n\
198 Low level tts processor for XML files. This assumes that element\n\
199 instructions are set up in the variable xxml_elements.");
200
201 init_subr_2("xml_register_id", xml_register_id,
202 "(xml_register_id PATTERN RESULT) \n\
203 Add a rule for where to find XML entities such as DTDs.\n\
204 The pattern is a regular expression, the result is a string\n\
205 with substitutions. If the PATTERN matches the a PUBLIC\n\
206 or SYSTEM identifier of an XML entity, the RESULT is expanded\n\
207 and then used as a filename.");
208
209 init_subr_0("xml_registered_ids", xml_registered_ids,
210 "(xml_registered_ids) \n\
211 Return the current list of places to look for XML entities.");
212}
213
214static InputSource entity_open(Entity ent, void *arg)
215{
216 (void)arg;
217 return utterance_xml_try_and_open(ent);
218}