- Timestamp:
- Mar 16, 2006, 7:58:39 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libcaca/trunk/cucul/export_svg.c
-
Property
svn:keywords
set to
Id
r621 r637 11 11 12 12 /** \file export.c 13 * \version \$Id : export_irc.c 384 2006-03-13 18:07:35Z sam$13 * \version \$Id$ 14 14 * \author Sam Hocevar <sam@zoy.org> 15 15 * \author Jean-Yves Lamoureux <jylam@lnxscene.org> … … 30 30 #include "cucul_internals.h" 31 31 32 static char const *svg_header=32 static char const svg_header[] = 33 33 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" 34 34 "<svg width=\"%d\" height=\"%d\" viewBox=\"0 0 %d %d\"" 35 " xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" " 36 "xml:space=\"preserve\" version=\"1.1\" baseProfile=\"full\">\n" 35 " xmlns=\"http://www.w3.org/2000/svg\"" 36 " xmlns:xlink=\"http://www.w3.org/1999/xlink\"" 37 " xml:space=\"preserve\" version=\"1.1\" baseProfile=\"full\">\n" 37 38 " <defs>\n" 38 39 " <style type=\"text/css\">\n" 39 40 " <![CDATA[\n"; 40 41 41 42 42 /** \brief Generate SVG representation of current image. … … 47 47 void _cucul_get_svg(cucul_t *qq, struct cucul_buffer *ex) 48 48 { 49 char *cur;50 int x, y;51 52 53 49 static int const palette[] = 54 50 { … … 59 55 }; 60 56 57 char *cur; 58 unsigned int x, y; 59 61 60 /* 200 is arbitrary but should be ok */ 62 61 ex->size = strlen(svg_header) + (qq->width * qq->height * 200); … … 66 65 67 66 /* Header */ 68 cur += sprintf(cur, svg_header, qq->width*6, qq->height*10, qq->width*6, qq->height*10); 67 cur += sprintf(cur, svg_header, qq->width * 6, qq->height * 10, 68 qq->width * 6, qq->height * 10); 69 69 70 70 /* Precalc of colors in CSS style */ 71 71 for(x = 0; x < 0x100; x++) 72 72 { 73 cur += sprintf(cur, ".b%02x {fill:#%06X}\n", 74 x, 75 palette[x >> 4 ]); 76 77 cur += sprintf(cur, ".f%02x {fill:#%06X}\n", 78 x, 79 palette[x & 0xf ]); 73 cur += sprintf(cur, ".b%02x {fill:#%06X}\n", x, palette[x >> 4]); 74 cur += sprintf(cur, ".f%02x {fill:#%06X}\n", x, palette[x & 0xf]); 80 75 } 81 76 82 77 cur += sprintf(cur, "]]>\n"); 83 cur += sprintf(cur, "</style>\n"); 84 cur += sprintf(cur, "</defs>\n"); 85 cur += sprintf(cur, "<g id=\"mainlayer\" font-size=\"12\">\n"); 86 78 cur += sprintf(cur, " </style>\n"); 79 cur += sprintf(cur, " </defs>\n"); 80 cur += sprintf(cur, " <g id=\"mainlayer\" font-size=\"12\">\n"); 87 81 88 82 /* Background */ 89 for(y=0; y<(int)(qq->height);y++) { 90 uint8_t *lineattr = qq->attr + y * qq->width; 91 for(x = 0; x < (int)qq->width; x++) { 92 cur += sprintf(cur, "<rect class=\"b%02x\" x=\"%d\" y=\"%d\" width=\"6\" height=\"10\"/>\n", 93 lineattr[x], 94 x*6, 95 y*10); 96 } 83 for(y = 0; y < qq->height; y++) 84 { 85 uint8_t *lineattr = qq->attr + y * qq->width; 86 87 for(x = 0; x < qq->width; x++) 88 { 89 cur += sprintf(cur, "<rect class=\"b%02x\" x=\"%d\" y=\"%d\"" 90 " width=\"6\" height=\"10\"/>\n", 91 *lineattr++, x * 6, y * 10); 92 } 97 93 } 98 94 99 95 /* Text */ 100 for(y=0; y<(int)(qq->height);y++) { 101 uint8_t *lineattr = qq->attr + y * qq->width; 102 uint32_t *linechar = qq->chars + y * qq->width; 103 for(x = 0; x < (int)qq->width; x++) { 104 cur += sprintf(cur, "<text class=\"f%02x\" x=\"%d\" y=\"%d\">%c</text>\n", 105 lineattr[x], 106 x*6, 107 (y*10)+10, 108 linechar[x]); 109 } 96 for(y = 0; y < qq->height; y++) 97 { 98 uint8_t *lineattr = qq->attr + y * qq->width; 99 uint32_t *linechar = qq->chars + y * qq->width; 100 101 for(x = 0; x < qq->width; x++) 102 { 103 uint32_t c = *linechar++; 104 105 cur += sprintf(cur, "<text class=\"f%02x\" x=\"%d\" y=\"%d\">", 106 *lineattr++, x * 6, (y * 10) + 10); 107 if(c < 0x00000020) 108 cur += sprintf(cur, "?"); 109 else if(c < 0x00000080) 110 cur += sprintf(cur, "%c", c); 111 else 112 cur += sprintf(cur, "?"); /* FIXME: SVG supports UTF-8 */ 113 cur += sprintf(cur, "</text>\n"); 114 } 110 115 } 111 116 112 113 cur += sprintf(cur, "</g>\n"); 117 cur += sprintf(cur, " </g>\n"); 114 118 cur += sprintf(cur, "</svg>\n"); 115 119 -
Property
svn:keywords
set to
Note: See TracChangeset
for help on using the changeset viewer.