Changeset 4228
- Timestamp:
- 01/06/10 01:05:09 (3 years ago)
- File:
-
- 1 edited
-
libcaca/trunk/caca/codec/export.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcaca/trunk/caca/codec/export.c
r4227 r4228 992 992 int started = 0; 993 993 994 /* 93 bytes assumed for max length per pixel ('\m[xxxxxx]y\m[]') 995 * + 97 + height 994 /* Each char is at most 995 * 2x.defcolor (2x29) 996 * + 2x\mM (2x10) 997 * + \fB + \fI + \fR (9) 998 * + 4 bytes = 91 999 * Each line has a \n (1) 1000 * Header has .color 1\n.nf\n (12) 996 1001 */ 997 *bytes = 97 + cv->height + (cv->width * cv->height * 87);1002 *bytes = 12 + cv->height + (cv->width * cv->height * 91); 998 1003 cur = data = malloc(*bytes); 999 1004 … … 1003 1008 { 1004 1009 uint32_t *lineattr = cv->attrs + y * cv->width; 1005 uint32_t *linechar = cv->chars + y * cv->width;1006 1010 1007 1011 for(x = 0; x < cv->width; x++) … … 1010 1014 uint32_t fg = _caca_attr_to_rgb24bg(lineattr[x]); 1011 1015 uint32_t bg = _caca_attr_to_rgb24fg(lineattr[x]); 1012 if(started && (fg != prevfg || bg != prevbg))1013 cur += sprintf(cur, "\n");1014 1016 if(fg != prevfg || !started) 1015 1017 cur += sprintf(cur, ".defcolor %.06x rgb #%.06x\n", fg, fg); 1016 1018 if(bg != prevbg || !started) 1017 1019 cur += sprintf(cur, ".defcolor %.06x rgb #%.06x\n", bg, bg); 1020 1021 prevfg = fg; 1022 prevbg = bg; 1023 started = 1; 1024 } 1025 } 1026 1027 cur += sprintf(cur, ".nf\n"); 1028 1029 prevfg = 0; 1030 prevbg = 0; 1031 started = 0; 1032 1033 for(y = 0; y < cv->height; y++) 1034 { 1035 uint32_t *lineattr = cv->attrs + y * cv->width; 1036 uint32_t *linechar = cv->chars + y * cv->width; 1037 1038 for(x = 0; x < cv->width; x++) 1039 { 1040 1041 uint32_t fg = _caca_attr_to_rgb24bg(lineattr[x]); 1042 uint32_t bg = _caca_attr_to_rgb24fg(lineattr[x]); 1043 uint32_t ch = linechar[x]; 1018 1044 if(fg != prevfg || !started) 1019 1045 cur += sprintf(cur, "\\m[%.06x]", fg); … … 1025 1051 cur += sprintf(cur, "\\fI"); 1026 1052 1027 uint32_t ch = linechar[x]; 1028 cur += caca_utf32_to_utf8(cur, ch); 1053 if(ch == '\\') 1054 cur += sprintf(cur, "\\\\"); 1055 else 1056 cur += caca_utf32_to_utf8(cur, ch); 1029 1057 1030 1058 if(lineattr[x] & (CACA_BOLD|CACA_ITALICS)) … … 1033 1061 prevfg = fg; 1034 1062 prevbg = bg; 1035 1036 1063 started = 1; 1037 1064 } … … 1039 1066 cur += sprintf(cur, "\n"); 1040 1067 } 1041 1042 1068 /* Crop to really used size */ 1043 1069 debug("troff export: alloc %lu bytes, realloc %lu",
Note: See TracChangeset
for help on using the changeset viewer.
