-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhtml_parser_attribute_rep.c
More file actions
91 lines (65 loc) · 1.45 KB
/
Copy pathhtml_parser_attribute_rep.c
File metadata and controls
91 lines (65 loc) · 1.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include "html_parser_assert.h"
#include "html_parser_mem.h"
#include "html_parser_atom.h"
#include "html_parser_fmt.h"
#include "html_parser_attribute_rep.h"
#define T Attr_rep_T
struct T {
const char *name;
char *value;
};
T Attr_rep_new(char *name, char *value)
{
T new_attr;
assert(name && *name);
assert(value && *value);
NEW(new_attr);
new_attr->name = Atom_str(name);
new_attr->value = Fmt_string("%s", value);
return new_attr;
}
T Attr_rep_clone(T attr)
{
T cl_attr;
assert(attr);
NEW(cl_attr);
cl_attr->name = attr->name; /* atom */
cl_attr->value = Fmt_string("%s", attr->value);
return cl_attr;
}
const char *Attr_rep_name(T attr)
{
assert(attr && attr->name);
return attr->name;
}
const char *Attr_rep_value(T attr)
{
assert(attr && attr->value);
return attr->value;
}
char *Attr_rep_change_value(T attr, char *new_value)
{
char *old_value;
assert(attr && attr->name && attr->value);
assert(new_value && *new_value);
old_value = attr->value;
attr->value = Fmt_string("%s", new_value);
return old_value;
}
int Attr_rep_isname(T attr, const char *query)
{
assert(attr && attr->name);
assert(query && *query);
return (attr->name == Atom_str(query));
}
const char *Attr_rep_print(T attr)
{
assert(attr && attr->name && attr->value);
return (Fmt_string("%s=\"%s\"", attr->name, attr->value));
}
void Attr_rep_free(T *attr)
{
assert(*attr && (*attr)->name && (*attr)->value);
FREE((*attr)->value);
FREE(*attr);
}