45#include "rxp/XML_Parser.h"
47static EST_Regex simpleIDRegex(
".*#id(w\\([0-9]+\\))");
48static EST_Regex rangeIDRegex(
".*#id(w\\([0-9]+\\)).*id(w\\([0-9]+\\))");
62 Parse_State() : contents(100) {}
114 (
const char *)
them->
k,
115 (
const char *)
them->
v);
118EST_read_status solexml_read(
FILE *
file,
124 (
void)print_attributes;
125 Sole_Parser_Class pclass;
133 parser->track_context(TRUE);
145static void ensure_relation(Parse_State *state)
147 if (state->rel==NULL)
149 state->rel = state->utt->create_relation(state->relName);
159 state->contents.add_item(
id, c);
172 val = attributes.
val(
"id");
175 else if (attributes.
present(
"href"))
177 val = attributes.
val(
"href");
178 int starts[EST_Regex_max_subexpressions];
179 int ends[EST_Regex_max_subexpressions];
181 if (val.matches(simpleIDRegex, 0,
starts,
ends))
187 else if (val.matches(rangeIDRegex, 0,
starts,
ends))
192 for(
int i=
n1; i<=
n2; i++)
202 EST_warning(
"element with bad ID or HREF '%s'", (
const char *)val);
224 Parse_State *state = (Parse_State *)data;
247 Parse_State *state = (Parse_State *)data;
251 if (
strcmp(name,
"solexml")==0)
253 state->relName=attributes.
val(
"relation");
254 printf(
"start solexml relation=%s\n", (
const char *)state->relName);
257 else if (
strcmp(name,
"text-elem")==0)
263 ensure_relation(state);
265 if (
strcmp(name,
"anaphora-elem")==0
266 ||
strcmp(name,
"wordlist")==0
270 extract_ids(attributes,
ids);
284 state->current = state->parent;
285 state->parent=iup(state->parent);
303 if (state->current == NULL)
304 if (state->parent == NULL)
305 item = state->rel->append();
307 item = state->parent->insert_below();
309 item = state->current->insert_after();
311 item->set_contents(cont);
318 EST_warning(
"SOLE XML Parser: unknown element %s", name);
329 Parse_State *state = (Parse_State *)data;
331 if (
strcmp(name,
"language")==0)
333 state->utt->f.set(
"language", attributes.
val(
"name"));
337 element_open(c, p, data, name, attributes);
338 element_close(c, p, data, name);
348 Parse_State *state = (Parse_State *)data;
350 if (
strcmp(name,
"anaphora-elem")==0
351 ||
strcmp(name,
"wordlist")==0
355 state->current = state->parent;
356 state->parent=iup(state->parent);
368 Parse_State *state = (Parse_State *)data;
370 if (state->parent != NULL && p.
context(0) ==
"w")
395 Parse_State *state = (Parse_State *)data;
408 EST_error(
"SOLE XML Parser %s", get_error(p));
void set(const EST_String &name, int ival)
EST_Features f
General features for this item.
void set_name(const EST_String &s)
set name
static const EST_String Empty
Constant empty string.
V & val(const K &key, int &found) const
int present(const K &key) const
Does the key have an entry?
void clear()
remove everything in utterance
virtual void element(XML_Parser_Class &c, XML_Parser &p, void *data, const char *name, XML_Attribute_List &attributes)
virtual void error(XML_Parser_Class &c, XML_Parser &p, void *data)
virtual void processing(XML_Parser_Class &c, XML_Parser &p, void *data, const char *instruction)
virtual void document_close(XML_Parser_Class &c, XML_Parser &p, void *data)
virtual void pcdata(XML_Parser_Class &c, XML_Parser &p, void *data, const char *chars)
virtual void document_open(XML_Parser_Class &c, XML_Parser &p, void *data)
virtual void element_open(XML_Parser_Class &c, XML_Parser &p, void *data, const char *name, XML_Attribute_List &attributes)
virtual void cdata(XML_Parser_Class &c, XML_Parser &p, void *data, const char *chars)
virtual void element_close(XML_Parser_Class &c, XML_Parser &p, void *data, const char *name)
void error(XML_Parser_Class &c, XML_Parser &p, void *data, EST_String message)
EST_String context(int n)