/* Copyright (C) 2013-2020, Dirk Krause SPDX-License-Identifier: BSD-3-Clause */ /* WARNING: This file was generated by the dkct program (see http://dktools.sourceforge.net/ for details). Changes you make here will be lost if dkct is run again! You should modify the original source and run dkct on it. Original source: f2lsvgst.ctr */ /** @file f2lsvgst.c The f2lsvgst module. */ #line 360 "f2lsvgst.ctr" #include "f2lsvgst.h" #include "dk3unused.h" #line 367 "f2lsvgst.ctr" /** Keywords used by the module. */ static char const * const f2lsvgst_c8_kw[] = { /* 0 */ "\n", /* 1 */ "svg:", /* 2 */ "<", /* 3 */ "pattern", /* 4 */ "/", /* 5 */ ">", /* 6 */ "<", /* 7 */ " id=\"", /* 8 */ "p", /* 9 */ "\" x=\"0\" y=\"0\" width=\"%g\" height=\"%g\"\npatternUnits=\"userSpaceOnUse\"\n>\n", /* 10 */ "rect", /* 11 */ " x=\"0\" y=\"0\" width=\"%g\" height=\"%g\"\n", /* 12 */ "style=\"fill: #%02X%02X%02X; stroke: none;\"\n", /* 13 */ "/>\n", /* 14 */ " style=\"stroke: none; fill: #%02X%02X%02X;\"\n", /* 15 */ "points=\"0,0 0.9,0 7.2,3.64 7.2,4.16 6.3,4.16 0,0.52\"", /* 16 */ "points=\"0,3.64 0.9,4.16 0,4.16\"", /* 17 */ "points=\"6.3,0 7.2,0.52 7.2,0\"", /* 18 */ "polyline", /* 19 */ "points=\"0,4.16 0.9,4.16 7.2,0.52 7.2,0 6.3,0 0,3.64\"", /* 20 */ "points=\"0,0.52 0.9,0 0,0\"", /* 21 */ "points=\"6.3,4.16 7.2,4.16 7.2,3.64\"", /* 22 */ "style=\"fill: none; stroke: #%02X%02X%02X; stroke-width: 0.9; stroke-linecap: round;\"", /* 23 */ "points=\"0,0 7.2,4.16\"", /* 24 */ "points=\"0,4.16 7.2,0\"", /* 25 */ "points=\"0,0 0.64,0 10.18,9.54 10.18,10.18 9.54,10.18 0,0.64\"", /* 26 */ "points=\"0,9.54 0.64,10.18 0,10.18\"", /* 27 */ "points=\"9.54,0 10.18,0.64 10.18,0\"", /* 28 */ "points=\"0,10.18 0.64,10.18 10.18,0.64 10.18,0 9.54,0 0,9.54\"", /* 29 */ "points=\"0,0.64 0.64,0 0,0\"", /* 30 */ "points=\"9.54,10.18 10.18,10.18 10.18,9.54\"", /* 31 */ "points=\"0,0 10.18,10.18\"", /* 32 */ "points=\"0,10.18 10.18,0\"", /* 33 */ "points=\"3.6,0 3.6,7.2\"", /* 34 */ "points=\"18,0 18,7.2\"", /* 35 */ "points=\"10.8,7.2 10.8,14.4\"", /* 36 */ "points=\"25.2,7.2 25.2,14.4\"", /* 37 */ "points=\"0,0 28.8,0\"", /* 38 */ "points=\"0,14.4 28.8,14.4\"", /* 39 */ "points=\"0,7.2 28.8,7.2\"", /* 40 */ "points=\"0,3.6 7.2,3.6\"", /* 41 */ "points=\"0,18 7.2,18\"", /* 42 */ "points=\"7.2,10.8 14.4,10.8\"", /* 43 */ "points=\"7.2,25.2 14.4,25.2\"", /* 44 */ "points=\"0,0 0,28.8\"", /* 45 */ "points=\"7.2,0 7.2,28.8\"", /* 46 */ "points=\"14.4,0 14.4,28.8\"", /* 47 */ "points=\"0,0 3.6,0\"", /* 48 */ "points=\"0,3.6 3.6,3.6\"", /* 49 */ "points=\"0,0 0,3.6\"", /* 50 */ "points=\"3.6,0 3.6,3.6\"", /* 51 */ "polygon", /* 52 */ "points=\"0,0 0,3.6 3.6,3.6 3.6,0\"", /* 53 */ "points=\"0.45,7.2 3.15,0\"", /* 54 */ "points=\"4.05,14.4 6.75,7.2\"", /* 55 */ "points=\"7.65,21.6 10.35,14.4\"", /* 56 */ "points=\"11.25,28.8 13.95,21.6\"", /* 57 */ "points=\"0,0 14.4,0\"", /* 58 */ "points=\"0,7.2 14.4,7.2\"", /* 59 */ "points=\"0,14.4 14.4,14.4\"", /* 60 */ "points=\"0,21.6 14.4,21.6\"", /* 61 */ "points=\"0,28.8 14.4,28.8\"", /* 62 */ "points=\"0,0 3.6,7.2\"", /* 63 */ "points=\"10.8,7.2 14.4,14.4\"", /* 64 */ "points=\"7.2,14.4 10.8,21.6\"", /* 65 */ "points=\"3.6,21.6 7.2,28.8\"", /* 66 */ "points=\"0,0 14.4,0\"", /* 67 */ "points=\"0,7.2 14.4,7.2\"", /* 68 */ "points=\"0,14.4 14.4,14.4\"", /* 69 */ "points=\"0,21.6 14.4,21.6\"", /* 70 */ "points=\"0,28.8 14.4,28.8\"", /* 71 */ "points=\"0,10.8 7.2,14.4\"", /* 72 */ "points=\"7.2,7.2 14.4,10.8\"", /* 73 */ "points=\"14.4,3.6 21.6,7.2\"", /* 74 */ "points=\"21.6,0 28.8,3.6\"", /* 75 */ "points=\"0,0 0,14.4\"", /* 76 */ "points=\"7.2,0 7.2,14.4\"", /* 77 */ "points=\"14.4,0 14.4,14.4\"", /* 78 */ "points=\"21.6,0 21.6,14.4\"", /* 79 */ "points=\"28.8,0 28.8,14.4\"", /* 80 */ "points=\"0,14.4 7.2,10.8\"", /* 81 */ "points=\"7.2,3.6 14.4,0\"", /* 82 */ "points=\"14.4,7.2 21.6,3.6\"", /* 83 */ "points=\"21.6,10.8 28.8,7.2\"", /* 84 */ "points=\"0,0 0,14.4\"", /* 85 */ "points=\"7.2,0 7.2,14.4\"", /* 86 */ "points=\"14.4,0 14.4,14.4\"", /* 87 */ "points=\"21.6,0 21.6,14.4\"", /* 88 */ "points=\"28.8,0 28.8,14.4\"", /* 89 */ "path", /* 90 */ "d=\"M0,0A9 9 0 0 0 14.54,0\"", /* 91 */ "d=\"M0,7.4A9 9 0 0 0 7.27,3.7\"", /* 92 */ "d=\"M7.27,3.7A9 9 0 0 0 14.54,7.4\"", /* 93 */ "d=\"M0,0A9 9 0 0 0 7.27,-3.7\"", /* 94 */ "d=\"M7.27,-3.7A9 9 0 0 0 14.54,0\"", /* 95 */ "d=\"M0,0A3.6 3.6 0 0 0 7.2,0\"", /* 96 */ "d=\"M0,7.2A3.6 3.6 0 0 0 3.6,3.6\"", /* 97 */ "d=\"M3.6,3.6A3.6 3.6 0 0 0 7.2,7.2\"", /* 98 */ "d=\"M0,0A3.6 3.6 0 0 0 3.6,-3.6\"", /* 99 */ "d=\"M3.6,-3.6A3.6 3.6 0 0 0 7.2,0\"", /* 100 */ "circle", /* 101 */ "style=\"fill: none; stroke: #%02X%02X%02X; stroke-width: 0.9;\"", /* 102 */ " cx=\"7.2\" cy=\"7.2\" r=\"7.2\"", /* 103 */ "points=\"3.6,0 0,6.24 3.6,12.47 10.8,12.47 14.4,6.24 10.8,0\"", /* 104 */ "points=\"14.4,6.24 21.6,6.24\"", /* 105 */ "points=\"21.6,6.24 25.2,0\"", /* 106 */ "points=\"21.6,6.24 25.2,12.47\"", /* 107 */ "points=\"0,4.22 4.22,0 10.18,0 14.4,4.22", /* 108 */ "14.4,10.18 10.18,14.4 4.22,14.4 0,10.18\"", /* 109 */ "points=\"0,1.8 3.6,5.4 7.2,1.8\"", /* 110 */ "points=\"1.8,0 5.4,3.6 1.8,7.2\"", /* 111 */ "s", /* 112 */ ".", /* 113 */ " {\n", /* 114 */ "}\n", /* 115 */ "font-family: \"", /* 116 */ "\",serif;\n", /* 117 */ "\",sans-serif;\n", /* 118 */ "\",monospace;\n", /* 119 */ "font-style: normal;\n", /* 120 */ "font-style: italic;\n", /* 121 */ "font-style: oblique;\n", /* 122 */ "font-weight: %d;\n", /* 123 */ "font-family: serif;\n", /* 124 */ "font-family: sans-serif;\n", /* 125 */ "font-family: monospace;\n", /* 126 */ "font-style: normal;\n", /* 127 */ "font-style: italic;\n", /* 128 */ "font-weight: normal;\n", /* 129 */ "font-weight: bold;\n", /* 130 */ "font-size: %gpt;\n", /* 131 */ "text-anchor: start;\n", /* 132 */ "text-anchor: middle;\n", /* 133 */ "text-anchor: end;\n", /* 134 */ "fill: url(#", /* 135 */ ");\nfillrule: evenodd;\n", /* 136 */ "fill: #%02X%02X%02X;\nfillrule: evenodd;\n", /* 137 */ "fill: none;\n", /* 138 */ "stroke: #%02X%02X%02X;\n", /* 139 */ "stroke-width: %g;\n", /* 140 */ "stroke-linecap: square;\n", /* 141 */ "stroke-linecap: round;\n", /* 142 */ "stroke-linecap: butt;\n", /* 143 */ "stroke-linejoin: bevel;\n", /* 144 */ "stroke-linejoin: round;\n", /* 145 */ "stroke-linejoin: miter;\n", /* 146 */ "stroke-dasharray: ", /* 147 */ ";\n", /* 148 */ "none", /* 149 */ "%g,%g", /* 150 */ "%g,%g,%g,%g", /* 151 */ "%g,%g,%g,%g,%g,%g", /* 152 */ "%g,%g,%g,%g,%g,%g,%g,%g", /* 153 */ "font-family=\"'", /* 154 */ "',serif\"\n", /* 155 */ "',sans-serif\"\n", /* 156 */ "',monospace\"\n", /* 157 */ "font-style=\"oblique\"\n", /* 158 */ "font-style=\"italic\"\n", /* 159 */ "font-weight=\"%d\"\n", /* 160 */ "font-size=\"%gpt\"\n", /* 161 */ "font-family=\"serif\"\n", /* 162 */ "font-family=\"sans-serif\"\n", /* 163 */ "font-family=\"monospace\"\n", /* 164 */ "font-weight=\"bold\"\n", /* 165 */ "text-anchor=\"middle\"\n", /* 166 */ "text-anchor=\"end\"\n", /* 167 */ "fill=\"url(#", /* 168 */ ")\"\n", /* 169 */ "fill=\"#%02X%02X%02X\"\n", /* 170 */ "fill=\"none\"\n", /* 171 */ "stroke=\"#%02X%02X%02X\"\n", /* 172 */ "stroke-width=\"%g\"\n", /* 173 */ "stroke-dasharray=\"%g,%g\"\n", /* 174 */ "stroke-dasharray=\"%g,%g,%g,%g\"\n", /* 175 */ "stroke-dasharray=\"%g,%g,%g,%g,%g,%g\"\n", /* 176 */ "stroke-dasharray=\"%g,%g,%g,%g,%g,%g,%g,%g\"\n", /* 177 */ "stroke-linecap=\"square\"\n", /* 178 */ "stroke-linecap=\"round\"\n", /* 179 */ "stroke-linejoin=\"bevel\"\n", /* 180 */ "stroke-linejoin=\"round\"\n", /* 181 */ "class=\"", /* 182 */ "\"\n", /* 183 */ "fill: #%02X%02X%02X;\n", /* 184 */ "fill=\"#%02X%02X%02X\"\nfillrule=\"evenodd\"\n", /* 185 */ "stroke-miterlimit: 20;\n", /* 186 */ "stroke-miterlimit=\"20\"\n", /* 187 */ "\",\"", /* 188 */ "','", NULL #line 840 "f2lsvgst.ctr" }; /** Compare two integer values. @param x Left value. @param y Right value. @return Comparison result. */ static int f2lsvgst_compare_int(int x, int y) { int back = 0; #line 855 "f2lsvgst.ctr" if(x > y) { back = 1; } else { if(x < y) { back = -1; } } #line 862 "f2lsvgst.ctr" return back; } static int f2lsvgst_compare_pattern( void const *l, void const *r, int DK3_ARG_UNUSED(cr) ) { int back = 0; f2l_svg_fill_pattern_t const *pl; f2l_svg_fill_pattern_t const *pr; DK3_UNUSED_ARG(cr) if(l) { if(r) { pl = (f2l_svg_fill_pattern_t const *)l; pr = (f2l_svg_fill_pattern_t const *)r; back = f2lsvgst_compare_int(pl->fn, pr->fn); if(0 == back) { back = f2lsvgst_compare_int(pl->sr, pr->sr); if(0 == back) { back = f2lsvgst_compare_int(pl->sg, pr->sg); if(0 == back) { back = f2lsvgst_compare_int(pl->sb, pr->sb); if(0 == back) { back = f2lsvgst_compare_int(pl->fr, pr->fr); if(0 == back) { back = f2lsvgst_compare_int(pl->fg, pr->fg); if(0 == back) { back = f2lsvgst_compare_int(pl->fb, pr->fb); } } } } } } } else { back = 1; } } else { if(r) { back = -1; } } return back; } static int f2lsvgst_compare_object_styles( void const *l, void const *r, int DK3_ARG_UNUSED(cr) ) { f2l_svg_style_t const *pl; f2l_svg_style_t const *pr; int back = 0; #line 920 "f2lsvgst.ctr" DK3_UNUSED_ARG(cr) if(l) { if(r) { pl = (f2l_svg_style_t const *)l; pr = (f2l_svg_style_t const *)r; /* Stroke color. */ #line 927 "f2lsvgst.ctr" if((pl->flags) & DK3_SVG_FLAGS_COLOR_STROKE) { if((pr->flags) & DK3_SVG_FLAGS_COLOR_STROKE) { back = f2lsvgst_compare_int(pl->sr, pr->sr); #line 931 "f2lsvgst.ctr" if(0 == back) { back = f2lsvgst_compare_int(pl->sg, pr->sg); #line 934 "f2lsvgst.ctr" if(0 == back) { back = f2lsvgst_compare_int(pl->sb, pr->sb); #line 937 "f2lsvgst.ctr" } } } else { back = 1; #line 941 "f2lsvgst.ctr" } } else { if((pr->flags) & DK3_SVG_FLAGS_COLOR_STROKE) { back = -1; #line 945 "f2lsvgst.ctr" } } /* Line width. */ if(0 == back) { #line 950 "f2lsvgst.ctr" if((pl->flags) & DK3_SVG_FLAGS_LINEWIDTH) { if((pr->flags) & DK3_SVG_FLAGS_LINEWIDTH) { if(pl->lw > (pr->lw + 1.0e-6)) { back = 1; #line 954 "f2lsvgst.ctr" } else { if(pr->lw > (pl->lw + 1.0e-6)) { back = -1; #line 957 "f2lsvgst.ctr" } } } else { back = 1; #line 961 "f2lsvgst.ctr" } } else { if((pr->flags) & DK3_SVG_FLAGS_LINEWIDTH) { back = -1; #line 965 "f2lsvgst.ctr" } } } /* Line cap. */ if(0 == back) { #line 971 "f2lsvgst.ctr" if((pl->flags) & DK3_SVG_FLAGS_LINE_CAP) { if((pr->flags) & DK3_SVG_FLAGS_LINE_CAP) { back = f2lsvgst_compare_int(pl->lc, pr->lc); #line 975 "f2lsvgst.ctr" } else { back = 1; #line 977 "f2lsvgst.ctr" } } else { if((pr->flags) & DK3_SVG_FLAGS_LINE_CAP) { back = -1; #line 981 "f2lsvgst.ctr" } } } /* Line join. */ if(0 == back) { #line 987 "f2lsvgst.ctr" if((pl->flags) & DK3_SVG_FLAGS_LINE_JOIN) { if((pr->flags) & DK3_SVG_FLAGS_LINE_JOIN) { back = f2lsvgst_compare_int(pl->lj, pr->lj); #line 991 "f2lsvgst.ctr" } else { back = 1; #line 993 "f2lsvgst.ctr" } } else { if((pr->flags) & DK3_SVG_FLAGS_LINE_JOIN) { back = -1; #line 997 "f2lsvgst.ctr" } } } /* Line style. */ if(0 == back) { #line 1003 "f2lsvgst.ctr" if((pl->flags) & DK3_SVG_FLAGS_LINESTYLE) { if((pr->flags) & DK3_SVG_FLAGS_LINESTYLE) { if(pl->ls > pr->ls) { back = 1; #line 1007 "f2lsvgst.ctr" } else { if(pr->ls > pl->ls) { back = -1; #line 1010 "f2lsvgst.ctr" } else { if((0 != pl->ls) && (0 != pr->ls)) { if(pl->lsv > (pr->lsv + 1.0e-6)) { back = 1; #line 1014 "f2lsvgst.ctr" } else { if(pr->lsv > (pl->lsv + 1.0e-6)) { back = -1; #line 1017 "f2lsvgst.ctr" } } } } } } else { back = 1; #line 1024 "f2lsvgst.ctr" } } else { if((pr->flags) & DK3_SVG_FLAGS_LINESTYLE) { back = -1; #line 1028 "f2lsvgst.ctr" } } } /* Fill pattern or fill color. */ if(0 == back) { #line 1034 "f2lsvgst.ctr" if(pl->fp) { if(pr->fp) { back = f2lsvgst_compare_pattern((void *)(pl->fp),(void *)(pr->fp),0); #line 1039 "f2lsvgst.ctr" } else { back = 1; #line 1041 "f2lsvgst.ctr" } } else { if(pr->fp) { back = -1; #line 1045 "f2lsvgst.ctr" } else { /* Fill color only if both objects do not have fill patterns. */ if(0 == back) { if((pl->flags) & DK3_SVG_FLAGS_COLOR_FILL) { if((pr->flags) & DK3_SVG_FLAGS_COLOR_FILL) { back = f2lsvgst_compare_int(pl->fr, pr->fr); #line 1054 "f2lsvgst.ctr" if(0 == back) { back = f2lsvgst_compare_int(pl->fg, pr->fg); #line 1057 "f2lsvgst.ctr" if(0 == back) { back = f2lsvgst_compare_int(pl->fb, pr->fb); #line 1060 "f2lsvgst.ctr" } } } else { back = 1; #line 1064 "f2lsvgst.ctr" } } else { if((pr->flags) & DK3_SVG_FLAGS_COLOR_FILL) { back = -1; #line 1068 "f2lsvgst.ctr" } } } } } } /* Font. */ if(0 == back) { #line 1077 "f2lsvgst.ctr" if((pl->flags) & DK3_SVG_FLAGS_FONT) { if((pr->flags) & DK3_SVG_FLAGS_FONT) { if((pl->flags) & DK3_SVG_FLAGS_PS_FONT) { if((pr->flags) & DK3_SVG_FLAGS_PS_FONT) { back = f2lsvgst_compare_int(pl->tf, pr->tf); #line 1083 "f2lsvgst.ctr" if(0 == back) { if(pl->ts > (pr->ts + 1.0e-6)) { back = 1; #line 1086 "f2lsvgst.ctr" } else { if(pl->ts < (pr->ts - 1.0e-6)) { back = -1; #line 1089 "f2lsvgst.ctr" } } } } else { back = 1; #line 1094 "f2lsvgst.ctr" } } else { if((pr->flags) & DK3_SVG_FLAGS_PS_FONT) { back = -1; #line 1098 "f2lsvgst.ctr" } else { back = f2lsvgst_compare_int(pl->tf, pr->tf); #line 1101 "f2lsvgst.ctr" if(0 == back) { if(pl->ts > (pr->ts + 1.0e-6)) { back = 1; #line 1104 "f2lsvgst.ctr" } else { if(pl->ts < (pr->ts - 1.0e-6)) { back = -1; #line 1107 "f2lsvgst.ctr" } } } } } } else { back = 1; #line 1114 "f2lsvgst.ctr" } } else { if((pr->flags) & DK3_SVG_FLAGS_FONT) { back = -1; #line 1118 "f2lsvgst.ctr" } } } /* Text align. */ if(0 == back) { #line 1124 "f2lsvgst.ctr" if((pl->flags) & DK3_SVG_FLAGS_TEXT_ALIGN) { if((pr->flags) & DK3_SVG_FLAGS_TEXT_ALIGN) { back = f2lsvgst_compare_int(pl->al, pr->al); #line 1128 "f2lsvgst.ctr" } else { back = 1; #line 1130 "f2lsvgst.ctr" } } else { if((pr->flags) & DK3_SVG_FLAGS_TEXT_ALIGN) { back = -1; #line 1134 "f2lsvgst.ctr" } } } } else { #line 1138 "f2lsvgst.ctr" back = 1; } } else { if(r) { back = -1; #line 1143 "f2lsvgst.ctr" } } #line 1145 "f2lsvgst.ctr" return back; } void f2lsvgst_pattern_delete(f2l_svg_fill_pattern_t *pa) { #line 1154 "f2lsvgst.ctr" if(pa) { #line 1156 "f2lsvgst.ctr" } dk3_delete(pa); #line 1159 "f2lsvgst.ctr" } f2l_svg_fill_pattern_t * f2lsvgst_pattern_new(f2l_svg_t *psvg) { f2l_svg_fill_pattern_t *back = NULL; #line 1168 "f2lsvgst.ctr" if(psvg) { back = dk3_new(f2l_svg_fill_pattern_t,1); if(back) { back->pn = 0UL; back->fn = 0; back->sr = 0; back->sg = 0; back->sb = 0; back->fr = 0; back->fg = 0; back->fb = 0; } else { psvg->ec = DK3_ERROR_MEMORY; } } #line 1179 "f2lsvgst.ctr" return back; } void f2lsvgst_style_initialize(f2l_svg_style_t *st) { #line 1188 "f2lsvgst.ctr" if(st) { /* 2013-01-25: Same order as in typedef makes completeness checking easier. */ st->fp = NULL; st->ts = 0.0; st->lw = 0.0; st->lsv = 0.0; st->sn = 0UL; st->tf = 0; st->flags = 0; st->sr = 0; st->sg = 0; st->sb = 0; st->fr = 0; st->fg = 0; st->fb = 0; st->ls = 0; st->al = 0; st->lc = 0; st->lj = 0; } #line 1205 "f2lsvgst.ctr" } #if 0 /** Report style contents. @param pst SVG style to report. */ static void f2lsvgst_style_report(f2l_svg_style_t *pst) { FILE *tf; tf = dktrace_file(); if(tf) { if((pst->flags) & DK3_SVG_FLAGS_COLOR_STROKE) { fprintf(tf, "Stroke: #%02X%02X%02X\n", pst->sr, pst->sg, pst->sb); } if((pst->flags) & DK3_SVG_FLAGS_LINEWIDTH) { fprintf(tf, "Line width: %g\n", pst->lw); } if((pst->flags) & DK3_SVG_FLAGS_LINESTYLE) { fprintf(tf, "Line style: %d %g\n", pst->ls, pst->lsv); } if((pst->flags) & DK3_SVG_FLAGS_LINE_CAP) { fprintf(tf, "Line cap: %d\n", pst->lc); } if((pst->flags) & DK3_SVG_FLAGS_LINE_JOIN) { fprintf(tf, "Line join: %d\n", pst->lj); } if(pst->fp) { fprintf(tf, "Fill: pattern\n"); } else { if((pst->flags) & DK3_SVG_FLAGS_COLOR_FILL) { fprintf(tf, "Fill: #%02X%02X%02X", pst->fr, pst->fg, pst->fb); } } if((pst->flags) & DK3_SVG_FLAGS_FONT) { fprintf(tf, "Font: PS=%d NUMBER=%d SIZE=%g\n", (((pst->flags) & DK3_SVG_FLAGS_PS_FONT) ? 1 : 0), pst->tf, pst->ts); } if((pst->flags) & DK3_SVG_FLAGS_TEXT_ALIGN) { fprintf(tf, "Text align: %d\n", pst->al); } } } #endif void f2lsvgst_style_delete(f2l_svg_style_t *st) { #line 1256 "f2lsvgst.ctr" if(st) { f2lsvgst_style_initialize(st); dk3_delete(st); } #line 1260 "f2lsvgst.ctr" } f2l_svg_style_t * f2lsvgst_style_new(f2l_svg_t *psvg) { f2l_svg_style_t *back = NULL; #line 1269 "f2lsvgst.ctr" if(psvg) { back = dk3_new(f2l_svg_style_t,1); if(back) { f2lsvgst_style_initialize(back); } else { psvg->ec = DK3_ERROR_MEMORY; } } #line 1277 "f2lsvgst.ctr" return back; } void f2lsvgst_delete(f2l_svg_t *psvg) { f2l_svg_style_t *st; f2l_svg_fill_pattern_t *pa; #line 1288 "f2lsvgst.ctr" if(psvg) { dk3_release(psvg->psFontsUsed); if(psvg->sStyles) { if(psvg->iStyles) { dk3sto_it_reset(psvg->iStyles); while(NULL != (st = (f2l_svg_style_t *)dk3sto_it_next(psvg->iStyles))) { f2lsvgst_style_delete(st); } dk3sto_it_close(psvg->iStyles); } dk3sto_close(psvg->sStyles); } psvg->sStyles = NULL; psvg->iStyles = NULL; if(psvg->sPatterns) { if(psvg->iPatterns) { dk3sto_it_reset(psvg->iPatterns); do { pa = (f2l_svg_fill_pattern_t *)dk3sto_it_next(psvg->iPatterns); if(pa) { f2lsvgst_pattern_delete(pa); } } while(pa); dk3sto_it_close(psvg->iPatterns); } dk3sto_close(psvg->sPatterns); } psvg->sPatterns = NULL; psvg->iPatterns = NULL; dk3_delete(psvg); } #line 1315 "f2lsvgst.ctr" } f2l_svg_t * f2lsvgst_new_app(dk3_app_t *app) { f2l_svg_t *back = NULL; size_t i; int ok = 0; #line 1326 "f2lsvgst.ctr" back = dk3_new_app(f2l_svg_t,1,app); if(back) { back->sPatterns = NULL; back->iPatterns = NULL; back->sStyles = NULL; back->iStyles = NULL; back->nPatterns = 0UL; back->nStyles = 0UL; back->psFontsUsed = NULL; back->ec = 0; back->sPatterns = dk3sto_open_app(app); if(back->sPatterns) { dk3sto_set_comp(back->sPatterns, f2lsvgst_compare_pattern, 0); back->iPatterns = dk3sto_it_open(back->sPatterns); if(back->iPatterns) { back->sStyles = dk3sto_open_app(app); if(back->sStyles) { dk3sto_set_comp(back->sStyles, f2lsvgst_compare_object_styles, 0); back->iStyles = dk3sto_it_open(back->sStyles); if(back->iStyles) { back->psFontsUsed = dk3_new_app(int,35,app); if(back) { for(i = 0; i < 35; i++) { (back->psFontsUsed)[i] = 0; } ok = 1; } } } } } if(!(ok)) { f2lsvgst_delete(back); back = NULL; } } #line 1360 "f2lsvgst.ctr" return back; } int f2lsvgst_get_error_code(f2l_svg_t *psvg) { int back = 0; if(psvg) { back = psvg->ec; psvg->ec = 0; } #line 1373 "f2lsvgst.ctr" return back; } f2l_svg_fill_pattern_t * f2lsvgst_pattern_add(f2l_svg_t *psvg, f2l_svg_fill_pattern_t *src) { f2l_svg_fill_pattern_t *back = NULL; #line 1382 "f2lsvgst.ctr" if((psvg) && (src)) { back = (f2l_svg_fill_pattern_t *)dk3sto_it_find_like( psvg->iPatterns, (void *)src, 0 ); if(!(back)) { if(0UL != (1UL + psvg->nPatterns)) { back = f2lsvgst_pattern_new(psvg); if(back) { dk3mem_cpy((void *)back, (void *)src, sizeof(f2l_svg_fill_pattern_t)); if(dk3sto_add(psvg->sPatterns, (void *)back)) { back->pn = psvg->nPatterns; psvg->nPatterns += 1UL; } else { f2lsvgst_pattern_delete(back); back = NULL; } } } else { psvg->ec = DK3_ERROR_MATH_OVERFLOW; } } } #line 1404 "f2lsvgst.ctr" return back; } f2l_svg_style_t * f2lsvgst_style_add(f2l_svg_t *psvg, f2l_svg_style_t *src) { f2l_svg_style_t *back = NULL; #line 1414 "f2lsvgst.ctr" if((psvg) && (src)) { back = (f2l_svg_style_t *)dk3sto_it_find_like( psvg->iStyles, (void *)src, 0 ); if(!(back)) { #line 1419 "f2lsvgst.ctr" if(0UL != (1UL + psvg->nStyles)) { #line 1420 "f2lsvgst.ctr" back = f2lsvgst_style_new(psvg); if(back) { #line 1422 "f2lsvgst.ctr" dk3mem_cpy((void *)back, (void *)src, sizeof(f2l_svg_style_t)); if(dk3sto_add(psvg->sStyles, (void *)back)) { back->sn = psvg->nStyles; psvg->nStyles += 1UL; } else { f2lsvgst_style_delete(back); back = NULL; } } else { #line 1431 "f2lsvgst.ctr" } } else { psvg->ec = DK3_ERROR_MATH_OVERFLOW; } } else { #line 1436 "f2lsvgst.ctr" } } #line 1438 "f2lsvgst.ctr" return back; } int f2lsvgst_style_set_pattern( f2l_svg_t *psvg, f2l_svg_style_t *pst, f2l_svg_fill_pattern_t *ppat ) { int back = 0; #line 1452 "f2lsvgst.ctr" if((psvg) && (pst) && (ppat)) { if(!(pst->fp)) { pst->fp = f2lsvgst_pattern_add(psvg, ppat); if(pst->fp) { back = 1; } } } #line 1460 "f2lsvgst.ctr" return back; } void f2lsvgst_style_set_text( f2l_svg_t *psvg, f2l_svg_style_t *pst, int ps, int tf, double ts ) { #line 1475 "f2lsvgst.ctr" if(pst) { pst->tf = tf; pst->ts = ts; pst->flags |= (DK3_SVG_FLAGS_FONT); if(ps) { pst->flags |= (DK3_SVG_FLAGS_PS_FONT); } else { pst->flags &= (~(DK3_SVG_FLAGS_PS_FONT)); } } if((psvg) && (ps)) { if((0 <= tf) && (tf < 35)) { (psvg->psFontsUsed)[tf] = 1; } } #line 1490 "f2lsvgst.ctr" } void f2lsvgst_style_set_line_width( f2l_svg_style_t *pst, double lw ) { #line 1501 "f2lsvgst.ctr" if(pst) { pst->lw = lw; pst->flags |= (DK3_SVG_FLAGS_LINEWIDTH); } #line 1505 "f2lsvgst.ctr" } void f2lsvgst_style_set_line_style( f2l_svg_style_t *pst, int ls, double lsv ) { #line 1517 "f2lsvgst.ctr" if(pst) { pst->ls = ls; pst->lsv = lsv; pst->flags|= (DK3_SVG_FLAGS_LINESTYLE); } #line 1521 "f2lsvgst.ctr" } void f2lsvgst_style_set_line_color( f2l_svg_style_t *pst, int r, int g, int b ) { #line 1534 "f2lsvgst.ctr" if(pst) { pst->sr = r; pst->sg = g; pst->sb = b; pst->flags |= (DK3_SVG_FLAGS_COLOR_STROKE); } #line 1538 "f2lsvgst.ctr" } void f2lsvgst_style_set_fill_color( f2l_svg_style_t *pst, int r, int g, int b ) { #line 1551 "f2lsvgst.ctr" if(pst) { pst->fr = r; pst->fg = g; pst->fb = b; pst->flags |= (DK3_SVG_FLAGS_COLOR_FILL); } #line 1555 "f2lsvgst.ctr" } int f2lsvgst_any_ps_font_used(f2l_svg_t *psvg) { size_t i; int back = 0; for(i = 0; i < 35; i++) { if((psvg->psFontsUsed)[i]) { back = 1; } } return back; } void f2lsvgst_style_set_text_align(f2l_svg_style_t *pst, int al) { if(pst) { pst->al = al; pst->flags |= (DK3_SVG_FLAGS_TEXT_ALIGN); } } void f2lsvgst_style_set_text_line_cap(f2l_svg_style_t *pst, int lc) { if(pst) { pst->lc = lc; pst->flags |= (DK3_SVG_FLAGS_LINE_CAP); } } void f2lsvgst_style_set_text_line_join(f2l_svg_style_t *pst, int lj) { if(pst) { pst->lj = lj; pst->flags |= (DK3_SVG_FLAGS_LINE_JOIN); } } /** Write one tag name, either with or without svg: prefix. @param job Job structure. @param ind Index of tag name in f2lsvgst_c8_kw. */ static void f2lsvgst_tag( f2l_job_t *job, size_t ind ) { if(job->fragment) { fputs(f2lsvgst_c8_kw[1], job->of1); } fputs(f2lsvgst_c8_kw[ind], job->of1); } /** Write a number as string. @param job Job structure. @param current Current value. @param max Maximum value. */ static void f2lsvgst_write_id( f2l_job_t *job, unsigned long current, unsigned long max ) { char buf[128]; char *ptr; size_t maxlgt; size_t lgt; size_t i; sprintf(buf, "%lu", max); maxlgt = strlen(buf); sprintf(buf, "%lu", current); lgt = strlen(buf); for(i = lgt; i < maxlgt; i++) { fputc('A', job->of1); } ptr = buf; while(*ptr) { switch(*ptr) { case '0': { *ptr = 'A'; } break; case '1': { *ptr = 'B'; } break; case '2': { *ptr = 'C'; } break; case '3': { *ptr = 'D'; } break; case '4': { *ptr = 'E'; } break; case '5': { *ptr = 'F'; } break; case '6': { *ptr = 'G'; } break; case '7': { *ptr = 'H'; } break; case '8': { *ptr = 'I'; } break; case '9': { *ptr = 'J'; } break; } ptr++; } fputs(buf, job->of1); } /** Write pattern ID. @param job Job structure. @param psvg SVG style collection. @param pat Pattern used for current object. */ static void f2lsvgst_write_pattern_id( f2l_job_t *job, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { #line 1687 "f2lsvgst.ctr" fputs(f2lsvgst_c8_kw[8], job->of1); f2lsvgst_write_id(job, pat->pn, psvg->nPatterns); #line 1690 "f2lsvgst.ctr" } /** Write style ID. @param job Job structure. @param psvg SVG style collection. @param pst Style used by current object. */ static void f2lsvgst_write_style_id( f2l_job_t *job, f2l_svg_t *psvg, f2l_svg_style_t *pst ) { #line 1708 "f2lsvgst.ctr" fputs(f2lsvgst_c8_kw[111], job->of1); f2lsvgst_write_id(job, pst->sn, psvg->nStyles); #line 1711 "f2lsvgst.ctr" } /** Write opening pattern tag. @param job Job structure. @param psvg SVG style collection. @param pat Pattern to write. @param w Pattern width. @param h Pattern height. */ static void f2lsvgst_write_opening_pattern_tag( f2l_job_t *job, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat, double w, double h ) { fputs(f2lsvgst_c8_kw[6], job->of1); f2lsvgst_tag(job, 3); fputs(f2lsvgst_c8_kw[7], job->of1); f2lsvgst_write_pattern_id(job, psvg, pat); fprintf(job->of1, f2lsvgst_c8_kw[9], w, h); } /** Write opening pattern tag. @param job Job structure. @param pat Pattern to write. @param w Pattern width. @param h Pattern height. */ static void f2lsvgst_pattern_background( f2l_job_t *job, f2l_svg_fill_pattern_t *pat, double w, double h ) { fputs(f2lsvgst_c8_kw[6], job->of1); f2lsvgst_tag(job, 10); fprintf(job->of1, f2lsvgst_c8_kw[11], w, h); fprintf(job->of1, f2lsvgst_c8_kw[12], pat->fr, pat->fg, pat->fb); fputs(f2lsvgst_c8_kw[13], job->of1); } /** Draw foreground line in pattern. @param job Job structure. @param pat Pattern to write. @param ind Index of points line in f2lsvgst_c8_kw. */ static void f2lsvgst_pattern_foreground_line( f2l_job_t *job, f2l_svg_fill_pattern_t *pat, size_t ind ) { fputs(f2lsvgst_c8_kw[6], job->of1); f2lsvgst_tag(job, 18); fprintf(job->of1, f2lsvgst_c8_kw[14], pat->sr, pat->sg, pat->sb); fputs(f2lsvgst_c8_kw[ind], job->of1); fputs(f2lsvgst_c8_kw[0], job->of1); fputs(f2lsvgst_c8_kw[13], job->of1); } /** Draw foreground line in pattern. @param job Job structure. @param pat Pattern to write. @param ind Index of points line in f2lsvgst_c8_kw. */ static void f2lsvgst_pattern_foreground_line_lcr( f2l_job_t *job, f2l_svg_fill_pattern_t *pat, size_t ind ) { fputs(f2lsvgst_c8_kw[6], job->of1); f2lsvgst_tag(job, 18); fputs(f2lsvgst_c8_kw[0], job->of1); fprintf(job->of1, f2lsvgst_c8_kw[22], pat->sr, pat->sg, pat->sb); fputs(f2lsvgst_c8_kw[0], job->of1); fputs(f2lsvgst_c8_kw[ind], job->of1); fputs(f2lsvgst_c8_kw[0], job->of1); fputs(f2lsvgst_c8_kw[13], job->of1); } /** Draw foreground polygon in pattern. @param job Job structure. @param pat Pattern to write. @param ind Index of points line in f2lsvgst_c8_kw. */ static void f2lsvgst_pattern_foreground_polygon_lcr( f2l_job_t *job, f2l_svg_fill_pattern_t *pat, size_t ind ) { fputs(f2lsvgst_c8_kw[6], job->of1); f2lsvgst_tag(job, 51); fputs(f2lsvgst_c8_kw[0], job->of1); fprintf(job->of1, f2lsvgst_c8_kw[22], pat->sr, pat->sg, pat->sb); fputs(f2lsvgst_c8_kw[0], job->of1); fputs(f2lsvgst_c8_kw[ind], job->of1); fputs(f2lsvgst_c8_kw[0], job->of1); fputs(f2lsvgst_c8_kw[13], job->of1); } /** Draw foreground polygon in pattern, 2 data lines. @param job Job structure. @param pat Pattern to write. @param i1 Index of points line in f2lsvgst_c8_kw. @param i2 Index of points line 2. */ static void f2lsvgst_pattern_foreground_polygon_lcr_l2( f2l_job_t *job, f2l_svg_fill_pattern_t *pat, size_t i1, size_t i2 ) { fputs(f2lsvgst_c8_kw[6], job->of1); f2lsvgst_tag(job, 51); fputs(f2lsvgst_c8_kw[0], job->of1); fprintf(job->of1, f2lsvgst_c8_kw[22], pat->sr, pat->sg, pat->sb); fputs(f2lsvgst_c8_kw[0], job->of1); fputs(f2lsvgst_c8_kw[i1], job->of1); fputs(f2lsvgst_c8_kw[0], job->of1); fputs(f2lsvgst_c8_kw[i2], job->of1); fputs(f2lsvgst_c8_kw[0], job->of1); fputs(f2lsvgst_c8_kw[13], job->of1); } /** Draw foreground path in pattern @param job Job structure. @param pat Pattern to write. @param ind Index of data line in f2lsvgst_c8_kw. */ static void f2lsvgst_pattern_foreground_path_lcr( f2l_job_t *job, f2l_svg_fill_pattern_t *pat, size_t ind ) { fputs(f2lsvgst_c8_kw[6], job->of1); f2lsvgst_tag(job, 89); fputs(f2lsvgst_c8_kw[0], job->of1); fprintf(job->of1, f2lsvgst_c8_kw[22], pat->sr, pat->sg, pat->sb); fputs(f2lsvgst_c8_kw[0], job->of1); fputs(f2lsvgst_c8_kw[ind], job->of1); fputs(f2lsvgst_c8_kw[0], job->of1); fputs(f2lsvgst_c8_kw[13], job->of1); } /** Draw foreground circle in pattern @param job Job structure. @param pat Pattern to write. */ static void f2lsvgst_pattern_foreground_circle_lcr( f2l_job_t *job, f2l_svg_fill_pattern_t *pat ) { fputs(f2lsvgst_c8_kw[6], job->of1); f2lsvgst_tag(job, 100); fputs(f2lsvgst_c8_kw[102], job->of1); fputs(f2lsvgst_c8_kw[0], job->of1); fprintf(job->of1, f2lsvgst_c8_kw[101], pat->sr, pat->sg, pat->sb); fputs(f2lsvgst_c8_kw[0], job->of1); fputs(f2lsvgst_c8_kw[13], job->of1); } /** Write pattern 41 definition to SVG output file. @param job Job structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_41( f2l_job_t *job, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, psvg, pat, 7.2, 4.16); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, pat, 7.2, 4.16); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_line(job, pat, 15); f2lsvgst_pattern_foreground_line(job, pat, 16); f2lsvgst_pattern_foreground_line(job, pat, 17); /* Close pattern tag. */ fputs(f2lsvgst_c8_kw[6], job->of1); fputs(f2lsvgst_c8_kw[4], job->of1); f2lsvgst_tag(job, 3); fputs(f2lsvgst_c8_kw[5], job->of1); fputs(f2lsvgst_c8_kw[0], job->of1); } /** Write pattern 42 definition to SVG output file. @param job Job structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_42( f2l_job_t *job, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, psvg, pat, 7.2, 4.16); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, pat, 7.2, 4.16); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_line(job, pat, 19); f2lsvgst_pattern_foreground_line(job, pat, 20); f2lsvgst_pattern_foreground_line(job, pat, 21); /* Close pattern tag. */ fputs(f2lsvgst_c8_kw[6], job->of1); fputs(f2lsvgst_c8_kw[4], job->of1); f2lsvgst_tag(job, 3); fputs(f2lsvgst_c8_kw[5], job->of1); fputs(f2lsvgst_c8_kw[0], job->of1); } /** Write pattern 43 definition to SVG output file. @param job Job structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_43( f2l_job_t *job, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, psvg, pat, 7.2, 4.16); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, pat, 7.2, 4.16); /* Pattern contents 2: lines. */ #if 1 f2lsvgst_pattern_foreground_line_lcr(job, pat, 23); f2lsvgst_pattern_foreground_line_lcr(job, pat, 24); #else f2lsvgst_pattern_foreground_line(job, pat, 15); f2lsvgst_pattern_foreground_line(job, pat, 16); f2lsvgst_pattern_foreground_line(job, pat, 17); f2lsvgst_pattern_foreground_line(job, pat, 19); f2lsvgst_pattern_foreground_line(job, pat, 20); f2lsvgst_pattern_foreground_line(job, pat, 21); #endif /* Close pattern tag. */ fputs(f2lsvgst_c8_kw[6], job->of1); fputs(f2lsvgst_c8_kw[4], job->of1); f2lsvgst_tag(job, 3); fputs(f2lsvgst_c8_kw[5], job->of1); fputs(f2lsvgst_c8_kw[0], job->of1); } /** Write pattern 44 definition to SVG output file. @param job Job structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_44( f2l_job_t *job, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, psvg, pat, 10.18, 10.18); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, pat, 10.18, 10.18); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_line(job, pat, 25); f2lsvgst_pattern_foreground_line(job, pat, 26); f2lsvgst_pattern_foreground_line(job, pat, 27); /* Close pattern tag. */ fputs(f2lsvgst_c8_kw[6], job->of1); fputs(f2lsvgst_c8_kw[4], job->of1); f2lsvgst_tag(job, 3); fputs(f2lsvgst_c8_kw[5], job->of1); fputs(f2lsvgst_c8_kw[0], job->of1); } /** Write pattern 45 definition to SVG output file. @param job Job structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_45( f2l_job_t *job, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, psvg, pat, 10.18, 10.18); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, pat, 10.18, 10.18); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_line(job, pat, 28); f2lsvgst_pattern_foreground_line(job, pat, 29); f2lsvgst_pattern_foreground_line(job, pat, 30); /* Close pattern tag. */ fputs(f2lsvgst_c8_kw[6], job->of1); fputs(f2lsvgst_c8_kw[4], job->of1); f2lsvgst_tag(job, 3); fputs(f2lsvgst_c8_kw[5], job->of1); fputs(f2lsvgst_c8_kw[0], job->of1); } /** Write pattern 46 definition to SVG output file. @param job Job structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_46( f2l_job_t *job, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, psvg, pat, 10.18, 10.18); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, pat, 10.18, 10.18); /* Pattern contents 2: lines. */ #if 1 f2lsvgst_pattern_foreground_line_lcr(job, pat, 31); f2lsvgst_pattern_foreground_line_lcr(job, pat, 32); #else f2lsvgst_pattern_foreground_line(job, pat, 25); f2lsvgst_pattern_foreground_line(job, pat, 26); f2lsvgst_pattern_foreground_line(job, pat, 27); f2lsvgst_pattern_foreground_line(job, pat, 28); f2lsvgst_pattern_foreground_line(job, pat, 29); f2lsvgst_pattern_foreground_line(job, pat, 30); #endif /* Close pattern tag. */ fputs(f2lsvgst_c8_kw[6], job->of1); fputs(f2lsvgst_c8_kw[4], job->of1); f2lsvgst_tag(job, 3); fputs(f2lsvgst_c8_kw[5], job->of1); fputs(f2lsvgst_c8_kw[0], job->of1); } /** Write pattern 47 definition to SVG output file. @param job Job structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_47( f2l_job_t *job, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, psvg, pat, 28.8, 14.4); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, pat, 28.8, 14.4); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_line_lcr(job, pat, 33); f2lsvgst_pattern_foreground_line_lcr(job, pat, 34); f2lsvgst_pattern_foreground_line_lcr(job, pat, 35); f2lsvgst_pattern_foreground_line_lcr(job, pat, 36); f2lsvgst_pattern_foreground_line_lcr(job, pat, 37); f2lsvgst_pattern_foreground_line_lcr(job, pat, 38); f2lsvgst_pattern_foreground_line_lcr(job, pat, 39); /* Close pattern tag. */ fputs(f2lsvgst_c8_kw[6], job->of1); fputs(f2lsvgst_c8_kw[4], job->of1); f2lsvgst_tag(job, 3); fputs(f2lsvgst_c8_kw[5], job->of1); fputs(f2lsvgst_c8_kw[0], job->of1); } /** Write pattern 48 definition to SVG output file. @param job Job structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_48( f2l_job_t *job, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, psvg, pat, 14.4, 28.8); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, pat, 14.4, 28.8); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_line_lcr(job, pat, 40); f2lsvgst_pattern_foreground_line_lcr(job, pat, 41); f2lsvgst_pattern_foreground_line_lcr(job, pat, 42); f2lsvgst_pattern_foreground_line_lcr(job, pat, 43); f2lsvgst_pattern_foreground_line_lcr(job, pat, 44); f2lsvgst_pattern_foreground_line_lcr(job, pat, 45); f2lsvgst_pattern_foreground_line_lcr(job, pat, 46); /* Close pattern tag. */ fputs(f2lsvgst_c8_kw[6], job->of1); fputs(f2lsvgst_c8_kw[4], job->of1); f2lsvgst_tag(job, 3); fputs(f2lsvgst_c8_kw[5], job->of1); fputs(f2lsvgst_c8_kw[0], job->of1); } /** Write pattern 49 definition to SVG output file. @param job Job structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_49( f2l_job_t *job, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, psvg, pat, 3.6, 3.6); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, pat, 3.6, 3.6); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_line_lcr(job, pat, 47); f2lsvgst_pattern_foreground_line_lcr(job, pat, 48); /* Close pattern tag. */ fputs(f2lsvgst_c8_kw[6], job->of1); fputs(f2lsvgst_c8_kw[4], job->of1); f2lsvgst_tag(job, 3); fputs(f2lsvgst_c8_kw[5], job->of1); fputs(f2lsvgst_c8_kw[0], job->of1); } /** Write pattern 50 definition to SVG output file. @param job Job structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_50( f2l_job_t *job, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, psvg, pat, 3.6, 3.6); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, pat, 3.6, 3.6); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_line_lcr(job, pat, 49); f2lsvgst_pattern_foreground_line_lcr(job, pat, 50); /* Close pattern tag. */ fputs(f2lsvgst_c8_kw[6], job->of1); fputs(f2lsvgst_c8_kw[4], job->of1); f2lsvgst_tag(job, 3); fputs(f2lsvgst_c8_kw[5], job->of1); fputs(f2lsvgst_c8_kw[0], job->of1); } /** Write pattern 51 definition to SVG output file. @param job Job structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_51( f2l_job_t *job, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, psvg, pat, 3.6, 3.6); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, pat, 3.6, 3.6); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_polygon_lcr(job, pat, 52); /* Close pattern tag. */ fputs(f2lsvgst_c8_kw[6], job->of1); fputs(f2lsvgst_c8_kw[4], job->of1); f2lsvgst_tag(job, 3); fputs(f2lsvgst_c8_kw[5], job->of1); fputs(f2lsvgst_c8_kw[0], job->of1); } /** Write pattern 52 definition to SVG output file. @param job Job structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_52( f2l_job_t *job, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, psvg, pat, 14.4, 28.8); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, pat, 14.4, 28.8); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_line_lcr(job, pat, 53); f2lsvgst_pattern_foreground_line_lcr(job, pat, 54); f2lsvgst_pattern_foreground_line_lcr(job, pat, 55); f2lsvgst_pattern_foreground_line_lcr(job, pat, 56); f2lsvgst_pattern_foreground_line_lcr(job, pat, 57); f2lsvgst_pattern_foreground_line_lcr(job, pat, 58); f2lsvgst_pattern_foreground_line_lcr(job, pat, 59); f2lsvgst_pattern_foreground_line_lcr(job, pat, 60); f2lsvgst_pattern_foreground_line_lcr(job, pat, 61); /* Close pattern tag. */ fputs(f2lsvgst_c8_kw[6], job->of1); fputs(f2lsvgst_c8_kw[4], job->of1); f2lsvgst_tag(job, 3); fputs(f2lsvgst_c8_kw[5], job->of1); fputs(f2lsvgst_c8_kw[0], job->of1); } /** Write pattern 53 definition to SVG output file. @param job Job structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_53( f2l_job_t *job, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, psvg, pat, 14.4, 28.8); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, pat, 14.4, 28.8); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_line_lcr(job, pat, 62); f2lsvgst_pattern_foreground_line_lcr(job, pat, 63); f2lsvgst_pattern_foreground_line_lcr(job, pat, 64); f2lsvgst_pattern_foreground_line_lcr(job, pat, 65); f2lsvgst_pattern_foreground_line_lcr(job, pat, 66); f2lsvgst_pattern_foreground_line_lcr(job, pat, 67); f2lsvgst_pattern_foreground_line_lcr(job, pat, 68); f2lsvgst_pattern_foreground_line_lcr(job, pat, 69); f2lsvgst_pattern_foreground_line_lcr(job, pat, 70); /* Close pattern tag. */ fputs(f2lsvgst_c8_kw[6], job->of1); fputs(f2lsvgst_c8_kw[4], job->of1); f2lsvgst_tag(job, 3); fputs(f2lsvgst_c8_kw[5], job->of1); fputs(f2lsvgst_c8_kw[0], job->of1); } /** Write pattern 54 definition to SVG output file. @param job Job structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_54( f2l_job_t *job, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, psvg, pat, 28.8, 14.4); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, pat, 28.8, 14.4); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_line_lcr(job, pat, 71); f2lsvgst_pattern_foreground_line_lcr(job, pat, 72); f2lsvgst_pattern_foreground_line_lcr(job, pat, 73); f2lsvgst_pattern_foreground_line_lcr(job, pat, 74); f2lsvgst_pattern_foreground_line_lcr(job, pat, 75); f2lsvgst_pattern_foreground_line_lcr(job, pat, 76); f2lsvgst_pattern_foreground_line_lcr(job, pat, 77); f2lsvgst_pattern_foreground_line_lcr(job, pat, 78); f2lsvgst_pattern_foreground_line_lcr(job, pat, 79); /* Close pattern tag. */ fputs(f2lsvgst_c8_kw[6], job->of1); fputs(f2lsvgst_c8_kw[4], job->of1); f2lsvgst_tag(job, 3); fputs(f2lsvgst_c8_kw[5], job->of1); fputs(f2lsvgst_c8_kw[0], job->of1); } /** Write pattern 55 definition to SVG output file. @param job Job structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_55( f2l_job_t *job, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, psvg, pat, 28.8, 14.4); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, pat, 28.8, 14.4); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_line_lcr(job, pat, 80); f2lsvgst_pattern_foreground_line_lcr(job, pat, 81); f2lsvgst_pattern_foreground_line_lcr(job, pat, 82); f2lsvgst_pattern_foreground_line_lcr(job, pat, 83); f2lsvgst_pattern_foreground_line_lcr(job, pat, 84); f2lsvgst_pattern_foreground_line_lcr(job, pat, 85); f2lsvgst_pattern_foreground_line_lcr(job, pat, 86); f2lsvgst_pattern_foreground_line_lcr(job, pat, 87); f2lsvgst_pattern_foreground_line_lcr(job, pat, 88); /* Close pattern tag. */ fputs(f2lsvgst_c8_kw[6], job->of1); fputs(f2lsvgst_c8_kw[4], job->of1); f2lsvgst_tag(job, 3); fputs(f2lsvgst_c8_kw[5], job->of1); fputs(f2lsvgst_c8_kw[0], job->of1); } /** Write pattern 56 definition to SVG output file. @param job Job structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_56( f2l_job_t *job, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, psvg, pat, 14.54, 7.4); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, pat, 14.54, 7.4); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_path_lcr(job, pat, 90); f2lsvgst_pattern_foreground_path_lcr(job, pat, 91); f2lsvgst_pattern_foreground_path_lcr(job, pat, 92); f2lsvgst_pattern_foreground_path_lcr(job, pat, 93); f2lsvgst_pattern_foreground_path_lcr(job, pat, 94); /* Close pattern tag. */ fputs(f2lsvgst_c8_kw[6], job->of1); fputs(f2lsvgst_c8_kw[4], job->of1); f2lsvgst_tag(job, 3); fputs(f2lsvgst_c8_kw[5], job->of1); fputs(f2lsvgst_c8_kw[0], job->of1); } /** Write pattern 57 definition to SVG output file. @param job Job structure. @param drw Drawing structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_57( f2l_job_t *job, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, psvg, pat, 7.2, 7.2); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, pat, 7.2, 7.2); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_path_lcr(job, pat, 95); f2lsvgst_pattern_foreground_path_lcr(job, pat, 96); f2lsvgst_pattern_foreground_path_lcr(job, pat, 97); f2lsvgst_pattern_foreground_path_lcr(job, pat, 98); f2lsvgst_pattern_foreground_path_lcr(job, pat, 99); /* Close pattern tag. */ fputs(f2lsvgst_c8_kw[6], job->of1); fputs(f2lsvgst_c8_kw[4], job->of1); f2lsvgst_tag(job, 3); fputs(f2lsvgst_c8_kw[5], job->of1); fputs(f2lsvgst_c8_kw[0], job->of1); } /** Write pattern 58 definition to SVG output file. @param job Job structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_58( f2l_job_t *job, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, psvg, pat, 14.4, 14.4); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, pat, 14.4, 14.4); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_circle_lcr(job, pat); /* Close pattern tag. */ fputs(f2lsvgst_c8_kw[6], job->of1); fputs(f2lsvgst_c8_kw[4], job->of1); f2lsvgst_tag(job, 3); fputs(f2lsvgst_c8_kw[5], job->of1); fputs(f2lsvgst_c8_kw[0], job->of1); } /** Write pattern 59 definition to SVG output file. @param job Job structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_59( f2l_job_t *job, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, psvg, pat, 21.6, 12.47); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, pat, 21.6, 12.47); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_polygon_lcr(job, pat, 103); f2lsvgst_pattern_foreground_line_lcr(job, pat, 104); f2lsvgst_pattern_foreground_line_lcr(job, pat, 105); f2lsvgst_pattern_foreground_line_lcr(job, pat, 106); /* Close pattern tag. */ fputs(f2lsvgst_c8_kw[6], job->of1); fputs(f2lsvgst_c8_kw[4], job->of1); f2lsvgst_tag(job, 3); fputs(f2lsvgst_c8_kw[5], job->of1); fputs(f2lsvgst_c8_kw[0], job->of1); } /** Write pattern 60 definition to SVG output file. @param job Job structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_60( f2l_job_t *job, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, psvg, pat, 14.4, 14.4); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, pat, 14.4, 14.4); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_polygon_lcr_l2(job, pat, 107, 108); /* Close pattern tag. */ fputs(f2lsvgst_c8_kw[6], job->of1); fputs(f2lsvgst_c8_kw[4], job->of1); f2lsvgst_tag(job, 3); fputs(f2lsvgst_c8_kw[5], job->of1); fputs(f2lsvgst_c8_kw[0], job->of1); } /** Write pattern 61 definition to SVG output file. @param job Job structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_61( f2l_job_t *job, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, psvg, pat, 7.2, 7.2); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, pat, 7.2, 7.2); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_line_lcr(job, pat, 109); /* Close pattern tag. */ fputs(f2lsvgst_c8_kw[6], job->of1); fputs(f2lsvgst_c8_kw[4], job->of1); f2lsvgst_tag(job, 3); fputs(f2lsvgst_c8_kw[5], job->of1); fputs(f2lsvgst_c8_kw[0], job->of1); } /** Write pattern 62 definition to SVG output file. @param job Job structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_62( f2l_job_t *job, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, psvg, pat, 7.2, 7.2); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, pat, 7.2, 7.2); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_line_lcr(job, pat, 110); /* Close pattern tag. */ fputs(f2lsvgst_c8_kw[6], job->of1); fputs(f2lsvgst_c8_kw[4], job->of1); f2lsvgst_tag(job, 3); fputs(f2lsvgst_c8_kw[5], job->of1); fputs(f2lsvgst_c8_kw[0], job->of1); } /** Write one pattern definition to SVG output file. @param job Job structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_write_one_pattern( f2l_job_t *job, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { switch(pat->fn) { case 41: { f2lsvgst_pattern_41(job, psvg, pat); } break; case 42: { f2lsvgst_pattern_42(job, psvg, pat); } break; case 43: { f2lsvgst_pattern_43(job, psvg, pat); } break; case 44: { f2lsvgst_pattern_44(job, psvg, pat); } break; case 45: { f2lsvgst_pattern_45(job, psvg, pat); } break; case 46: { f2lsvgst_pattern_46(job, psvg, pat); } break; case 47: { f2lsvgst_pattern_47(job, psvg, pat); } break; case 48: { f2lsvgst_pattern_48(job, psvg, pat); } break; case 49: { f2lsvgst_pattern_49(job, psvg, pat); } break; case 50: { f2lsvgst_pattern_50(job, psvg, pat); } break; case 51: { f2lsvgst_pattern_51(job, psvg, pat); } break; case 52: { f2lsvgst_pattern_52(job, psvg, pat); } break; case 53: { f2lsvgst_pattern_53(job, psvg, pat); } break; case 54: { f2lsvgst_pattern_54(job, psvg, pat); } break; case 55: { f2lsvgst_pattern_55(job, psvg, pat); } break; case 56: { f2lsvgst_pattern_56(job, psvg, pat); } break; case 57: { f2lsvgst_pattern_57(job, psvg, pat); } break; case 58: { f2lsvgst_pattern_58(job, psvg, pat); } break; case 59: { f2lsvgst_pattern_59(job, psvg, pat); } break; case 60: { f2lsvgst_pattern_60(job, psvg, pat); } break; case 61: { f2lsvgst_pattern_61(job, psvg, pat); } break; case 62: { f2lsvgst_pattern_62(job, psvg, pat); } break; } } void f2lsvgst_write_patterns( f2l_job_t *job, f2l_svg_t *psvg ) { f2l_svg_fill_pattern_t *pat; if((psvg->sPatterns) && (psvg->iPatterns)) { dk3sto_it_reset(psvg->iPatterns); do { pat = (f2l_svg_fill_pattern_t *)dk3sto_it_next(psvg->iPatterns); if(pat) { f2lsvgst_write_one_pattern(job, psvg, pat); } } while(pat); } } /** Write one style to SVG output file. @param job Job structure. @param psvg SVG style collection. @param pst Style definition to write. */ static void f2lsvgst_write_one_style( f2l_job_t *job, f2l_svg_t *psvg, f2l_svg_style_t *pst ) { char const * const *rffn; /* Replacement font family name. */ double ts; /* Text size. */ double gw; /* Gap width in line styles. */ int ff; /* Font family */ if(pst->tf < 0) { pst->tf = 0; } if(pst->tf > 34) { pst->tf = 34; } fputs(f2lsvgst_c8_kw[112], job->of1); f2lsvgst_write_style_id(job, psvg, pst); fputs(f2lsvgst_c8_kw[113], job->of1); if((pst->flags) & DK3_SVG_FLAGS_FONT) { if((pst->flags) & DK3_SVG_FLAGS_PS_FONT) { /* Font family */ fputs(f2lsvgst_c8_kw[115], job->of1); fputs(dk3font_get_svg_family(pst->tf), job->of1); if(job->otherfonts) { /* PS family name. */ fputs(f2lsvgst_c8_kw[187], job->of1); fputs(dk3font_get_ps_family(pst->tf), job->of1); /* Replacement family names. */ rffn = dk3font_get_replacement_families(pst->tf); while(*rffn) { fputs(f2lsvgst_c8_kw[187], job->of1); fputs(*rffn, job->of1); rffn++; } } ff = dk3font_get_svg_features(pst->tf); switch(ff & DK3_FONT_FAMILY) { case DK3_FONT_TYPEWRITER: { fputs(f2lsvgst_c8_kw[118], job->of1); } break; case DK3_FONT_SANS_SERIF: { fputs(f2lsvgst_c8_kw[117], job->of1); } break; default: { fputs(f2lsvgst_c8_kw[116], job->of1); } break; } /* Font style */ if(ff & DK3_FONT_OBLIQUE) { fputs(f2lsvgst_c8_kw[121], job->of1); } else { if(ff & DK3_FONT_ITALIC) { fputs(f2lsvgst_c8_kw[120], job->of1); } else { #if 0 /* 2013-01-27: This is the default. */ fputs(f2lsvgst_c8_kw[119], job->of1); #endif } } /* Font weight */ ff = dk3font_get_svg_font_weight(pst->tf); fprintf(job->of1, f2lsvgst_c8_kw[122], ff); } else { /* Font family, style, weight */ switch(pst->tf) { case 5: { /* Typewriter */ fputs(f2lsvgst_c8_kw[125], job->of1); #if 0 /* 2013-01-27: This is the default. */ fputs(f2lsvgst_c8_kw[126], job->of1); fputs(f2lsvgst_c8_kw[128], job->of1); #endif } break; case 4: { /* Sans-serif */ fputs(f2lsvgst_c8_kw[124], job->of1); #if 0 /* 2013-01-27: This is the default. */ fputs(f2lsvgst_c8_kw[126], job->of1); fputs(f2lsvgst_c8_kw[128], job->of1); #endif } break; case 3: { /* Italic serif */ fputs(f2lsvgst_c8_kw[123], job->of1); fputs(f2lsvgst_c8_kw[127], job->of1); #if 0 /* 2013-01-27: This is the default. */ fputs(f2lsvgst_c8_kw[128], job->of1); #endif } break; case 2: { /* Bold serif */ fputs(f2lsvgst_c8_kw[123], job->of1); #if 0 /* 2013-01-27: This is the default. */ fputs(f2lsvgst_c8_kw[126], job->of1); #endif fputs(f2lsvgst_c8_kw[129], job->of1); } break; default: { /* Default font (serif) */ fputs(f2lsvgst_c8_kw[123], job->of1); #if 0 /* 2013-01-27: This is the default. */ fputs(f2lsvgst_c8_kw[126], job->of1); fputs(f2lsvgst_c8_kw[128], job->of1); #endif } break; } } /* Font size */ ts = pst->ts; if(0.0 < job->nts) { ts = ts * job->nts; } fprintf(job->of1, f2lsvgst_c8_kw[130], ts); } /* Text align */ if((pst->flags) & DK3_SVG_FLAGS_TEXT_ALIGN) { switch(pst->al) { case 2: { fputs(f2lsvgst_c8_kw[133], job->of1); } break; case 1: { fputs(f2lsvgst_c8_kw[132], job->of1); } break; default: { #if 0 /* 2013-01-27: This is the default. */ fputs(f2lsvgst_c8_kw[131], job->of1); #endif } break; } } /* Fill pattern or color fill */ if(pst->fp) { fputs(f2lsvgst_c8_kw[134], job->of1); f2lsvgst_write_pattern_id(job, psvg, pst->fp); fputs(f2lsvgst_c8_kw[135], job->of1); } else { if((pst->flags) & DK3_SVG_FLAGS_COLOR_FILL) { if((pst->flags) & DK3_SVG_FLAGS_FONT) { fprintf(job->of1, f2lsvgst_c8_kw[183], pst->fr, pst->fg, pst->fb); } else { fprintf(job->of1, f2lsvgst_c8_kw[136], pst->fr, pst->fg, pst->fb); } } else { /* No fill */ fputs(f2lsvgst_c8_kw[137], job->of1); } } /* Stroke color stroke */ if((pst->flags) & DK3_SVG_FLAGS_COLOR_STROKE) { fprintf(job->of1, f2lsvgst_c8_kw[138], pst->sr, pst->sg, pst->sb); } /* Stroke linewidth stroke-width */ if((pst->flags) & DK3_SVG_FLAGS_LINEWIDTH) { fprintf(job->of1, f2lsvgst_c8_kw[139], pst->lw); } /* Stroke linestyle stroke-dasharray */ if((pst->flags) & DK3_SVG_FLAGS_LINESTYLE) { if((pst->flags) & DK3_SVG_FLAGS_LINEWIDTH) { if(0 != pst->ls) { gw = f2lto_find_gap_length(job, pst->lw, pst->lsv); fputs(f2lsvgst_c8_kw[146], job->of1); switch(pst->ls) { case DK3_FIG_LS_DASH_TRIPLE_DOTTED: { fprintf( job->of1, f2lsvgst_c8_kw[152], pst->lsv, gw, pst->lw, gw, pst->lw, gw, pst->lw, gw ); } break; case DK3_FIG_LS_DASH_DOUBLE_DOTTED: { fprintf( job->of1, f2lsvgst_c8_kw[151], pst->lsv, gw, pst->lw, gw, pst->lw, gw ); } break; case DK3_FIG_LS_DASH_DOTTED: { fprintf( job->of1, f2lsvgst_c8_kw[150], pst->lsv, gw, pst->lw, gw ); } break; case DK3_FIG_LS_DOTTED: { fprintf( job->of1, f2lsvgst_c8_kw[149], pst->lw, gw ); } break; case DK3_FIG_LS_DASHED: { fprintf( job->of1, f2lsvgst_c8_kw[149], pst->lsv, gw ); } break; default: { fputs(f2lsvgst_c8_kw[148], job->of1); } break; } fputs(f2lsvgst_c8_kw[147], job->of1); } } } /* Linecap stroke-linecap */ if((pst->flags) & DK3_SVG_FLAGS_LINE_CAP) { if(DK3_FIG_LC_BUTT != pst->lc) { switch(pst->lc) { case DK3_FIG_LC_PROJECTING: { fputs(f2lsvgst_c8_kw[140], job->of1); } break; case DK3_FIG_LC_ROUND: { fputs(f2lsvgst_c8_kw[141], job->of1); } break; default: { #if 0 /* 2013-01-27: This is the default. */ fputs(f2lsvgst_c8_kw[142], job->of1); #endif } break; } } } /* Linejoin stroke-linejoin */ if((pst->flags) & DK3_SVG_FLAGS_LINE_JOIN) { switch(pst->lj) { case DK3_FIG_LJ_BEVEL: { fputs(f2lsvgst_c8_kw[143], job->of1); } break; case DK3_FIG_LJ_ROUND: { fputs(f2lsvgst_c8_kw[144], job->of1); } break; default: { #if 0 /* 2013-01-27: This is the default. */ fputs(f2lsvgst_c8_kw[145], job->of1); #endif if(job->miterlim) { fputs(f2lsvgst_c8_kw[185], job->of1); } } break; } } /* End */ fputs(f2lsvgst_c8_kw[114], job->of1); } /** Write attributes for one style to SVG output file. @param job Job structure. @param psvg SVG style collection. @param pst Style definition to write. */ static void f2lsvgst_write_attributes_for_one_style( f2l_job_t *job, f2l_svg_t *psvg, f2l_svg_style_t *pst ) { char const * const *rffn; /* Replacement font family names. */ int ff; /* Font family and flags. */ double ts; /* Font size. */ double gw; /* Gap width in line styles. */ if((pst->flags) & DK3_SVG_FLAGS_FONT) { ff = dk3font_get_svg_features(pst->tf); ts = pst->ts; if(0.0 < job->nts) { ts = ts * job->nts; } /* Font family, font style, font weight, text size. */ if((pst->flags) & DK3_SVG_FLAGS_PS_FONT) { fputs(f2lsvgst_c8_kw[153], job->of1); fputs(dk3font_get_svg_family(pst->tf), job->of1); if(job->otherfonts) { /* PS family name. */ fputs(f2lsvgst_c8_kw[188], job->of1); fputs(dk3font_get_ps_family(pst->tf), job->of1); /* Replacement family names. */ rffn = dk3font_get_replacement_families(pst->tf); while(*rffn) { fputs(f2lsvgst_c8_kw[188], job->of1); fputs(*rffn, job->of1); rffn++; } } switch(ff & DK3_FONT_FAMILY) { case DK3_FONT_TYPEWRITER: { fputs(f2lsvgst_c8_kw[156], job->of1); } break; case DK3_FONT_SANS_SERIF: { fputs(f2lsvgst_c8_kw[155], job->of1); } break; default: { fputs(f2lsvgst_c8_kw[154], job->of1); } break; } if(ff & DK3_FONT_OBLIQUE) { fputs(f2lsvgst_c8_kw[157], job->of1); } else { if(ff & DK3_FONT_ITALIC) { fputs(f2lsvgst_c8_kw[158], job->of1); } } fprintf( job->of1, f2lsvgst_c8_kw[159], dk3font_get_svg_font_weight(pst->tf) ); } else { switch(pst->tf) { case 5: { /* typewriter */ fputs(f2lsvgst_c8_kw[163], job->of1); } break; case 4: { /* sans-serif */ fputs(f2lsvgst_c8_kw[162], job->of1); } break; case 3: { /* serif italic */ fputs(f2lsvgst_c8_kw[161], job->of1); fputs(f2lsvgst_c8_kw[158], job->of1); } break; case 2: { /* serif bold */ fputs(f2lsvgst_c8_kw[161], job->of1); fputs(f2lsvgst_c8_kw[164], job->of1); } break; default: { /* serif */ fputs(f2lsvgst_c8_kw[161], job->of1); } break; } } fprintf(job->of1, f2lsvgst_c8_kw[160], ts); /* Text align. */ if((pst->flags) & DK3_SVG_FLAGS_TEXT_ALIGN) { switch(pst->al) { case 2: { fputs(f2lsvgst_c8_kw[166], job->of1); } break; case 1: { fputs(f2lsvgst_c8_kw[165], job->of1); } break; } } } /* Fill pattern or color. */ if(pst->fp) { fputs(f2lsvgst_c8_kw[167], job->of1); f2lsvgst_write_pattern_id(job, psvg, pst->fp); fputs(f2lsvgst_c8_kw[168], job->of1); } else { if((pst->flags) & DK3_SVG_FLAGS_COLOR_FILL) { if((pst->flags) & DK3_SVG_FLAGS_FONT) { fprintf(job->of1, f2lsvgst_c8_kw[169], pst->fr, pst->fg, pst->fb); } else { fprintf(job->of1, f2lsvgst_c8_kw[184], pst->fr, pst->fg, pst->fb); } } else { fputs(f2lsvgst_c8_kw[170], job->of1); } } /* Stroke color */ if((pst->flags) & DK3_SVG_FLAGS_COLOR_STROKE) { fprintf(job->of1, f2lsvgst_c8_kw[171], pst->sr, pst->sg, pst->sb); } /* Stroke linewidth. */ if((pst->flags) & DK3_SVG_FLAGS_LINEWIDTH) { fprintf(job->of1, f2lsvgst_c8_kw[172], pst->lw); } /* Stroke linestyle. */ if((pst->flags) & DK3_SVG_FLAGS_LINESTYLE) { if((pst->flags) & DK3_SVG_FLAGS_LINEWIDTH) { gw = f2lto_find_gap_length(job, pst->lw, pst->lsv); switch(pst->ls) { case DK3_FIG_LS_DASH_TRIPLE_DOTTED: { fprintf( job->of1, f2lsvgst_c8_kw[176], pst->lsv, gw, pst->lw, gw, pst->lw, gw, pst->lw, gw ); } break; case DK3_FIG_LS_DASH_DOUBLE_DOTTED: { fprintf( job->of1, f2lsvgst_c8_kw[175], pst->lsv, gw, pst->lw, gw, pst->lw, gw ); } break; case DK3_FIG_LS_DASH_DOTTED: { fprintf( job->of1, f2lsvgst_c8_kw[174], pst->lsv, gw, pst->lw, gw ); } break; case DK3_FIG_LS_DOTTED: { fprintf( job->of1, f2lsvgst_c8_kw[173], pst->lw, gw ); } break; case DK3_FIG_LS_DASHED: { fprintf( job->of1, f2lsvgst_c8_kw[173], pst->lsv, gw ); } break; } } } /* Linecap. */ if((pst->flags) & DK3_SVG_FLAGS_LINE_CAP) { switch(pst->lc) { case DK3_FIG_LC_PROJECTING: { fputs(f2lsvgst_c8_kw[178], job->of1); } break; case DK3_FIG_LC_ROUND: { fputs(f2lsvgst_c8_kw[177], job->of1); } break; } } /* Linejoin. */ if((pst->flags) & DK3_SVG_FLAGS_LINE_JOIN) { switch(pst->lj) { case DK3_FIG_LJ_BEVEL: { fputs(f2lsvgst_c8_kw[180], job->of1); } break; case DK3_FIG_LJ_ROUND: { fputs(f2lsvgst_c8_kw[179], job->of1); } break; default: { if(job->miterlim) { fputs(f2lsvgst_c8_kw[186], job->of1); } } break; } } } void f2lsvgst_write_style_for_object( f2l_job_t *job, dk3_fig_drawing_t *drw, f2l_svg_t *psvg, dk3_fig_obj_t *pobj ) { f2l_svg_style_t *pst; #line 3320 "f2lsvgst.ctr" if((job) && (drw) && (psvg) && (pobj)) { pst = (f2l_svg_style_t *)(pobj->dsd); if(pst) { #line 3323 "f2lsvgst.ctr" if(job->css) { #line 3324 "f2lsvgst.ctr" fputs(f2lsvgst_c8_kw[181], job->of1); f2lsvgst_write_style_id(job, psvg, pst); fputs(f2lsvgst_c8_kw[182], job->of1); } else { #line 3328 "f2lsvgst.ctr" f2lsvgst_write_attributes_for_one_style(job, psvg, pst); } } else { #line 3331 "f2lsvgst.ctr" } } else { #line 3333 "f2lsvgst.ctr" } #line 3334 "f2lsvgst.ctr" } void f2lsvgst_write_styles( f2l_job_t *job, f2l_svg_t *psvg ) { f2l_svg_style_t *pst; if((psvg->sStyles) && (psvg->iStyles)) { dk3sto_it_reset(psvg->iStyles); do { pst = (f2l_svg_style_t *)dk3sto_it_next(psvg->iStyles); if(pst) { f2lsvgst_write_one_style(job, psvg, pst); } } while(pst); } }