Changeset 490


Ignore:
Timestamp:
06/23/05 20:27:02 (8 years ago)
Author:
jylam
Message:
  • made caca_get_html3() use tables again, as div is not html3 (bgcolor in html3 neither, but works on text mode tables-aware browsers
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/src/graphics.c

    r489 r490  
    18641864 *  the current image. It is way bigger than caca_get_html(), but 
    18651865 *  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. 
    18671868 */ 
    18681869char* caca_get_html3(void) 
    18691870{ 
    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, "&nbsp;"); 
    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, "&nbsp;"); 
     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 
    19161942 
    19171943static int const irc_palette[] = 
     
    19381964  /* 15 bytes assumed for max length per pixel */ 
    19391965  buffer = malloc(((_caca_width*_caca_height*15)+1)*sizeof(char)); 
     1966 
    19401967  sprintf(buffer, "%%O"); 
    19411968 
     
    19461973          if(cache_char[x+y*caca_get_width()] == ' ') 
    19471974            { 
    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                     '#'); 
    19531980            } 
    19541981          else if(cache_char[x+y*caca_get_width()] == '%') 
    19551982            { 
    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]); 
    19601987            } 
    19611988          else if(cache_char[x+y*caca_get_width()]>='0' && cache_char[x+y*caca_get_width()]<='9') 
     
    19671994                      cache_char[x+y*caca_get_width()]); 
    19681995            } 
    1969       else 
    1970         { 
    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()]); 
    19762003            } 
    1977  
     2004           
    19782005        } 
    19792006      sprintf(buffer, "%s\n", buffer); 
    1980     } 
    1981   
     2007  } 
     2008   
    19822009  /* Crop to really used size */ 
    19832010  buffer = realloc(buffer, (strlen(buffer)+1) * sizeof(char)); 
    1984  
     2011   
    19852012  return buffer; 
    19862013} 
Note: See TracChangeset for help on using the changeset viewer.