END_TEST #endif /* END: grammars tests */ /* BEGIN: events tests */ /* END: events tests */ /* BEGIN: rules tests */ #if BUILD_IN_GRAMMARS_USE START_TEST (test_insertZeroProduction) { DynGrammarRule rule; errorCode tmp_err_code = EXIP_UNEXPECTED_ERROR; Production prod0Arr[2]; QNameID qname = {0,0}; rule.pCount = 0; rule.prodDim = 1; rule.production = prod0Arr; tmp_err_code = insertZeroProduction(&rule, EVENT_CH, 5, &qname, FALSE); fail_unless (tmp_err_code == EXIP_OK, "insertZeroProduction returns an error code %d", tmp_err_code); fail_unless (rule.pCount == 1); }
static errorCode handleProduction(EXIStream* strm, GrammarRule* currentRule, Production* prodHit, SmallIndex* nonTermID_out, ContentHandler* handler, void* app_data, unsigned int codeLength) { errorCode tmp_err_code = UNEXPECTED_ERROR; QNameID qnameID = {URI_MAX, LN_MAX}; *nonTermID_out = prodHit->nonTermID; switch(prodHit->eventType) { case EVENT_SD: if(handler->startDocument != NULL) { if(handler->startDocument(app_data) == EXIP_HANDLER_STOP) return HANDLER_STOP_RECEIVED; } break; case EVENT_ED: if(handler->endDocument != NULL) { if(handler->endDocument(app_data) == EXIP_HANDLER_STOP) return HANDLER_STOP_RECEIVED; } break; case EVENT_EE: if(handler->endElement != NULL) { if(handler->endElement(app_data) == EXIP_HANDLER_STOP) return HANDLER_STOP_RECEIVED; } if(codeLength > 1 && IS_BUILT_IN_ELEM(strm->gStack->grammar->props)) // #1# COMMENT { tmp_err_code = insertZeroProduction((DynGrammarRule*) currentRule, EVENT_EE, GR_VOID_NON_TERMINAL, &qnameID); if(tmp_err_code != ERR_OK) return tmp_err_code; } break; case EVENT_SC: if(handler->selfContained != NULL) { if(handler->selfContained(app_data) == EXIP_HANDLER_STOP) return HANDLER_STOP_RECEIVED; } break; default: // The event has content! if(prodHit->eventType == EVENT_CH) { if(codeLength > 1 && IS_BUILT_IN_ELEM(strm->gStack->grammar->props)) // #2# COMMENT { tmp_err_code = insertZeroProduction((DynGrammarRule*) currentRule, EVENT_CH, *nonTermID_out, &qnameID); if(tmp_err_code != ERR_OK) return tmp_err_code; } } tmp_err_code = decodeEventContent(strm, prodHit, handler, nonTermID_out, currentRule, app_data); if(tmp_err_code != ERR_OK) return tmp_err_code; break; } return ERR_OK; }