forked from KolibriOS/kolibrios
672bbcf6a0
git-svn-id: svn://kolibrios.org@7771 a494cfbc-eb01-0410-851d-a64ba20cac60
127 lines
2.3 KiB
C
127 lines
2.3 KiB
C
|
|
struct _tag
|
|
{
|
|
char name[32];
|
|
char prior[32];
|
|
char params[5000];
|
|
bool opened;
|
|
collection attributes;
|
|
collection values;
|
|
bool is();
|
|
bool reset();
|
|
bool parse_params();
|
|
bool get_next_param();
|
|
dword get_value_of();
|
|
} tag;
|
|
|
|
bool _tag::is(dword _text)
|
|
{
|
|
if ( !strcmp(#tag.name, _text) ) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
bool _tag::reset()
|
|
{
|
|
if (!name) return false;
|
|
strcpy(#prior, #name);
|
|
name = NULL;
|
|
opened = true;
|
|
attributes.drop();
|
|
values.drop();
|
|
return true;
|
|
}
|
|
|
|
bool _tag::parse_params()
|
|
{
|
|
bool result = false;
|
|
if (!name) return false;
|
|
if (debug_mode) {
|
|
debugln(" ");
|
|
debugln(" ");
|
|
debug("tag: "); debugln(#name);
|
|
debug("params: "); debugln(#params);
|
|
debugln(" ");
|
|
}
|
|
while (get_next_param()) {
|
|
result = true;
|
|
if (debug_mode) {
|
|
debug("attribute: "); debugln(attributes.get(attributes.count-1));
|
|
debug("value: "); debugln(values.get(values.count-1));
|
|
debugln(" ");
|
|
}
|
|
};
|
|
return result;
|
|
}
|
|
|
|
bool _tag::get_next_param()
|
|
{
|
|
byte quotes = NULL;
|
|
int i;
|
|
unsigned char val[4000];
|
|
unsigned char attr[4000];
|
|
|
|
if (!params) return false;
|
|
|
|
i = strlen(#params) - 1;
|
|
if (params[i] == '/') i--;
|
|
while (i>0) && (__isWhite(params[i])) i--;
|
|
|
|
if (params[i] == '"') || (params[i] == '\'')
|
|
{
|
|
//remove quotes
|
|
quotes = params[i];
|
|
params[i] = EOS;
|
|
i--;
|
|
|
|
//find VAL start and copy
|
|
i = strrchr(#params, quotes);
|
|
strlcpy(#val, #params + i, sizeof(val)-1);
|
|
params[i] = EOS;
|
|
i--;
|
|
|
|
//find ATTR end
|
|
while (i > 0) && (params[i] != '=') i--;
|
|
params[i+1] = EOS;
|
|
}
|
|
else
|
|
{
|
|
//find VAL start and copy
|
|
while (i > 0) && (params[i] != '=') i--;
|
|
i++;
|
|
strlcpy(#val, #params + i, sizeof(val)-1);
|
|
|
|
//already have ATTR end
|
|
}
|
|
|
|
//find ATTR start and copy
|
|
while (i>0) && (!__isWhite(params[i])) i--;
|
|
strlcpy(#attr, #params + i + 1, sizeof(attr)-1);
|
|
strlwr(#attr);
|
|
params[i] = '\0';
|
|
|
|
//fix case: src=./images/KolibriOS_logo2.jpg?sid=e8ece8b38b
|
|
i = strchr(#attr,'=');
|
|
if (!quotes) && (i) {
|
|
strlcpy(#val, i+1, sizeof(val)-1);
|
|
ESBYTE[i+1] = '\0';
|
|
}
|
|
|
|
attributes.add(#attr);
|
|
values.add(#val);
|
|
|
|
return true;
|
|
}
|
|
|
|
dword _tag::get_value_of(dword _attr_name)
|
|
{
|
|
int pos = attributes.get_pos_by_name(_attr_name);
|
|
if (pos == -1) {
|
|
return 0;
|
|
} else {
|
|
return values.get(pos);
|
|
}
|
|
}
|