Changeset 489


Ignore:
Timestamp:
Jun 23, 2005, 6:58:58 PM (16 years ago)
Author:
Sam Hocevar
Message:
  • src/graphics.c: cleaned caca_get_html()
File:
1 edited

Legend:

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

    r488 r489  
    18021802char* caca_get_html(void)
    18031803{
    1804   char *buffer;
    1805   unsigned int x,y;
    1806   int f,b;
    1807 
    1808   /* 13000 -> css palette
    1809      40 -> max size used for a pixel (plus 10, never know)*/
    1810 
    1811   buffer = malloc((13000 + ((_caca_width*_caca_height)*40))*sizeof(char));
    1812  
    1813   /* HTML header */
    1814   sprintf(buffer, "<html>\n<head>\n<title>Generated by libcaca "VERSION"</title>\n");
    1815   /* CSS */
    1816   sprintf(buffer, "%s<style>\n", buffer);
    1817   sprintf(buffer, "%s.caca { font-family: monospace, fixed; font-weight: bold; }\n", buffer);
    1818 
    1819   for(f=0;f<0x0f+1;f++)
    1820     {
    1821       for(b=0;b<0x0f+1;b++)
    1822         {
    1823           sprintf(buffer,
    1824                   "%s.b%x%x { color:#%03x; background-color:#%03x;}\n",buffer,
    1825                   b, f, html_palette[f], html_palette[b]);
    1826 
    1827         }
    1828     }
    1829   sprintf(buffer, "%s</style>\n</head>\n<body>\n",buffer);
    1830 
    1831   /* Table */
    1832   sprintf(buffer, "%s<table class='caca' cols='%d' cellpadding='0' cellspacing='0'>\n", buffer,caca_get_height());
    1833 
    1834   for(y=0;y<_caca_height;y++)
    1835     {
    1836       sprintf(buffer,
    1837               "%s<tr>",buffer);
    1838 
    1839       for(x=0;x<_caca_width;x++)
    1840         {
    1841           int len;
    1842           int i;
    1843           uint8_t *attr = cache_attr + x + y * _caca_width;
    1844 
    1845           /* Use colspan option to factorize cells with same attributes
    1846              (see below) */
    1847           len=1;
    1848           while(x + len < _caca_width
    1849                 && (attr[len]>>4) == (attr[0]>>4) &&
    1850                 (attr[len]&0x0f) == (attr[0]&0x0f))
    1851             len++;
    1852          
    1853           if(len==1)
     1804    char *buffer, *cur;
     1805    unsigned int x, y, len;
     1806
     1807    /* 13000 -> css palette
     1808     * 40 -> max size used for a pixel (plus 10, never know)*/
     1809    /* FIXME: Check this value */
     1810    buffer = malloc((13000 + ((_caca_width*_caca_height) * 40)) * sizeof(char));
     1811    cur = buffer;
     1812
     1813    /* HTML header */
     1814    cur += sprintf(cur, "<html>\n<head>\n<title>Generated by libcaca %s</title>\n", VERSION);
     1815
     1816    /* CSS */
     1817    cur += sprintf(cur, "<style>\n");
     1818    cur += sprintf(cur, ".caca { font-family: monospace, fixed; font-weight: bold; }");
     1819    for(x = 0; x < 0x100; x++)
     1820    {
     1821        cur += sprintf(cur, ".b%02x { color:#%03x; background-color:#%03x; }\n",
     1822                       x, html_palette[x & 0xf ], html_palette[x >> 4]);
     1823    }
     1824    cur += sprintf(cur, "</style>\n</head>\n<body>\n");
     1825
     1826    cur += sprintf(cur, "<div cellpadding='0' cellspacing='0' style='%s'>\n",
     1827                        "font-family: monospace, fixed; font-weight: bold;");
     1828
     1829    for(y = 0; y < _caca_height; y++)
     1830    {
     1831        for(x = 0; x < _caca_width; x += len)
     1832        {
     1833            uint8_t *cur_attr = cache_attr + y * _caca_width;
     1834            uint8_t *cur_char = cache_char + y * _caca_width;
     1835
     1836            cur += sprintf(cur, "<span class='b%02x'>", cur_attr[x]);
     1837
     1838            for(len = 0;
     1839                x + len < _caca_width && cur_attr[x + len] == cur_attr[x];
     1840                len++)
    18541841            {
    1855               sprintf(buffer,
    1856                       "%s<td class=b%x%x>%c</td>",buffer,
    1857                       cache_attr[x+y*caca_get_width()]>>4,
    1858                       cache_attr[x+y*caca_get_width()]&0x0f,
    1859                       cache_char[x+y*caca_get_width()]);
     1842                if(cur_char[x + len] == ' ')
     1843                    cur += sprintf(cur, "&nbsp;");
     1844                else
     1845                    cur += sprintf(cur, "%c", cur_char[x + len]);
    18601846            }
    1861           else
    1862             {
    1863               sprintf(buffer,
    1864                       "%s<td class=b%x%x colspan=%d>",buffer,
    1865                       cache_attr[x+y*caca_get_width()]>> 4,
    1866                       cache_attr[x+y*caca_get_width()]&0x0f,
    1867                       len+1);
    1868              
    1869               for(i=0;i<len;i++)
    1870                 {
    1871                   if(cache_char[x+y*caca_get_width()]!=' ')
    1872                     sprintf(buffer, "%s%c", buffer,cache_char[x+y*caca_get_width()]);
    1873                   else
    1874                     sprintf(buffer, "%s&nbsp;",buffer);
    1875                   x++;
    1876                 }
    1877               sprintf(buffer, "%s</td>",buffer);
    1878              
    1879             }
    1880 
    1881         }
    1882       sprintf(buffer, "%s</tr>\n",buffer);
    1883     }
    1884 
    1885   /* Footer */
    1886   sprintf(buffer, "%s</table>\n</body>\n</html>\n",buffer);
    1887 
    1888   /* Crop to really used size */
    1889   buffer = realloc(buffer, (strlen(buffer)+1) * sizeof(char));
    1890 
    1891   return buffer;
     1847            cur += sprintf(cur, "</span>");
     1848        }
     1849        /* New line */
     1850        cur += sprintf(cur, "<br />\n");
     1851    }
     1852
     1853    cur += sprintf(cur, "</div></body></html>\n");
     1854
     1855    /* Crop to really used size */
     1856    buffer = realloc(buffer, (strlen(buffer) + 1) * sizeof(char));
     1857
     1858    return buffer;
    18921859}
    18931860
     
    19011868char* caca_get_html3(void)
    19021869{
    1903   char *buffer, *cur;
    1904   unsigned int x, y, len;
    1905 
    1906   /* 13000 -> css palette
    1907    * 40 -> max size used for a pixel (plus 10, never know)*/
    1908   /* FIXME: Check this value */
    1909   buffer = malloc((13000 + ((_caca_width*_caca_height) * 40)) * sizeof(char));
    1910   cur = buffer;
    1911 
    1912   /* Table */
    1913   cur += sprintf(cur, "<div cellpadding='0' cellspacing='0' style='%s'>\n",
    1914                       "font-family: monospace, fixed; font-weight: bold;");
    1915 
    1916   for(y = 0; y < _caca_height; y++)
    1917   {
    1918       for(x = 0; x < _caca_width; x += len)
    1919       {
    1920           uint8_t *cur_attr = cache_attr + y * _caca_width;
    1921           uint8_t *cur_char = cache_char + y * _caca_width;
    1922 
    1923           cur += sprintf(cur,
    1924                   "<span style=\"color: #%03X; background-color: #%03X\">",
    1925                   html_palette[cur_attr[x] & 0x0f],
    1926                   html_palette[cur_attr[x] >> 4]);
    1927 
    1928           for(len = 0;
    1929               x + len < _caca_width && cur_attr[x + len] == cur_attr[x];
    1930               len++)
    1931           {
    1932               if(cur_char[x + len] == ' ')
    1933                   cur += sprintf(cur, "&nbsp;");
    1934               else
    1935                   cur += sprintf(cur, "%c", cur_char[x + len]);
    1936           }
    1937           cur += sprintf(cur, "</span>");
    1938       }
    1939       cur += sprintf(cur, "<br />\n");
    1940   }
    1941 
    1942   /* Footer */
    1943   cur += sprintf(cur, "</div>\n");
    1944 
    1945   /* Crop to really used size */
    1946   buffer = realloc(buffer, (strlen(buffer) + 1) * sizeof(char));
    1947 
    1948   return buffer;
     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;
    19491915}
    19501916
Note: See TracChangeset for help on using the changeset viewer.