Exemplo n.º 1
0
PUBLIC DomElement* dom_element_create(SvgToken* token){
	DomElement* thiz = NULL;
	ATTR* attr = NULL;
	Iterator* attr_iter = NULL;
	return_val_if_fail(token, NULL);
	thiz = (DomElement*)calloc(1, sizeof(DomElement));
	thiz->nodeType = DOM_NODE_TYPE_ELEMENT;
	thiz->nodeName = copy_string(svg_token_get_data(token));
	thiz->nodeValue = NULL;
	//读取属性信息
	//thiz->attributes = attr_dlist_to_dom_attr_list(svg_token_get_attributes(token));
	thiz->attributes = svg_token_get_attributes(token);
	//查找是否有id属性
	attr_iter = dlist_iterator_create(thiz->attributes);
	while(attr = (ATTR*)attr_iter->get(attr_iter)){
		if(!_tcscmp(attr->name, _T("id"))){
			thiz->id = attr->value;//FIXME:这里没有拷贝
			break;
		}
		attr_iter->next(attr_iter);
	}

	//FIXME:创建子节点链表,这里有待完善
	thiz->childNodes = dlist_create(NULL);

	thiz->tagName = copy_string(svg_token_get_data(token));//FIXME:一些相同的属性是否保留两份副本?如Element的tagName和nodeName
	return thiz;
}
Exemplo n.º 2
0
PRIVATE DList* attr_dlist_to_dom_attr_list(DList* attr_list){
	DomAttr* dom_attr = NULL;
	ATTR* attr = NULL;
	Iterator* attr_iter = NULL;
	DList* dom_attr_list = NULL;
	return_val_if_fail(attr_list, NULL);
	dom_attr_list = dlist_create(NULL);//FIXME
	attr_iter = dlist_iterator_create(attr_list);
	while(attr = (ATTR*)attr_iter->get(attr_iter)){
		dom_attr = dom_attr_create(attr);
		dlist_append(dom_attr_list, dom_attr);
	}
	return dom_attr_list;
}
Exemplo n.º 3
0
int main(int argc, char* argv[])
{
    int i = 0;
    int n = 101;
    int last = n - 1;
    DList* dlist = dlist_create(NULL, NULL);

    for (i = 0; i < n; i++) {
        dlist_append(dlist, (void*)i);
    }

    Iterator* forward = dlist_iterator_create(dlist);
    Iterator* backward = dlist_iterator_create(dlist);

    iterator_advance(backward, last);
    invert(forward, backward);
    dlist_foreach(dlist, check_and_dec_int, &last);
    iterator_destroy(forward);
    iterator_destroy(backward);
    dlist_destroy(dlist);

    return 0;
}
Exemplo n.º 4
0
PUBLIC DomElement* svg_dom_get_element_by_id(SvgDom* thiz, LPCTSTR id){
	DomElement* dom_element = NULL;
	Iterator* dom_element_iter = NULL;
	BOOL id_element_found = FALSE;
	return_val_if_fail(thiz && id, NULL);//FIXME
	dom_element_iter = dlist_iterator_create(thiz->id_element_list);
	while(dom_element = (DomElement*)dom_element_iter->get(dom_element_iter)){
		if(!_tcscmp(dom_element->id, id)){
			id_element_found = TRUE;
			break;
		}
		dom_element_iter->next(dom_element_iter);
	}
	dom_element_iter->destroy(dom_element_iter);
	if(id_element_found){
		return dom_element;
	}else{
		return NULL;
	}
}