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 ");
printf("? ");
fflush(stdout);
}
- if(scanf("%c", &c) < 0) break;
+ if((c = getchar()) == EOF) break;
switch(tolower(c)) {
case 'q':
goto exitnow;
break;
case 'd':
rendered = false;
- start++;
+ start += termh;
break;
case '\n':
case '\r':
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;
+}
#include <stddef.h>
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
extern "C" {
#endif
-#define LIBW3_VERSION "2.1B" \
+#define LIBW3_VERSION "2.2" \
SUFFIX
#ifdef __cplusplus