/* WARNING: This file was generated by dkct. 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 */ /* Copyright (C) 2013-2017, Dirk Krause Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above opyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the author nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** @file f2lsvgst.c The f2lsvgst module. */ #line 410 "f2lsvgst.ctr" #include "f2lsvgst.h" #line 416 "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 889 "f2lsvgst.ctr" }; /** Compare two integer values. @param x Left value. @param y Right value. @return Comparison result. */ int f2lsvgst_compare_int(int x, int y) { int back = 0; #line 903 "f2lsvgst.ctr" if(x > y) { back = 1; } else { if(x < y) { back = -1; } } #line 910 "f2lsvgst.ctr" return back; } int f2lsvgst_compare_pattern(void const *l, void const *r, int cr) { int back = 0; f2l_svg_fill_pattern_t const *pl; f2l_svg_fill_pattern_t const *pr; 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; } int f2lsvgst_compare_object_styles(void const *l, void const *r, int cr) { f2l_svg_style_t const *pl; f2l_svg_style_t const *pr; int back = 0; #line 960 "f2lsvgst.ctr" if(l) { if(r) { pl = (f2l_svg_style_t const *)l; pr = (f2l_svg_style_t const *)r; /* Stroke color. */ #line 966 "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 970 "f2lsvgst.ctr" if(0 == back) { back = f2lsvgst_compare_int(pl->sg, pr->sg); #line 973 "f2lsvgst.ctr" if(0 == back) { back = f2lsvgst_compare_int(pl->sb, pr->sb); #line 976 "f2lsvgst.ctr" } } } else { back = 1; #line 980 "f2lsvgst.ctr" } } else { if((pr->flags) & DK3_SVG_FLAGS_COLOR_STROKE) { back = -1; #line 984 "f2lsvgst.ctr" } } /* Line width. */ if(0 == back) { #line 989 "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 993 "f2lsvgst.ctr" } else { if(pr->lw > (pl->lw + 1.0e-6)) { back = -1; #line 996 "f2lsvgst.ctr" } } } else { back = 1; #line 1000 "f2lsvgst.ctr" } } else { if((pr->flags) & DK3_SVG_FLAGS_LINEWIDTH) { back = -1; #line 1004 "f2lsvgst.ctr" } } } /* Line cap. */ if(0 == back) { #line 1010 "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 1014 "f2lsvgst.ctr" } else { back = 1; #line 1016 "f2lsvgst.ctr" } } else { if((pr->flags) & DK3_SVG_FLAGS_LINE_CAP) { back = -1; #line 1020 "f2lsvgst.ctr" } } } /* Line join. */ if(0 == back) { #line 1026 "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 1030 "f2lsvgst.ctr" } else { back = 1; #line 1032 "f2lsvgst.ctr" } } else { if((pr->flags) & DK3_SVG_FLAGS_LINE_JOIN) { back = -1; #line 1036 "f2lsvgst.ctr" } } } /* Line style. */ if(0 == back) { #line 1042 "f2lsvgst.ctr" if((pl->flags) & DK3_SVG_FLAGS_LINESTYLE) { if((pr->flags) & DK3_SVG_FLAGS_LINESTYLE) { if(pl->ls > pr->ls) { back = 1; #line 1046 "f2lsvgst.ctr" } else { if(pr->ls > pl->ls) { back = -1; #line 1049 "f2lsvgst.ctr" } else { if((0 != pl->ls) && (0 != pr->ls)) { if(pl->lsv > (pr->lsv + 1.0e-6)) { back = 1; #line 1053 "f2lsvgst.ctr" } else { if(pr->lsv > (pl->lsv + 1.0e-6)) { back = -1; #line 1056 "f2lsvgst.ctr" } } } } } } else { back = 1; #line 1063 "f2lsvgst.ctr" } } else { if((pr->flags) & DK3_SVG_FLAGS_LINESTYLE) { back = -1; #line 1067 "f2lsvgst.ctr" } } } /* Fill pattern or fill color. */ if(0 == back) { #line 1073 "f2lsvgst.ctr" if(pl->fp) { if(pr->fp) { back = f2lsvgst_compare_pattern((void *)(pl->fp),(void *)(pr->fp),0); #line 1078 "f2lsvgst.ctr" } else { back = 1; #line 1080 "f2lsvgst.ctr" } } else { if(pr->fp) { back = -1; #line 1084 "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 1093 "f2lsvgst.ctr" if(0 == back) { back = f2lsvgst_compare_int(pl->fg, pr->fg); #line 1096 "f2lsvgst.ctr" if(0 == back) { back = f2lsvgst_compare_int(pl->fb, pr->fb); #line 1099 "f2lsvgst.ctr" } } } else { back = 1; #line 1103 "f2lsvgst.ctr" } } else { if((pr->flags) & DK3_SVG_FLAGS_COLOR_FILL) { back = -1; #line 1107 "f2lsvgst.ctr" } } } } } } /* Font. */ if(0 == back) { #line 1116 "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 1122 "f2lsvgst.ctr" if(0 == back) { if(pl->ts > (pr->ts + 1.0e-6)) { back = 1; #line 1125 "f2lsvgst.ctr" } else { if(pl->ts < (pr->ts - 1.0e-6)) { back = -1; #line 1128 "f2lsvgst.ctr" } } } } else { back = 1; #line 1133 "f2lsvgst.ctr" } } else { if((pr->flags) & DK3_SVG_FLAGS_PS_FONT) { back = -1; #line 1137 "f2lsvgst.ctr" } else { back = f2lsvgst_compare_int(pl->tf, pr->tf); #line 1140 "f2lsvgst.ctr" if(0 == back) { if(pl->ts > (pr->ts + 1.0e-6)) { back = 1; #line 1143 "f2lsvgst.ctr" } else { if(pl->ts < (pr->ts - 1.0e-6)) { back = -1; #line 1146 "f2lsvgst.ctr" } } } } } } else { back = 1; #line 1153 "f2lsvgst.ctr" } } else { if((pr->flags) & DK3_SVG_FLAGS_FONT) { back = -1; #line 1157 "f2lsvgst.ctr" } } } /* Text align. */ if(0 == back) { #line 1163 "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 1167 "f2lsvgst.ctr" } else { back = 1; #line 1169 "f2lsvgst.ctr" } } else { if((pr->flags) & DK3_SVG_FLAGS_TEXT_ALIGN) { back = -1; #line 1173 "f2lsvgst.ctr" } } } } else { #line 1177 "f2lsvgst.ctr" back = 1; } } else { if(r) { back = -1; #line 1182 "f2lsvgst.ctr" } } #line 1184 "f2lsvgst.ctr" return back; } void f2lsvgst_pattern_delete(f2l_svg_fill_pattern_t *pa) { #line 1193 "f2lsvgst.ctr" if(pa) { #line 1195 "f2lsvgst.ctr" } dk3_delete(pa); #line 1198 "f2lsvgst.ctr" } f2l_svg_fill_pattern_t * f2lsvgst_pattern_new(f2l_svg_t *psvg) { f2l_svg_fill_pattern_t *back = NULL; #line 1207 "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 1218 "f2lsvgst.ctr" return back; } void f2lsvgst_style_initialize(f2l_svg_style_t *st) { #line 1227 "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 1244 "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 1295 "f2lsvgst.ctr" if(st) { f2lsvgst_style_initialize(st); dk3_delete(st); } #line 1299 "f2lsvgst.ctr" } f2l_svg_style_t * f2lsvgst_style_new(f2l_svg_t *psvg) { f2l_svg_style_t *back = NULL; #line 1308 "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 1316 "f2lsvgst.ctr" return back; } void f2lsvgst_delete(f2l_svg_t *psvg) { f2l_svg_style_t *st; f2l_svg_fill_pattern_t *pa; #line 1327 "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 1354 "f2lsvgst.ctr" } f2l_svg_t * f2lsvgst_new_app(dk3_app_t *app) { f2l_svg_t *back = NULL; size_t i; int ok = 0; #line 1365 "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 1399 "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 1412 "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 1421 "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 1443 "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 1453 "f2lsvgst.ctr" if((psvg) && (src)) { back = (f2l_svg_style_t *)dk3sto_it_find_like( psvg->iStyles, (void *)src, 0 ); if(!(back)) { #line 1458 "f2lsvgst.ctr" if(0UL != (1UL + psvg->nStyles)) { #line 1459 "f2lsvgst.ctr" back = f2lsvgst_style_new(psvg); if(back) { #line 1461 "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 1470 "f2lsvgst.ctr" } } else { psvg->ec = DK3_ERROR_MATH_OVERFLOW; } } else { #line 1475 "f2lsvgst.ctr" } } #line 1477 "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 1491 "f2lsvgst.ctr" if((psvg) && (pst) && (ppat)) { if(!(pst->fp)) { pst->fp = f2lsvgst_pattern_add(psvg, ppat); if(pst->fp) { back = 1; } } } #line 1499 "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 1514 "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 1529 "f2lsvgst.ctr" } void f2lsvgst_style_set_line_width( f2l_svg_style_t *pst, double lw ) { #line 1540 "f2lsvgst.ctr" if(pst) { pst->lw = lw; pst->flags |= (DK3_SVG_FLAGS_LINEWIDTH); } #line 1544 "f2lsvgst.ctr" } void f2lsvgst_style_set_line_style( f2l_svg_style_t *pst, int ls, double lsv ) { #line 1556 "f2lsvgst.ctr" if(pst) { pst->ls = ls; pst->lsv = lsv; pst->flags|= (DK3_SVG_FLAGS_LINESTYLE); } #line 1560 "f2lsvgst.ctr" } void f2lsvgst_style_set_line_color( f2l_svg_style_t *pst, int r, int g, int b ) { #line 1573 "f2lsvgst.ctr" if(pst) { pst->sr = r; pst->sg = g; pst->sb = b; pst->flags |= (DK3_SVG_FLAGS_COLOR_STROKE); } #line 1577 "f2lsvgst.ctr" } void f2lsvgst_style_set_fill_color( f2l_svg_style_t *pst, int r, int g, int b ) { #line 1590 "f2lsvgst.ctr" if(pst) { pst->fr = r; pst->fg = g; pst->fb = b; pst->flags |= (DK3_SVG_FLAGS_COLOR_FILL); } #line 1594 "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); } void f2lsvgst_write_pattern_id( f2l_job_t *job, dk3_fig_drawing_t *drw, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { #line 1721 "f2lsvgst.ctr" fputs(f2lsvgst_c8_kw[8], job->of1); f2lsvgst_write_id(job, pat->pn, psvg->nPatterns); #line 1724 "f2lsvgst.ctr" } void f2lsvgst_write_style_id( f2l_job_t *job, dk3_fig_drawing_t *drw, f2l_svg_t *psvg, f2l_svg_style_t *pst ) { #line 1737 "f2lsvgst.ctr" fputs(f2lsvgst_c8_kw[111], job->of1); f2lsvgst_write_id(job, pst->sn, psvg->nStyles); #line 1740 "f2lsvgst.ctr" } /** Write opening pattern tag. @param job Job structure. @param drw Drawing 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, dk3_fig_drawing_t *drw, 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, drw, psvg, pat); fprintf(job->of1, f2lsvgst_c8_kw[9], w, h); } /** Write opening pattern tag. @param job Job structure. @param drw Drawing structure. @param psvg SVG style collection. @param pat Pattern to write. @param w Pattern width. @param h Pattern height. */ static void f2lsvgst_pattern_background( f2l_job_t *job, dk3_fig_drawing_t *drw, f2l_svg_t *psvg, 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 drw Drawing structure. @param psvg SVG style collection. @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, dk3_fig_drawing_t *drw, f2l_svg_t *psvg, 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 drw Drawing structure. @param psvg SVG style collection. @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, dk3_fig_drawing_t *drw, f2l_svg_t *psvg, 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 drw Drawing structure. @param psvg SVG style collection. @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, dk3_fig_drawing_t *drw, f2l_svg_t *psvg, 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 drw Drawing structure. @param psvg SVG style collection. @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, dk3_fig_drawing_t *drw, f2l_svg_t *psvg, 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 drw Drawing structure. @param psvg SVG style collection. @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, dk3_fig_drawing_t *drw, f2l_svg_t *psvg, 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 drw Drawing structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_foreground_circle_lcr( f2l_job_t *job, dk3_fig_drawing_t *drw, f2l_svg_t *psvg, 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 drw Drawing structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_41( f2l_job_t *job, dk3_fig_drawing_t *drw, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, drw, psvg, pat, 7.2, 4.16); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, drw, psvg, pat, 7.2, 4.16); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_line(job, drw, psvg, pat, 15); f2lsvgst_pattern_foreground_line(job, drw, psvg, pat, 16); f2lsvgst_pattern_foreground_line(job, drw, psvg, 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 drw Drawing structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_42( f2l_job_t *job, dk3_fig_drawing_t *drw, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, drw, psvg, pat, 7.2, 4.16); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, drw, psvg, pat, 7.2, 4.16); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_line(job, drw, psvg, pat, 19); f2lsvgst_pattern_foreground_line(job, drw, psvg, pat, 20); f2lsvgst_pattern_foreground_line(job, drw, psvg, 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 drw Drawing structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_43( f2l_job_t *job, dk3_fig_drawing_t *drw, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, drw, psvg, pat, 7.2, 4.16); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, drw, psvg, pat, 7.2, 4.16); /* Pattern contents 2: lines. */ #if 1 f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 23); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 24); #else f2lsvgst_pattern_foreground_line(job, drw, psvg, pat, 15); f2lsvgst_pattern_foreground_line(job, drw, psvg, pat, 16); f2lsvgst_pattern_foreground_line(job, drw, psvg, pat, 17); f2lsvgst_pattern_foreground_line(job, drw, psvg, pat, 19); f2lsvgst_pattern_foreground_line(job, drw, psvg, pat, 20); f2lsvgst_pattern_foreground_line(job, drw, psvg, 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 drw Drawing structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_44( f2l_job_t *job, dk3_fig_drawing_t *drw, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, drw, psvg, pat, 10.18, 10.18); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, drw, psvg, pat, 10.18, 10.18); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_line(job, drw, psvg, pat, 25); f2lsvgst_pattern_foreground_line(job, drw, psvg, pat, 26); f2lsvgst_pattern_foreground_line(job, drw, psvg, 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 drw Drawing structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_45( f2l_job_t *job, dk3_fig_drawing_t *drw, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, drw, psvg, pat, 10.18, 10.18); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, drw, psvg, pat, 10.18, 10.18); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_line(job, drw, psvg, pat, 28); f2lsvgst_pattern_foreground_line(job, drw, psvg, pat, 29); f2lsvgst_pattern_foreground_line(job, drw, psvg, 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 drw Drawing structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_46( f2l_job_t *job, dk3_fig_drawing_t *drw, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, drw, psvg, pat, 10.18, 10.18); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, drw, psvg, pat, 10.18, 10.18); /* Pattern contents 2: lines. */ #if 1 f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 31); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 32); #else f2lsvgst_pattern_foreground_line(job, drw, psvg, pat, 25); f2lsvgst_pattern_foreground_line(job, drw, psvg, pat, 26); f2lsvgst_pattern_foreground_line(job, drw, psvg, pat, 27); f2lsvgst_pattern_foreground_line(job, drw, psvg, pat, 28); f2lsvgst_pattern_foreground_line(job, drw, psvg, pat, 29); f2lsvgst_pattern_foreground_line(job, drw, psvg, 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 drw Drawing structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_47( f2l_job_t *job, dk3_fig_drawing_t *drw, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, drw, psvg, pat, 28.8, 14.4); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, drw, psvg, pat, 28.8, 14.4); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 33); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 34); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 35); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 36); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 37); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 38); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, 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 drw Drawing structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_48( f2l_job_t *job, dk3_fig_drawing_t *drw, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, drw, psvg, pat, 14.4, 28.8); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, drw, psvg, pat, 14.4, 28.8); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 40); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 41); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 42); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 43); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 44); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 45); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, 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 drw Drawing structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_49( f2l_job_t *job, dk3_fig_drawing_t *drw, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, drw, psvg, pat, 3.6, 3.6); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, drw, psvg, pat, 3.6, 3.6); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 47); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, 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 drw Drawing structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_50( f2l_job_t *job, dk3_fig_drawing_t *drw, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, drw, psvg, pat, 3.6, 3.6); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, drw, psvg, pat, 3.6, 3.6); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 49); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, 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 drw Drawing structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_51( f2l_job_t *job, dk3_fig_drawing_t *drw, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, drw, psvg, pat, 3.6, 3.6); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, drw, psvg, pat, 3.6, 3.6); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_polygon_lcr(job, drw, psvg, 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 drw Drawing structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_52( f2l_job_t *job, dk3_fig_drawing_t *drw, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, drw, psvg, pat, 14.4, 28.8); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, drw, psvg, pat, 14.4, 28.8); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 53); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 54); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 55); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 56); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 57); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 58); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 59); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 60); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, 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 drw Drawing structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_53( f2l_job_t *job, dk3_fig_drawing_t *drw, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, drw, psvg, pat, 14.4, 28.8); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, drw, psvg, pat, 14.4, 28.8); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 62); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 63); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 64); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 65); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 66); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 67); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 68); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 69); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, 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 drw Drawing structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_54( f2l_job_t *job, dk3_fig_drawing_t *drw, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, drw, psvg, pat, 28.8, 14.4); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, drw, psvg, pat, 28.8, 14.4); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 71); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 72); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 73); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 74); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 75); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 76); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 77); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 78); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, 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 drw Drawing structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_55( f2l_job_t *job, dk3_fig_drawing_t *drw, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, drw, psvg, pat, 28.8, 14.4); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, drw, psvg, pat, 28.8, 14.4); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 80); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 81); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 82); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 83); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 84); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 85); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 86); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 87); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, 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 drw Drawing structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_56( f2l_job_t *job, dk3_fig_drawing_t *drw, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, drw, psvg, pat, 14.54, 7.4); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, drw, psvg, pat, 14.54, 7.4); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_path_lcr(job, drw, psvg, pat, 90); f2lsvgst_pattern_foreground_path_lcr(job, drw, psvg, pat, 91); f2lsvgst_pattern_foreground_path_lcr(job, drw, psvg, pat, 92); f2lsvgst_pattern_foreground_path_lcr(job, drw, psvg, pat, 93); f2lsvgst_pattern_foreground_path_lcr(job, drw, psvg, 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, dk3_fig_drawing_t *drw, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, drw, psvg, pat, 7.2, 7.2); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, drw, psvg, pat, 7.2, 7.2); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_path_lcr(job, drw, psvg, pat, 95); f2lsvgst_pattern_foreground_path_lcr(job, drw, psvg, pat, 96); f2lsvgst_pattern_foreground_path_lcr(job, drw, psvg, pat, 97); f2lsvgst_pattern_foreground_path_lcr(job, drw, psvg, pat, 98); f2lsvgst_pattern_foreground_path_lcr(job, drw, psvg, 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 drw Drawing structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_58( f2l_job_t *job, dk3_fig_drawing_t *drw, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, drw, psvg, pat, 14.4, 14.4); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, drw, psvg, pat, 14.4, 14.4); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_circle_lcr(job, drw, psvg, 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 drw Drawing structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_59( f2l_job_t *job, dk3_fig_drawing_t *drw, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, drw, psvg, pat, 21.6, 12.47); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, drw, psvg, pat, 21.6, 12.47); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_polygon_lcr(job, drw, psvg, pat, 103); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 104); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, pat, 105); f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, 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 drw Drawing structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_60( f2l_job_t *job, dk3_fig_drawing_t *drw, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, drw, psvg, pat, 14.4, 14.4); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, drw, psvg, pat, 14.4, 14.4); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_polygon_lcr_l2(job, drw, psvg, 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 drw Drawing structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_61( f2l_job_t *job, dk3_fig_drawing_t *drw, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, drw, psvg, pat, 7.2, 7.2); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, drw, psvg, pat, 7.2, 7.2); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, 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 drw Drawing structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_pattern_62( f2l_job_t *job, dk3_fig_drawing_t *drw, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { /* Opening pattern tag. */ f2lsvgst_write_opening_pattern_tag(job, drw, psvg, pat, 7.2, 7.2); /* Pattern contents 1: background. */ f2lsvgst_pattern_background(job, drw, psvg, pat, 7.2, 7.2); /* Pattern contents 2: lines. */ f2lsvgst_pattern_foreground_line_lcr(job, drw, psvg, 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 drw Drawing structure. @param psvg SVG style collection. @param pat Pattern to write. */ static void f2lsvgst_write_one_pattern( f2l_job_t *job, dk3_fig_drawing_t *drw, f2l_svg_t *psvg, f2l_svg_fill_pattern_t *pat ) { switch(pat->fn) { case 41: { f2lsvgst_pattern_41(job, drw, psvg, pat); } break; case 42: { f2lsvgst_pattern_42(job, drw, psvg, pat); } break; case 43: { f2lsvgst_pattern_43(job, drw, psvg, pat); } break; case 44: { f2lsvgst_pattern_44(job, drw, psvg, pat); } break; case 45: { f2lsvgst_pattern_45(job, drw, psvg, pat); } break; case 46: { f2lsvgst_pattern_46(job, drw, psvg, pat); } break; case 47: { f2lsvgst_pattern_47(job, drw, psvg, pat); } break; case 48: { f2lsvgst_pattern_48(job, drw, psvg, pat); } break; case 49: { f2lsvgst_pattern_49(job, drw, psvg, pat); } break; case 50: { f2lsvgst_pattern_50(job, drw, psvg, pat); } break; case 51: { f2lsvgst_pattern_51(job, drw, psvg, pat); } break; case 52: { f2lsvgst_pattern_52(job, drw, psvg, pat); } break; case 53: { f2lsvgst_pattern_53(job, drw, psvg, pat); } break; case 54: { f2lsvgst_pattern_54(job, drw, psvg, pat); } break; case 55: { f2lsvgst_pattern_55(job, drw, psvg, pat); } break; case 56: { f2lsvgst_pattern_56(job, drw, psvg, pat); } break; case 57: { f2lsvgst_pattern_57(job, drw, psvg, pat); } break; case 58: { f2lsvgst_pattern_58(job, drw, psvg, pat); } break; case 59: { f2lsvgst_pattern_59(job, drw, psvg, pat); } break; case 60: { f2lsvgst_pattern_60(job, drw, psvg, pat); } break; case 61: { f2lsvgst_pattern_61(job, drw, psvg, pat); } break; case 62: { f2lsvgst_pattern_62(job, drw, psvg, pat); } break; } } void f2lsvgst_write_patterns( f2l_job_t *job, dk3_fig_drawing_t *drw, 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, drw, psvg, pat); } } while(pat); } } /** Write one style to SVG output file. @param job Job structure. @param drw Drawing structure. @param psvg SVG style collection. @param pst Style definition to write. */ static void f2lsvgst_write_one_style( f2l_job_t *job, dk3_fig_drawing_t *drw, 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, drw, 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, drw, 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 drw Drawing structure. @param psvg SVG style collection. @param pst Style definition to write. */ static void f2lsvgst_write_attributes_for_one_style( f2l_job_t *job, dk3_fig_drawing_t *drw, 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, drw, 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 3429 "f2lsvgst.ctr" if((job) && (drw) && (psvg) && (pobj)) { pst = (f2l_svg_style_t *)(pobj->dsd); if(pst) { #line 3432 "f2lsvgst.ctr" if(job->css) { #line 3433 "f2lsvgst.ctr" fputs(f2lsvgst_c8_kw[181], job->of1); f2lsvgst_write_style_id(job, drw, psvg, pst); fputs(f2lsvgst_c8_kw[182], job->of1); } else { #line 3437 "f2lsvgst.ctr" f2lsvgst_write_attributes_for_one_style(job, drw, psvg, pst); } } else { #line 3440 "f2lsvgst.ctr" } } else { #line 3442 "f2lsvgst.ctr" } #line 3443 "f2lsvgst.ctr" } void f2lsvgst_write_styles( f2l_job_t *job, dk3_fig_drawing_t *drw, 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, drw, psvg, pst); } } while(pst); } }