Exemple #1
0
static SYMID
rpmsyck_parse_handler(SyckParser *p, SyckNode *n)
{
    rpmsyck_node node = (rpmsyck_node) xcalloc(1, sizeof(*node));

    switch (n->kind)  {
        case syck_str_kind:
            node->type = T_STR;
	    node->value.key = syck_strndup(n->data.str->ptr, n->data.str->len);
        break;

	case syck_seq_kind: {
            rpmsyck_node val;
            rpmsyck_node seq = (rpmsyck_node) xcalloc(n->data.list->idx + 1, sizeof(*node));
	    int i;
            node->type = T_SEQ;

            for (i = 0; i < n->data.list->idx; i++) {
                SYMID oid = syck_seq_read(n, i);
                syck_lookup_sym(p, oid, (char **)&val);
                seq[i] = val[0];
            }
            seq[n->data.list->idx].type = T_END;
            node->value.seq = seq;
	}
	break;

        case syck_map_kind: {
	    hashTable ht = htCreate(n->data.pairs->idx * 2, 0, 0, NULL, NULL);
            rpmsyck_node val;
	    int i;
            node->type = T_MAP;
            for (i = 0; i < n->data.pairs->idx; i++) {
		char *key;
                SYMID oid = syck_map_read(n, map_key, i);
                syck_lookup_sym(p, oid, (char **)&val);
		key = val[0].value.key;

                oid = syck_map_read(n, map_value, i);
                syck_lookup_sym(p, oid, (char **)&val);

		htAddEntry(ht, key, val);
            }
            node->value.map = ht;
	}
        break;
    }

    node->tag = n->type_id ? syck_strndup(n->type_id, strlen(n->type_id)) : NULL;

    return syck_add_sym(p, (char *) node);
}
Exemple #2
0
static int syck_load(lua_State *L)
{
    struct parser_xtra *bonus;
    SyckParser *parser;
    SYMID v;
    int obj;

    if (!luaL_checkstring(L, 1))
        luaL_typerror(L, 1, "string");

    parser = syck_new_parser();
    parser->bonus = S_ALLOC_N(struct emitter_xtra, 1);

    bonus = (struct parser_xtra *)parser->bonus;
    bonus->L = lua_newthread(L);

    syck_parser_str(parser, (char *)lua_tostring(L, 1), lua_strlen(L, 1), NULL);
    syck_parser_handler(parser, lua_syck_parser_handler);
    v = syck_parse(parser);
    syck_lookup_sym(parser, v, (void *)&obj);

    syck_free_parser(parser);

    lua_xmove(bonus->L, L, 1);

    return 1;
}
Exemple #3
0
static int syck_load(lua_State *L)
{
	struct parser_xtra *bonus;
	SyckParser *parser;
	SYMID v;
	int obj;

	if (!luaL_checkstring(L, 1))
		luaL_typerror(L, 1, "string");

	parser = syck_new_parser();
	parser->bonus = S_ALLOC_N(struct parser_xtra, 1);

	bonus = (struct parser_xtra *)parser->bonus;
	bonus->orig = L;
	bonus->L = lua_newthread(L);

	syck_parser_str(parser, (char *)lua_tostring(L, 1), lua_strlen(L, 1), NULL);
	syck_parser_handler(parser, lua_syck_parser_handler);
	syck_parser_error_handler(parser, lua_syck_error_handler);
	v = syck_parse(parser);
	syck_lookup_sym(parser, v, (char **)&obj);

	syck_free_parser(parser);

	lua_pop(L,1); //pop the thread, we don't need it anymore.
	lua_xmove(bonus->L, L, 1);

	if ( parser->bonus != NULL )
		S_FREE( parser->bonus );
	
	return 1;
}
Exemple #4
0
static JSBool
syck_load(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
    SyckParser *parser = syck_new_parser();
    struct parser_xtra *bonus = xcalloc(1, sizeof(*bonus));
    SYMID v;
    int sobj;
    char * s = NULL;
    JSBool ok = JS_FALSE;

if (_debug)
fprintf(stderr, "==> %s(%p,%p,%p[%u],%p)\n", __FUNCTION__, cx, obj, argv, (unsigned)argc, rval);

    ok = JS_ConvertArguments(cx, argc, argv, "s", &s);
    if (!ok)
	goto exit;

#ifdef	NOTYET
    bonus->L = lua_newthread(L);
#endif
    parser->bonus = bonus;

    syck_parser_str(parser, s, strlen(s), NULL);
    syck_parser_handler(parser, js_syck_parser_handler);

    v = syck_parse(parser);
    syck_lookup_sym(parser, v, (char **)&sobj);

#ifdef	NOTYET
    lua_xmove(bonus->L, L, 1);
#endif

    ok = JS_TRUE;

exit:
    syck_free_parser(parser);
    return ok;
}
Exemple #5
0
rpmSyck rpmSyckLoad(char *yaml) {
    SyckParser *parser;
    SYMID v;
    rpmSyck rs;

    rs = rpmSyckCreate();
    
    parser = syck_new_parser();

    syck_parser_str_auto(parser, yaml, NULL);
    syck_parser_handler(parser, rpmsyck_parse_handler);
    syck_parser_error_handler(parser, NULL);
    syck_parser_implicit_typing(parser, 1);
    syck_parser_taguri_expansion(parser, 1);

    if((v = syck_parse(parser)))
         syck_lookup_sym( parser, v, (char **)&rs->firstNode);

    rs->syms = parser->syms;
    parser->syms = NULL;
    syck_free_parser(parser);

    return rs;
}
Exemple #6
0
static SYMID
js_syck_parser_handler(SyckParser *p, SyckNode *n)
{
#ifdef	NOTYET
    struct parser_xtra *bonus = (struct parser_xtra *)p->bonus;
    int o2;
    int o3 = -1;
    int i;
#endif
    int o = 0;
    SYMID oid;

    switch (n->kind) {
    case syck_str_kind:
#ifdef	NOTYET
	if (n->type_id == NULL || strcmp(n->type_id, "str") == 0) {
	    lua_pushlstring(bonus->L, n->data.str->ptr, n->data.str->len);
	    o = lua_gettop(bonus->L);
	} else if (strcmp(n->type_id, "null") == 0) {
	    lua_pushnil(bonus->L);
	    o = lua_gettop(bonus->L);
	} else if (strcmp(n->type_id, "bool#yes") == 0) {
	    lua_pushboolean(bonus->L, 1);
	    o = lua_gettop(bonus->L);
	} else if (strcmp(n->type_id, "bool#no") == 0) {
	    lua_pushboolean(bonus->L, 0);
	    o = lua_gettop(bonus->L);
	} else if (strcmp(n->type_id, "int#hex") == 0) {
	    long intVal = strtol(n->data.str->ptr, NULL, 16);
	    lua_pushnumber(bonus->L, intVal);
	    o = lua_gettop(bonus->L);
	} else if (strcmp(n->type_id, "int") == 0) {
	    long intVal = strtol(n->data.str->ptr, NULL, 10);
	    lua_pushnumber(bonus->L, intVal);
	    o = lua_gettop(bonus->L);
	} else {
	    lua_pushlstring(bonus->L, n->data.str->ptr, n->data.str->len);
	    o = lua_gettop(bonus->L);
	}
#endif
	break;
    case syck_seq_kind:
#ifdef	NOTYET
	lua_newtable(bonus->L);
	o = lua_gettop(bonus->L);
	for (i = 0; i < n->data.list->idx; i++) {
	    oid = syck_seq_read(n, i);
	    syck_lookup_sym(p, oid, (char **)&o2);
	    lua_pushvalue(bonus->L, o2);
	    lua_rawseti(bonus->L, o, i+1);
	}
#endif
	break;
    case syck_map_kind:
#ifdef	NOTYET
	lua_newtable(bonus->L);
	o = lua_gettop(bonus->L);
	for (i = 0; i < n->data.pairs->idx; i++) {
	    oid = syck_map_read(n, map_key, i);
	    syck_lookup_sym(p, oid, (char **)&o2);
	    oid = syck_map_read(n, map_value, i);
	    syck_lookup_sym(p, oid, (char **)&o3);

	    lua_pushvalue(bonus->L, o2);
	    lua_pushvalue(bonus->L, o3);
	    lua_settable(bonus->L, o);
	}
#endif
	break;
    }
    oid = syck_add_sym(p, (char *)((long)o));
    return oid;
}
Exemple #7
0
/*
static void stackDump (lua_State *L) {
      int i;
      int top = lua_gettop(L);
      for (i = 1; i <= top; i++) {  // repeat for each level 
        int t = lua_type(L, i);
		printf("%i:	", (top-i+1));
		switch (t) {
    
          case LUA_TSTRING:  // strings 
            printf("[string]");
            break;
    
          case LUA_TBOOLEAN:  // booleans 
            printf(lua_toboolean(L, i) ? "true" : "false");
            break;
    
          case LUA_TNUMBER:  // numbers 
            printf("%g", lua_tonumber(L, i));
            break;
    
          default:  // other values 
            printf("%s", lua_typename(L, t));
            break;
    
        }
        printf("\n");  // put a separator 
      }
      printf("\n----------\n");  // end the listing 
	  }
*/
SYMID
lua_syck_parser_handler(SyckParser *p, SyckNode *n)
{
	struct parser_xtra *bonus = (struct parser_xtra *)p->bonus;
	int o, o2, o3 = -1;
	SYMID oid;
	int i;

	if(!lua_checkstack(bonus->L, 1))
		luaL_error(bonus->orig,"syck parser wanted too much stack space.");
	
	switch (n->kind) {
		case syck_str_kind:
			if (n->type_id == NULL || strcmp(n->type_id, "str") == 0) {
				lua_pushlstring(bonus->L, n->data.str->ptr, n->data.str->len);
				o = lua_gettop(bonus->L);
			}
			else if (strcmp(n->type_id, "null") == 0)
			{
				lua_pushnil(bonus->L);
				o = lua_gettop(bonus->L);
			}
			else if (strcmp(n->type_id, "bool#yes") == 0)
			{
				lua_pushboolean(bonus->L, 1);
				o = lua_gettop(bonus->L);
			}
			else if (strcmp(n->type_id, "bool#no") == 0)
			{
				lua_pushboolean(bonus->L, 0);
				o = lua_gettop(bonus->L);
			}
			else if (strcmp(n->type_id, "float") == 0 || strcmp(n->type_id, "float#fix") == 0 || strcmp(n->type_id, "float#exp") == 0) 
			{
				double f;
				syck_str_blow_away_commas(n);
				f = strtod(n->data.str->ptr, NULL);
				lua_pushnumber(bonus->L, f);
				o = lua_gettop(bonus->L);
			}
			else if (strcmp(n->type_id, "int#hex") == 0)
			{
				long intVal = strtol(n->data.str->ptr, NULL, 16);
				lua_pushnumber(bonus->L, intVal);
				o = lua_gettop(bonus->L);
			}
			else if (strcmp(n->type_id, "int") == 0)
			{
				long intVal = strtol(n->data.str->ptr, NULL, 10);
				lua_pushnumber(bonus->L, intVal);
				o = lua_gettop(bonus->L);                 
			}
			else
			{
				lua_pushlstring(bonus->L, n->data.str->ptr, n->data.str->len);
				o = lua_gettop(bonus->L);
			}
			break;

		case syck_seq_kind:
			lua_newtable(bonus->L);
			o = lua_gettop(bonus->L);
			for ( i=0; i < n->data.list->idx; i++ )
			{
				oid = syck_seq_read(n, i);
				syck_lookup_sym(p, oid, (char **)&o2);
				lua_pushvalue(bonus->L, o2);
				lua_rawseti(bonus->L, o, i+1);
			}
			break;

		case syck_map_kind:
			lua_newtable(bonus->L);
			o = lua_gettop(bonus->L);
			for ( i=0; i < n->data.pairs->idx; i++ )
			{
				oid = syck_map_read(n, map_key, i);
				syck_lookup_sym(p, oid, (char **)&o2);
				oid = syck_map_read(n, map_value, i);
				syck_lookup_sym(p, oid, (char **)&o3);

				lua_pushvalue(bonus->L, o2);
				lua_pushvalue(bonus->L, o3);
				lua_settable(bonus->L, o);
			}
			break;
	}
	oid = syck_add_sym(p, (char *)o);
	return oid;
}