From: nishi Date: Tue, 30 Jan 2024 01:00:38 +0000 (+0000) Subject: W3_Tag_Attr X-Git-Url: http://10.10.0.4:5575/?a=commitdiff_plain;h=0594e2886889b571dac7d73386025d6e4d4b9c19;p=libw3.git W3_Tag_Attr git-svn-id: file:///raid/svn-main/nishi-libw3/trunk@135 d27a3e52-49c5-7645-884c-6793ebffc270 --- diff --git a/Example/w3b/w3b.c b/Example/w3b/w3b.c index e8e320b..92f9092 100644 --- a/Example/w3b/w3b.c +++ b/Example/w3b/w3b.c @@ -176,7 +176,15 @@ void html_handler(char* tagname, char* attr) { if(nl >= start) printf("\n"); nl++; } else if(strcasecmp(tagname, "img") == 0) { - if(nl >= start) printf("[IMG]"); + if(nl >= start){ + char* alt = W3_Tag_Attr(attr, "alt"); + if(alt != NULL){ + printf("[%s]", alt); + free(alt); + }else{ + printf("[IMG]"); + } + } } else if(strcasecmp(tagname, "hr") == 0) { int i; if(nl >= start) printf("\n "); @@ -325,7 +333,7 @@ int main(int argc, char** argv) { printf("? "); fflush(stdout); } - if(scanf("%c", &c) < 0) break; + if((c = getchar()) == EOF) break; switch(tolower(c)) { case 'q': goto exitnow; @@ -339,7 +347,7 @@ int main(int argc, char** argv) { break; case 'd': rendered = false; - start++; + start += termh; break; case '\n': case '\r': diff --git a/Library/Tag.c b/Library/Tag.c index 96658e3..3022600 100644 --- a/Library/Tag.c +++ b/Library/Tag.c @@ -70,3 +70,54 @@ void W3_Tag_Parse(char* data, size_t size, void (*tagfunc)(char* tagname, char* free(tagn); free(cbuf); } + +char* W3_Tag_Attr(char* data, const char* name){ + char* ret = NULL; + int i; + int phase = 0; + char* cbuf = malloc(2); + cbuf[1] = 0; + char* key = malloc(1); + key[0] = 0; + bool dq = false; + for(i = 0;; i++){ + cbuf[0] = data[i]; + if(phase == 0 && data[i] != 0 && data[i] != '='){ + char* tmp = key; + key = __W3_Concat(tmp, cbuf); + free(tmp); + }else if(phase == 0){ + phase = 2; + if(strcasecmp(key, name) == 0) phase = 1; + free(key); + key = malloc(1); + key[0] = 0; + if(data[i] == 0) break; + }else if(phase == 1 && (dq ? dq : (data[i] != 0 && data[i] != ' '))){ + if(data[i] == '"'){ + dq = !dq; + }else{ + if(ret == NULL){ + ret = malloc(1); + ret[0] = 0; + } + char* tmp = ret; + ret = __W3_Concat(tmp, cbuf); + free(tmp); + } + }else if(phase == 1){ + phase = 0; + break; + }else if(phase == 2 && (dq ? dq : (data[i] != 0 && data[i] != ' '))){ + if(data[i] == '"'){ + dq = !dq; + } + }else if(phase == 2){ + phase = 0; + if(data[i] == 0) break; + } + } + free(key); + free(cbuf); + return ret; +} diff --git a/Library/W3Tag.h b/Library/W3Tag.h index 06035ba..4c46fb0 100644 --- a/Library/W3Tag.h +++ b/Library/W3Tag.h @@ -5,5 +5,6 @@ #include void W3_Tag_Parse(char* data, size_t size, void (*tagfunc)(char* tagname, char* attr), void (*textfunc)(char* data)); +char* W3_Tag_Attr(char* data, const char* name); #endif diff --git a/W3Version.h.p b/W3Version.h.p index 7ebe791..67aab33 100644 --- a/W3Version.h.p +++ b/W3Version.h.p @@ -6,7 +6,7 @@ extern "C" { #endif -#define LIBW3_VERSION "2.1B" \ +#define LIBW3_VERSION "2.2" \ SUFFIX #ifdef __cplusplus