size_t XMLReader::PushNamespaces()
	{
		size_t previousMappingSize = mNamespaceMappings.size();

		NamespaceMapping mapping;
		for (std::vector<Attribute>::iterator i = mAttributes.begin(); i != mAttributes.end(); ++i) {
			if (Equals(i->mName, "xmlns")) {
				mapping.mPrefix.clear();
				mapping.mNamespaceURI = i->mValue;
				mNamespaceMappings.push_back(mapping);
			}
			else if (Equals(i->mPrefix, "xmlns")) {
				mapping.mPrefix = i->mLocalName;
				mapping.mNamespaceURI = i->mValue;
				mNamespaceMappings.push_back(mapping);
			}
		}
		LookupNamespace(mCurrentName);
		for (std::vector<Attribute>::iterator i = mAttributes.begin(); i != mAttributes.end(); ++i) {
			LookupNamespace(*i);
		}
		return previousMappingSize;
	}
Beispiel #2
0
static int lu_ts_func(lua_State *L)
{
	const char *nsName = luaL_checkstring(L, 1);
	const char *fnName = luaL_checkstring(L, 2);

	if (!strcmp(nsName, ""))
		nsName = NULL;

	char *ns = (char *)LookupNamespace(nsName);
	char *nsEntry = (char *)Namespace__lookup((int)ns, (int)StringTableInsert(StringTable, fnName, false));

	if (nsEntry == NULL)
	{
		luaL_error(L, "unknown function %s::%s", nsName, fnName);
		return 0;
	}

	lua_pushlightuserdata(L, nsEntry);
	lua_pushcclosure(L, lu_ts_func_call, 1);
	return 1;
}