Beispiel #1
0
bool MCParseMenuString(MCString &r_string, IParseMenuCallback *p_callback, bool p_is_unicode, uint1 p_menumode)
{
	MCString *t_lines = NULL;
	uint2 t_nlines = 0;
	MCMenuItem t_menuitem;
	MCU_break_string(r_string, t_lines, t_nlines, p_is_unicode);
	MCExecPoint ep;
	bool t_hastags = false;
	
	p_callback->Start();
	
	for (int i=0; i<t_nlines; i++)
	{
		memset(&t_menuitem, 0, sizeof(MCMenuItem));
		t_menuitem.is_unicode = p_is_unicode;
		t_menuitem.menumode = p_menumode;

		char *t_string;
		uint4 t_strlen;
		if (p_is_unicode)
		{
			ep.setsvalue(t_lines[i]);
			ep.utf16toutf8();
			t_string = ep.getsvalue().clone();
			t_strlen = ep.getsvalue().getlength();
		}
		else
		{
			t_string = t_lines[i].clone();
			t_strlen = t_lines[i].getlength();
		}
		
		ParseMenuItemString(t_string, t_strlen, &t_menuitem);
		
		if (p_is_unicode)
		{
			ep.setsvalue(t_menuitem.label);
			ep.utf8toutf16();
			t_menuitem.label.set(ep.getsvalue().clone(), ep.getsvalue().getlength());
		}
		p_callback->ProcessItem(&t_menuitem);

		delete t_string;

		if (t_menuitem.tag != NULL)
		{
			delete t_menuitem.tag.getstring();
			t_hastags = true;
		}
		if (p_is_unicode)
			delete t_menuitem.label.getstring();
	}
	
	p_callback->End(t_hastags);

	delete t_lines;
	return false;
}