Changeset 490


Ignore:
Timestamp:
Jun 23, 2005, 8:27:02 PM (16 years ago)
Author:
Jean-Yves Lamoureux
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.