Example #1
0
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);
}
Example #2
0
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;
}