Changeset 490
- Timestamp:
- 06/23/05 20:27:02 (8 years ago)
- File:
-
- 1 edited
-
libcaca/trunk/src/graphics.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcaca/trunk/src/graphics.c
r489 r490 1864 1864 * the current image. It is way bigger than caca_get_html(), but 1865 1865 * permits viewing in old browsers (or limited ones such as links) 1866 * 1866 * Won't work under gecko (mozilla rendering engine) unless you set 1867 * a correct header. 1867 1868 */ 1868 1869 char* caca_get_html3(void) 1869 1870 { 1870 char *buffer, *cur; 1871 unsigned int x, y, len; 1872 1873 /* 13000 -> css palette 1874 * 40 -> max size used for a pixel (plus 10, never know)*/ 1875 /* FIXME: Check this value */ 1876 buffer = malloc((13000 + ((_caca_width*_caca_height) * 40)) * sizeof(char)); 1877 cur = buffer; 1878 1879 cur += sprintf(cur, "<div cellpadding='0' cellspacing='0' style='%s'>\n", 1880 "font-family: monospace, fixed; font-weight: bold;"); 1881 1882 for(y = 0; y < _caca_height; y++) 1883 { 1884 for(x = 0; x < _caca_width; x += len) 1885 { 1886 uint8_t *cur_attr = cache_attr + y * _caca_width; 1887 uint8_t *cur_char = cache_char + y * _caca_width; 1888 1889 cur += sprintf(cur, 1890 "<span style=\"color: #%03X; background-color: #%03X\">", 1891 html_palette[cur_attr[x] & 0x0f], 1892 html_palette[cur_attr[x] >> 4]); 1893 1894 for(len = 0; 1895 x + len < _caca_width && cur_attr[x + len] == cur_attr[x]; 1896 len++) 1897 { 1898 if(cur_char[x + len] == ' ') 1899 cur += sprintf(cur, " "); 1900 else 1901 cur += sprintf(cur, "%c", cur_char[x + len]); 1902 } 1903 cur += sprintf(cur, "</span>"); 1904 } 1905 /* New line */ 1906 cur += sprintf(cur, "<br />\n"); 1907 } 1908 1909 cur += sprintf(cur, "</div>\n"); 1910 1911 /* Crop to really used size */ 1912 buffer = realloc(buffer, (strlen(buffer) + 1) * sizeof(char)); 1913 1914 return buffer; 1915 } 1871 char *buffer, *cur; 1872 unsigned int x,y; 1873 1874 /* 13000 -> css palette 1875 40 -> max size used for a pixel (plus 10, never know)*/ 1876 1877 buffer = malloc((13000 + ((_caca_width*_caca_height)*40))*sizeof(char)); 1878 cur = buffer; 1879 1880 /* Table */ 1881 cur += sprintf(cur, "<table cols='%d' cellpadding='0' cellspacing='0'>\n", caca_get_height()); 1882 1883 for(y=0;y<_caca_height;y++) 1884 { 1885 cur += sprintf(cur, "<tr>"); 1886 1887 for(x=0;x<_caca_width;x++) 1888 { 1889 int len; 1890 int i; 1891 uint8_t *attr = cache_attr + x + y * _caca_width; 1892 1893 /* Use colspan option to factorize cells with same attributes 1894 (see below) */ 1895 len=1; 1896 while(x + len < _caca_width 1897 && (attr[len]>>4) == (attr[0]>>4) && 1898 (attr[len]&0x0f) == (attr[0]&0x0f)) 1899 len++; 1900 1901 if(len==1) 1902 { 1903 cur += sprintf(cur, 1904 "<td bgcolor=#%03X ><font color=#%03X>%c</font></td>", 1905 html_palette[cache_attr[x+y*caca_get_width()]>>4], 1906 html_palette[cache_attr[x+y*caca_get_width()]&0x0f], 1907 cache_char[x+y*caca_get_width()]); 1908 } 1909 else 1910 { 1911 cur += sprintf(cur, 1912 "<td bgcolor=#%03X colspan=%d><font color=#%03X>", 1913 html_palette[cache_attr[x+y*caca_get_width()]>> 4], 1914 len+1, 1915 html_palette[cache_attr[x+y*caca_get_width()]&0x0f]); 1916 1917 for(i=0;i<len;i++) 1918 { 1919 if(cache_char[x+y*caca_get_width()]!=' ') 1920 cur += sprintf(cur, "%c", cache_char[x+y*caca_get_width()]); 1921 else 1922 cur += sprintf(cur, " "); 1923 x++; 1924 } 1925 cur += sprintf(cur, "</font></td>"); 1926 1927 } 1928 1929 } 1930 cur += sprintf(cur, "</tr>\n"); 1931 } 1932 1933 /* Footer */ 1934 cur += sprintf(cur, "</table>\n"); 1935 1936 /* Crop to really used size */ 1937 buffer = realloc(buffer, (strlen(buffer)+1) * sizeof(char)); 1938 1939 return buffer; 1940 } 1941 1916 1942 1917 1943 static int const irc_palette[] = … … 1938 1964 /* 15 bytes assumed for max length per pixel */ 1939 1965 buffer = malloc(((_caca_width*_caca_height*15)+1)*sizeof(char)); 1966 1940 1967 sprintf(buffer, "%%O"); 1941 1968 … … 1946 1973 if(cache_char[x+y*caca_get_width()] == ' ') 1947 1974 { 1948 sprintf(buffer,1949 "%s%%C%d,%d%c", buffer,1950 irc_palette[cache_attr[x+y*caca_get_width()]>>4],1951 irc_palette[cache_attr[x+y*caca_get_width()]>>4],1952 '#');1975 sprintf(buffer, 1976 "%s%%C%d,%d%c", buffer, 1977 irc_palette[cache_attr[x+y*caca_get_width()]>>4], 1978 irc_palette[cache_attr[x+y*caca_get_width()]>>4], 1979 '#'); 1953 1980 } 1954 1981 else if(cache_char[x+y*caca_get_width()] == '%') 1955 1982 { 1956 sprintf(buffer,1957 "%s%%C%d,%d%%%%", buffer,1958 irc_palette[cache_attr[x+y*caca_get_width()]&0x0f],1959 irc_palette[cache_attr[x+y*caca_get_width()]>> 4]);1983 sprintf(buffer, 1984 "%s%%C%d,%d%%%%", buffer, 1985 irc_palette[cache_attr[x+y*caca_get_width()]&0x0f], 1986 irc_palette[cache_attr[x+y*caca_get_width()]>> 4]); 1960 1987 } 1961 1988 else if(cache_char[x+y*caca_get_width()]>='0' && cache_char[x+y*caca_get_width()]<='9') … … 1967 1994 cache_char[x+y*caca_get_width()]); 1968 1995 } 1969 else1970 {1971 sprintf(buffer,1972 "%s%%C%d,%d%c", buffer,1973 irc_palette[cache_attr[x+y*caca_get_width()]&0x0f],1974 irc_palette[cache_attr[x+y*caca_get_width()]>> 4],1975 cache_char[x+y*caca_get_width()]);1996 else 1997 { 1998 sprintf(buffer, 1999 "%s%%C%d,%d%c", buffer, 2000 irc_palette[cache_attr[x+y*caca_get_width()]&0x0f], 2001 irc_palette[cache_attr[x+y*caca_get_width()]>> 4], 2002 cache_char[x+y*caca_get_width()]); 1976 2003 } 1977 2004 1978 2005 } 1979 2006 sprintf(buffer, "%s\n", buffer); 1980 }1981 2007 } 2008 1982 2009 /* Crop to really used size */ 1983 2010 buffer = realloc(buffer, (strlen(buffer)+1) * sizeof(char)); 1984 2011 1985 2012 return buffer; 1986 2013 }
Note: See TracChangeset
for help on using the changeset viewer.
