]>
Commit | Line | Data |
---|---|---|
a8718b56 JB |
1 | --- links-2.7/html.c.orig 2013-06-23 18:17:51.248954518 +0200 |
2 | +++ links-2.7/html.c 2013-06-23 18:30:42.988922132 +0200 | |
3 | @@ -1062,7 +1062,54 @@ | |
4 | add_to_strn(&al, cast_uchar "]"); | |
5 | } else if (usemap) al = stracpy(cast_uchar "[USEMAP]"); | |
6 | else if (ismap) al = stracpy(cast_uchar "[ISMAP]"); | |
7 | - else al = stracpy(cast_uchar "[IMG]"); | |
6a63603f | 8 | + else{ |
9 | + unsigned char *str = get_attr_val(a, "src"); | |
10 | + unsigned char *s; | |
11 | + int r, i; | |
12 | + /* How images will be displayed: | |
13 | + * fake_alt = 0 -- do not truncate long names, | |
14 | + * fake_alt = 30 -- truncate long names to 30% of term width, | |
15 | + * fake_alt = 100 -- truncate long names to 100% of term width. | |
16 | + */ | |
17 | + int fake_alt = 20; | |
18 | + int max_len; | |
19 | + int name_len; | |
20 | + /* substitute string for hidden characters */ | |
21 | + unsigned char *fake_str = stracpy("*"); | |
22 | + if(str && fake_alt){ | |
23 | + /* FIXME: replace following '80' with screen width */ | |
24 | + max_len = (int)80*((float)fake_alt/100); | |
25 | + r = strcspn(str, "?"); | |
26 | + if (!(s = mem_alloc((r + 1) * sizeof(char)))) return; | |
27 | + strncpy(s, str, r); | |
28 | + s[r] = '\0'; | |
29 | + for(r = strlen(s) - 1; r >= 0; --r) | |
30 | + if(dir_sep(s[r])) break; | |
31 | + r++; | |
32 | + if(strlen(s + r) > max_len){ | |
33 | + for(i = strlen(s) -1; i>=0; --i) | |
34 | + if(s[i] == '.') break; | |
35 | + if(max_len < strlen(s + i)) al = stracpy("[IMG]"); | |
36 | + else{ | |
37 | + if(!(al = mem_alloc((max_len + strlen(fake_str) + 3) * sizeof(char)))) return; | |
38 | + name_len = max_len - strlen(s + i); | |
39 | + strcpy(al, "[\0"); | |
40 | + strncat(al, s + r, name_len/2); | |
41 | + strcat(al, fake_str); | |
42 | + strcat(al, s + r + (strlen(s + r) - max_len + name_len/2)); | |
43 | + strcat(al, "]"); | |
44 | + } | |
45 | + } | |
46 | + else{ | |
47 | + if(!(al = mem_alloc((strlen(s + r) + 3) * sizeof(char)))) return; | |
48 | + sprintf(al, "[%s]", s + r); | |
49 | + } | |
50 | + mem_free(s); | |
51 | + mem_free(str); | |
52 | + mem_free(fake_str); | |
53 | + } | |
54 | + else al = stracpy("[IMG]"); | |
55 | + } | |
56 | } | |
57 | if (al) { | |
58 | if (ismap) { |