1 /*
2 Copyright (C) 2012-2021, Dirk Krause
3 SPDX-License-Identifier: BSD-3-Clause
4 */
5
6 /*
7 WARNING: This file was generated by the dkct program (see
8 http://dktools.sourceforge.net/ for details).
9 Changes you make here will be lost if dkct is run again!
10 You should modify the original source and run dkct on it.
11 Original source: f2leps.ctr
12 */
13
14 /** @file f2leps.c The f2leps module.
15 */
16
17
18 #include <libdk3c/dk3all.h>
19 #include <libdk3c/dk3bezcu.h>
20 #include <fig2lat/fig2lat.h>
21 #include <fig2lat/f2lud.h>
22 #include <fig2lat/f2lsvg.h>
23 #include <fig2lat/f2leps.h>
24 #include <libdk3fig/dk3figto.h>
25 #if 0
26 #include <libdk3c/dkt-version.h>
27 #endif
28 #include <libdk4base/dk4vers.h>
29 #include <libdk3fig/dk3font.h>
30 #include <libdk3bmeps/dk3bm.h>
31 #include <libdk3bmeps/dk3bmeps.h>
32 #include <libdk3c/dk3unused.h>
33
34
35
36
37
38
39
40 /** Drawing-related information for EPS output.
41 */
42 typedef struct {
43 char const *shortOutFile; /**< Short output file name. */
44 dk3_sto_t *sFonts; /**< Fonts and sizes (dk3_fig_font_t). */
45 dk3_sto_it_t *iFonts; /**< Fonts storage iterator. */
46 int *fonts; /**< 35 flags: Font used. */
47 unsigned long nFonts; /**< Number of fonts in sFonts. */
48 int havetext; /**< Flag: Text to show as PS text. */
49 int alignedright; /**< Flag: Right-aligned text found. */
50 int alignedcenter; /**< Flag: Centered text found. */
51 int dictsize; /**< Size of dictionary. */
52 } f2leps_drawing_info_t;
53
54
55
56 #if 0
57 /** Font reencoding to write ISO-LATIN-1 encoded strings.
58 */
59 static char const * const f2leps_font_reencode_2[] = {
60 "/FontReEncode\t\t% originalname encodedname --",
61 "{",
62 " 5 dict begin /nn exch def /an exch def an findfont dup",
63 " length dict /nf exch def",
64 " {",
65 " 1 index /FID ne",
66 " { nf 3 1 roll put }",
67 " { pop pop }",
68 " ifelse",
69 " }",
70 " forall",
71 " nf /Encoding ISOLatin1Encoding put nn nf end definefont pop",
72 "}",
73 "def",
74 NULL
75
76 };
77 #else
78 /** Font reencoding to write ISO-LATIN-1 encoded strings.
79 */
80 static char const * const f2leps_font_reencode_2[] = {
81 "/FontReEncode\t\t\t\t% originalname newname --",
82 "{\t\t\t\t\t% on nn",
83 " exch\t\t\t\t\t% nn on",
84 " findfont\t\t\t\t% nn of",
85 " dup\t\t\t\t\t% nn of of",
86 " length\t\t\t\t% nn of length",
87 " 1 add\t\t\t\t\t% nn of length",
88 " dict\t\t\t\t\t% nn of nf",
89 " exch\t\t\t\t\t% nn nf of",
90 " {\t\t\t\t\t% nn nf key value",
91 " 1 index\t\t\t\t% nn nf key value key",
92 " /FID eq\t\t\t\t% nn nf key value flag",
93 " {\t\t\t\t\t% nn nf key value",
94 " pop pop\t\t\t\t% nn nf",
95 " }",
96 " {\t\t\t\t\t% nn nf key value",
97 " 2 index\t\t\t\t% nn nf key value nf",
98 " 3 1 roll\t\t\t\t% nn nf nf key value",
99 " put\t\t\t\t% nn nf",
100 " }",
101 " ifelse\t\t\t\t% nn nf",
102 " }",
103 " forall\t\t\t\t% nn nf",
104 " dup\t\t\t\t\t% nn nf nf",
105 " /Encoding ISOLatin1Encoding put\t% nn nf",
106 " definefont\t\t\t\t% nf",
107 " pop\t\t\t\t\t%",
108 "}",
109 "def",
110 NULL
111
112 };
113 #endif
114
115 #if 0
116
117 /** Procedure for right aligned text.
118 */
119 static char const * const f2leps_right_aligned_text[] = {
120 "/TextAlignedRight \t% text --",
121 "{",
122 " currentpoint\t\t% text x y",
123 " 3 -1 roll\t\t% x y text",
124 " dup\t\t\t% x y text text",
125 " true charpath\t\t% x y text",
126 " flattenpath\t\t% x y text",
127 " pathbbox\t\t% x y text x1 y1 x2 y2",
128 " pop exch pop\t\t% x y text x1 x2",
129 " exch sub abs\t\t% x y text length",
130 " newpath 4 -2 roll\t% text length x y",
131 " moveto\t\t% text length",
132 " 0 exch sub\t\t% text distance",
133 " 0 rmoveto\t\t% text",
134 " show\t\t\t%",
135 "} def",
136 NULL
137
138 };
139
140
141
142 /** Procedure for centered text.
143 */
144 static char const * const f2leps_centered_aligned_text[] = {
145 "/TextAlignedCentered \t% text --",
146 "{",
147 " currentpoint\t\t% text x y",
148 " 3 -1 roll\t\t% x y text",
149 " dup\t\t\t% x y text text",
150 " true charpath\t\t% x y text",
151 " flattenpath\t\t% x y text",
152 " pathbbox\t\t% x y text x1 y1 x2 y2",
153 " pop exch pop\t\t% x y text x1 x2",
154 " exch sub abs\t\t% x y text length",
155 " newpath 4 -2 roll\t% text length x y",
156 " moveto\t\t% text length",
157 " 0.5 mul\t\t% text distance",
158 " 0 exch sub\t\t% text xshift",
159 " 0 rmoveto\t\t% text",
160 " show\t\t\t%",
161 "} def",
162 NULL
163
164 };
165
166 #else
167
168 /** Procedure for right aligned text.
169 */
170 static char const * const f2leps_right_aligned_text[] = {
171 "/TextAlignedRight \t% x y text --",
172 "{",
173 " dup\t\t\t% x y text text",
174 " newpath\t\t% x y text text",
175 " 0 0 moveto\t\t% x y text text",
176 " true charpath\t\t% x y text",
177 " pathbbox\t\t% x y text x1 y1 x2 y2",
178 " pop\t\t\t% x y text x1 y1 x2",
179 " exch\t\t\t% x y text x1 x2 y1",
180 " pop\t\t\t% x y text x1 x2",
181 " exch\t\t\t% x y text x2 x1",
182 " pop\t\t\t% x y text width",
183 " newpath\t\t% x y text width",
184 " 4 3 roll\t\t% y text width x",
185 " exch\t\t\t% y text x width",
186 " sub\t\t\t% y text x",
187 " 3 2 roll\t\t% text x y",
188 " moveto\t\t% text",
189 " show\t\t\t% -",
190 "} def",
191 NULL
192
193 };
194
195
196
197 /** Procedure for centered text.
198 */
199 static char const * const f2leps_centered_aligned_text[] = {
200 "/TextAlignedCentered \t% x y text --",
201 "{",
202 " dup\t\t\t% x y text text",
203 " newpath\t\t% x y text text",
204 " 0 0 moveto\t\t% x y text text",
205 " true charpath\t\t% x y text",
206 " pathbbox\t\t% x y text x1 y1 x2 y2",
207 " pop\t\t\t% x y text x1 y1 x2",
208 " exch\t\t\t% x y text x1 x2 y1",
209 " pop\t\t\t% x y text x1 x2",
210 " exch\t\t\t% x y text x2 x1",
211 " pop\t\t\t% x y text width",
212 " 0.5 mul\t\t% x y text width/2",
213 " newpath\t\t% x y text width/2",
214 " 4 3 roll\t\t% y text width/2 x",
215 " exch\t\t\t% y text x width/2",
216 " sub\t\t\t% y text x",
217 " 3 2 roll\t\t% text x y",
218 " moveto\t\t% text",
219 " show\t\t\t% -",
220 "} def",
221 NULL
222
223 };
224
225 #endif
226
227
228
229 /** Keywords used by the module.
230 */
231 static
232 char const * const f2leps_c8_kw[] = {
233 /* 0 */
234 "\n",
235
236 /* 1 */
237 " ",
238
239 /* 2 */
240 "%!PS-Adobe-3.0 EPSF-3.0\n",
241
242 /* 3 */
243 "%!PS-Adobe-2.0 EPSF-2.0\n",
244
245 /* 4 */
246 "%%LanguageLevel: 3\n",
247
248 /* 5 */
249 "%%LanguageLevel: 2\n",
250
251 /* 6 */
252 "%%BoundingBox: ",
253
254 /* 7 */
255 "0 0 %ld %ld\n",
256
257 /* 8 */
258 "%%Creator: http://sourceforge.net/p/dktools/wiki/fig2lat/\n",
259
260 /* 9 */
261 "%%Title: Converted Fig image\n",
262
263 /* 10 */
264 "%%Pages: 1\n",
265
266 /* 11 */
267 "%%PageOrder: Ascend\n",
268
269 /* 12 */
270 "%%DocumentData: Clean7Bit\n",
271
272 /* 13 */
273 "%%EndComments\n",
274
275 /* 14 */
276 "%%Page: 1 1\n",
277
278 /* 15 */
279 "gsave\n",
280
281 /* 16 */
282 "grestore\n",
283
284 /* 17 */
285 "%d dict begin\n",
286
287 /* 18 */
288 "end\n",
289
290 /* 19 */
291 "showpage\n",
292
293 /* 20 */
294 "%%Trailer\n%%EOF\n",
295
296 /* 21 */
297 "newpath\n",
298
299 /* 22 */
300 "0 0 moveto %ld 0 lineto %ld %ld lineto 0 %ld lineto 0 0 lineto\n",
301
302 /* 23 */
303 "closepath clip\n",
304
305 /* 24 */
306 "/%s /fnt%02d FontReEncode\n",
307
308 /* 25 */
309 "%g %g moveto\n",
310
311 /* 26 */
312 "%g %g lineto\n",
313
314 /* 27 */
315 "%g %g %g %g %g %g curveto\n",
316
317 /* 28 */
318 "closepath\n",
319
320 /* 29 */
321 "eofill\n",
322
323 /* 30 */
324 "eoclip\n",
325
326 /* 31 */
327 "stroke\n",
328
329 /* 32 */
330 "%g %g %g setrgbcolor\n",
331
332 /* 33 */
333 "%g setlinewidth\n",
334
335 /* 34 */
336 "%d setlinecap\n",
337
338 /* 35 */
339 "%d setlinejoin\n",
340
341 /* 36 */
342 "[] 0 setdash\n",
343
344 /* 37 */
345 "[%g %g] 0 setdash\n",
346
347 /* 38 */
348 "[%g %g %g %g] 0 setdash\n",
349
350 /* 39 */
351 "[%g %g %g %g %g %g] 0 setdash\n",
352
353 /* 40 */
354 "[%g %g %g %g %g %g %g %g] 0 setdash\n",
355
356 /* 41 */
357 "(",
358
359 /* 42 */
360 ")",
361
362 /* 43 */
363 "/fnt%02d findfont %g scalefont setfont\n",
364
365 /* 44 */
366 " show\n",
367
368 /* 45 */
369 " TextAlignedCentered\n",
370
371 /* 46 */
372 " TextAlignedRight\n",
373
374 /* 47 */
375 "%g %g translate\n",
376
377 /* 48 */
378 "%g rotate\n",
379
380 /* 49 */
381 "0 0 moveto\n",
382
383 /* 50 */
384 " 3 -2 roll newpath moveto show\n",
385
386 /* 51 */
387 "0 0 ",
388
389 /* 52 */
390 "% ",
391
392 NULL
393
394 };
395
396
397 /* ************************************************************************ */
398 /* * * */
399 /* * Tool functions * */
400 /* * * */
401 /* ************************************************************************ */
402
403
404
405
406 /** Destroy drawing info structure.
407 @param pdi Structure to destroy.
408 */
409 static
410 void
f2leps_drawing_info_delete(f2leps_drawing_info_t * pdi)411 f2leps_drawing_info_delete(
412 f2leps_drawing_info_t *pdi
413 )
414 {
415 void *ptr; /* Current text handling information to delete. */
416
417 if(pdi) {
418 dk3_release(pdi->shortOutFile);
419 if(pdi->sFonts) {
420 if(pdi->iFonts) {
421 dk3sto_it_reset(pdi->iFonts);
422 while(NULL != (ptr = dk3sto_it_next(pdi->iFonts))) {
423 dk3_delete(ptr);
424 }
425 dk3sto_it_close(pdi->iFonts);
426 }
427 dk3sto_close(pdi->sFonts);
428 } pdi->sFonts = NULL; pdi->iFonts = NULL;
429 dk3_release(pdi->fonts);
430 dk3_delete(pdi);
431 }
432 }
433
434
435
436 /** Create drawing information structure.
437 @param job Job structure.
438 @param withFonts Flag: Gather LaTeX font information.
439 This flag is set to 1 for EPS/LaTeX and set to 0 for
440 pure EPS.
441 @return Pointer to new structure on success, NULL on error.
442 */
443 static
444 f2leps_drawing_info_t *
f2leps_drawing_info_new(f2l_job_t * job,int withFonts)445 f2leps_drawing_info_new(
446 f2l_job_t *job,
447 int withFonts
448 )
449 {
450 f2leps_drawing_info_t *back;
451 int ok = 0;
452 back = dk3_new_app(f2leps_drawing_info_t,1,job->app);
453 if(back) {
454 back->nFonts = 0UL;
455 back->sFonts = NULL;
456 back->iFonts = NULL;
457 back->fonts = NULL;
458 back->havetext = 0;
459 back->alignedright = 0;
460 back->alignedcenter = 0;
461 back->dictsize = 0;
462 back->shortOutFile = NULL;
463 if(withFonts) {
464 back->sFonts = dk3sto_open_app(job->app);
465 if(back->sFonts) {
466 dk3sto_set_comp(back->sFonts, dk3fig_tool_font_compare, 0);
467 back->iFonts = dk3sto_it_open(back->sFonts);
468 if(back->iFonts) {
469 ok = 1;
470 }
471 }
472 } else {
473 back->fonts = dk3_new_app(int,35,job->app);
474 if(back->fonts) {
475 ok = 1;
476 }
477 }
478 if(!(ok)) {
479 f2leps_drawing_info_delete(back);
480 back = NULL;
481 }
482 }
483 return back;
484 }
485
486
487
488 /** Write a text section to the output file.
489 @param of Output file.
490 @param ta String array to write.
491 */
492 static
493 void
f2leps_write_text_section(FILE * of,char const * const * ta)494 f2leps_write_text_section(
495 FILE *of,
496 char const * const *ta
497 )
498 {
499 char const * const *ptr;
500 ptr = ta;
501 while(*ptr) {
502 fputs(*(ptr++), of);
503 fputc('\n', of);
504 }
505 }
506
507
508
509 /** Write EPS file header.
510 @param job Job structure.
511 @param drw Drawing structure.
512 @param of Output file.
513 @param pure Flag: Pure EPS (1) or EPS/LaTeX (0).
514 */
515 static
516 void
f2leps_file_header(f2l_job_t * job,dk3_fig_drawing_t * drw,FILE * of,int pure)517 f2leps_file_header(
518 f2l_job_t *job,
519 dk3_fig_drawing_t *drw,
520 FILE *of,
521 int pure
522 )
523 {
524 f2leps_drawing_info_t *pdi;
525 int i;
526 pdi = (f2leps_drawing_info_t *)(drw->dsd);
527 /* %!PS-Adobe-3.0 EPSF-3.0 */
528 if(2 < job->pslevel) {
529 fputs(f2leps_c8_kw[2], of);
530 fputs(f2leps_c8_kw[4], of);
531 } else {
532 fputs(f2leps_c8_kw[3], of);
533 fputs(f2leps_c8_kw[5], of);
534 }
535 /* bounding box */
536 fputs(f2leps_c8_kw[6], of);
537 fprintf(of, f2leps_c8_kw[7], job->lwidth, job->lheight);
538 if(job->dsc) {
539 /* Creator */
540 fputs(f2leps_c8_kw[8], of);
541 /* Title */
542 fputs(f2leps_c8_kw[9], of);
543 /* Pages */
544 fputs(f2leps_c8_kw[10], of);
545 /* PageOrder */
546 fputs(f2leps_c8_kw[11], of);
547 /* DocumentData */
548 fputs(f2leps_c8_kw[12], of);
549 if(pure) {
550 /* ##### HIER WEITER: DocumentNeededFonts */
551 }
552 /* EndComments */
553 fputs(f2leps_c8_kw[13], of);
554 /* Page */
555 fputs(f2leps_c8_kw[14], of);
556 }
557 fputs(f2leps_c8_kw[15], of);
558 fputs(f2leps_c8_kw[21], of);
559 fprintf(
560 of, f2leps_c8_kw[22],
561 job->lwidth, job->lwidth, job->lheight, job->lheight
562 );
563 fputs(f2leps_c8_kw[23], of);
564 if(pure) {
565 /* xxx dict begin */
566 fprintf(of, f2leps_c8_kw[17], pdi->dictsize);
567 }
568 /* Text procedures */
569 if(pdi->havetext) {
570 f2leps_write_text_section(of, f2leps_font_reencode_2);
571 if(pdi->alignedcenter) {
572 f2leps_write_text_section(of, f2leps_centered_aligned_text);
573 }
574 if(pdi->alignedright) {
575 f2leps_write_text_section(of, f2leps_right_aligned_text);
576 }
577 /* Font reencodings */
578 for(i = 0; i < 35; i++) {
579 if((pdi->fonts)[i]) {
580 fprintf(of, f2leps_c8_kw[24], dk3font_get_ps_font_name(i), i);
581 }
582 }
583 }
584 }
585
586
587
588 /** Write EPS file header.
589 @param job Job structure.
590 @param drw Drawing structure.
591 @param of Output file.
592 @param pure Flag: Pure EPS (1) or EPS/LaTeX (0).
593 */
594 static
595 void
f2leps_file_footer(f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),FILE * of,int pure)596 f2leps_file_footer(
597 f2l_job_t *job,
598 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
599 FILE *of,
600 int pure
601 )
602 {
603 DK3_UNUSED_ARG(drw)
604 if(pure) {
605 /* end */
606 fputs(f2leps_c8_kw[18], of);
607 }
608 /* grestore */
609 fputs(f2leps_c8_kw[16], of);
610 if(job->showpage) {
611 /* showpage */
612 fputs(f2leps_c8_kw[19], of);
613 }
614 if(job->dsc) {
615 /* Trailer, EOF */
616 fputs(f2leps_c8_kw[20], of);
617 }
618 }
619
620
621
622 /** Check whether a text character is literal.
623 @param c Character to check.
624 @return 1 to issue character as is, 0 for octal encoding.
625 */
626 static
627 int
f2leps_is_literal(char c)628 f2leps_is_literal(char c)
629 {
630 int back = 0;
631 if(('A' <= c) && ('Z' >= c)) {
632 back = 1;
633 } else {
634 if(('a' <= c) && ('z' >= c)) {
635 back = 1;
636 } else {
637 if(('0' <= c) && ('9' >= c)) {
638 back = 1;
639 } else {
640 switch(c) {
641 case ' ':
642 {
643 back = 1;
644 } break;
645 }
646 }
647 }
648 }
649 return back;
650 }
651
652
653
654 /** Write string PS-encoded to output.
655 @param of Output file.
656 @param str String to write.
657 */
658 static
659 void
f2leps_encode_string(FILE * of,char const * str)660 f2leps_encode_string(
661 FILE *of,
662 char const *str
663 )
664 {
665 char buf[32];
666 char const *ptr;
667 char c;
668 unsigned char uc;
669 unsigned u;
670 ptr = str;
671 fputs(f2leps_c8_kw[41], of);
672 while(*ptr) {
673 c = *(ptr++);
674 if(f2leps_is_literal(c)) {
675 fputc(c, of);
676 } else {
677 uc = (unsigned char)c;
678 u = (unsigned)uc;
679 while(255 < u) { u = u - 256; }
680 sprintf(buf, "\\%03o", u);
681 fputs(buf, of);
682 }
683 }
684 fputs(f2leps_c8_kw[42], of);
685 }
686
687
688
689 /** Process an embedded bitmap image.
690 @param of Output file.
691 @param job Job structure.
692 @param drw Drawing structure.
693 @param obj Image object.
694 @param outbb Destination image area.
695 @param drawdir Drawing direction / coordinates origin.
696 @param ec Pointer to error code variable.
697 */
698 static
699 void
f2leps_image_object(FILE * of,f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_fig_obj_t * obj,dk3_bb_t * outbb,int drawdir,int * ec)700 f2leps_image_object(
701 FILE *of,
702 f2l_job_t *job,
703 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
704 dk3_fig_obj_t *obj,
705 dk3_bb_t *outbb,
706 int drawdir,
707 int *ec
708 )
709 {
710 int res = 0;
711 DK3_UNUSED_ARG(drw)
712 res = dk3bm_ps_place_object(
713 of,outbb,drawdir,(obj->dt).pol.fn,job->app,job->pslevel,ec
714 );
715 if(!(res)) {
716 job->exval = FIG2LAT_EXIT_ERROR_UNKNOWN;
717 }
718 }
719
720
721
722 /** Set line style.
723 @param of Output file.
724 @param job Job structure.
725 @param drw Drawing structure.
726 @param obj Object using the line style.
727 @param ls Line style.
728 @param sv Style value (gap length).
729 @param lw Line width.
730 */
731 static
732 void
f2leps_set_line_style(FILE * of,f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED (obj),int ls,double sv,double lw)733 f2leps_set_line_style(
734 FILE *of,
735 f2l_job_t *job,
736 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
737 dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED(obj),
738 int ls,
739 double sv,
740 double lw
741 )
742 {
743 double gw; /* Gap width. */
744 DK3_UNUSED_ARG(drw)
745 DK3_UNUSED_ARG(obj)
746 gw = f2lto_find_gap_length(job, lw, sv);
747 switch(ls) {
748 case DK3_FIG_LS_DASHED: {
749 fprintf(of, f2leps_c8_kw[37], sv, gw);
750 } break;
751 case DK3_FIG_LS_DOTTED: {
752 fprintf(of, f2leps_c8_kw[37], lw, gw);
753 } break;
754 case DK3_FIG_LS_DASH_DOTTED: {
755 fprintf(of, f2leps_c8_kw[38], sv, gw, lw, gw);
756 } break;
757 case DK3_FIG_LS_DASH_DOUBLE_DOTTED: {
758 fprintf(of, f2leps_c8_kw[39], sv, gw, lw, gw, lw, gw);
759 } break;
760 case DK3_FIG_LS_DASH_TRIPLE_DOTTED: {
761 fprintf(of, f2leps_c8_kw[40], sv, gw, lw, gw, lw, gw, lw, gw);
762 } break;
763 default: {
764 fputs(f2leps_c8_kw[36], of);
765 } break;
766 }
767 }
768
769
770
771 /** Write debug line to output.
772 @param of Output file.
773 @param job Job structure.
774 @param msg Message text to write.
775 */
776 static
777 void
f2leps_debug(FILE * of,f2l_job_t * job,char const * msg)778 f2leps_debug(
779 FILE *of,
780 f2l_job_t *job,
781 char const *msg
782 )
783 {
784 if((job) && (msg)) {
785 fputs(f2leps_c8_kw[52], of);
786 fputs(msg, of);
787 fputs(f2leps_c8_kw[0], of);
788 }
789 }
790
791
792
793 /* ************************************************************************ */
794 /* * * */
795 /* * Driver: EPS with LaTeX * */
796 /* * * */
797 /* ************************************************************************ */
798
799
800
801 int
f2leps_eps_with_tex_initialize(f2l_job_t * job,dk3_fig_drawing_t * drw)802 f2leps_eps_with_tex_initialize(f2l_job_t *job, dk3_fig_drawing_t *drw)
803 {
804 f2leps_drawing_info_t *pdi;
805 dk3_fig_obj_t *pobj;
806 dkChar const *oldsourcename = NULL;
807 unsigned long oldsourceline = 0UL;
808 int back = 0;
809 int ff;
810
811 drw->dsd = (void *)(pdi = f2leps_drawing_info_new(job, 1));
812 if(drw->dsd) {
813 oldsourcename = dk3app_get_source_file(job->app);
814 oldsourceline = dk3app_get_source_line(job->app);
815 pdi->shortOutFile = dk3fig_tool_short_output_file_name(job->on2, job->app);
816 if(pdi->shortOutFile) {
817 back = 1;
818 dk3sto_it_reset(drw->iobj);
819 while(NULL != (pobj = (dk3_fig_obj_t *)dk3sto_it_next(drw->iobj))) {
820
821 dk3app_set_source_line(job->app, pobj->li);
822 switch(pobj->ot) {
823 case DK3_FIG_OBJ_TEXT: {
824 ff = (pobj->dt).txt.ff;
825 if(!(ff & DK3_FIG_FONT_FLAG_HIDDEN)) {
826 if(!(ff & DK3_FIG_FONT_FLAG_SPECIAL)) {
827 if(ff & DK3_FIG_FONT_FLAG_PS) {
828 if(job->ntf) {
829 pobj->dsd = (void *)f2l_tool_register_font(
830 pdi->sFonts, pdi->iFonts, &(pdi->nFonts),
831 (pobj->dt).txt.fo, (pobj->dt).txt.fs, job->app
832 );
833 if(!(pobj->dsd)) {
834 back = 0;
835 f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
836 }
837 } else {
838 }
839 }
840 }
841 }
842 } break;
843 }
844 }
845 } else {
846 f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
847 }
848 dk3app_set_source_file(job->app, oldsourcename);
849 dk3app_set_source_line(job->app, oldsourceline);
850 } else {
851 f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
852 }
853 return back;
854 }
855
856
857
858 void
f2leps_eps_with_tex_end(f2l_job_t * DK3_SILENCE_ARG_UNUSED (job),dk3_fig_drawing_t * drw)859 f2leps_eps_with_tex_end(
860 f2l_job_t * DK3_SILENCE_ARG_UNUSED(job),
861 dk3_fig_drawing_t *drw
862 )
863 {
864
865 DK3_UNUSED_ARG(job)
866 if(drw->dsd) {
867 f2leps_drawing_info_delete((f2leps_drawing_info_t *)(drw->dsd));
868 }
869
870 }
871
872
873
874 int
f2leps_eps_with_tex_open_output_files(f2l_job_t * job)875 f2leps_eps_with_tex_open_output_files(f2l_job_t *job)
876 {
877 int back = 0;
878
879 job->of1 = dk3sf_fopen_app(job->on1, dkT("w"), job->app);
880 if(job->of1) {
881 job->of2 = dk3sf_fopen_app(job->on2, dkT("wb"), job->app);
882 if(job->of2) {
883 back = 1;
884 } else {
885 f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
886 }
887 } else {
888 f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
889 }
890
891 return back;
892 }
893
894
895
896 void
f2leps_eps_with_tex_close_output_files(f2l_job_t * job)897 f2leps_eps_with_tex_close_output_files(f2l_job_t *job)
898 {
899
900 if(job->of2) {
901 dk3sf_fclose_app(job->of2, job->app);
902 } job->of2 = NULL;
903 if(job->of1) {
904 dk3sf_fclose_app(job->of1, job->app);
905 } job->of1 = NULL;
906
907 }
908
909
910
911 int
f2leps_eps_with_tex_start_processing(f2l_job_t * job,dk3_fig_drawing_t * drw)912 f2leps_eps_with_tex_start_processing(f2l_job_t *job, dk3_fig_drawing_t *drw)
913 {
914 f2leps_drawing_info_t *pdi;
915 int back = 1;
916
917 pdi = (f2leps_drawing_info_t *)(drw->dsd);
918 f2leps_file_header(job, drw, job->of2, 0);
919 f2l_tool_start_tex_part(
920 job->of1, job, pdi->shortOutFile, pdi->iFonts, pdi->nFonts
921 );
922
923 return back;
924 }
925
926
927
928 void
f2leps_eps_with_tex_end_processing(f2l_job_t * job,dk3_fig_drawing_t * drw)929 f2leps_eps_with_tex_end_processing(f2l_job_t *job, dk3_fig_drawing_t *drw)
930 {
931
932 f2leps_file_footer(job, drw, job->of2, 0);
933 f2l_tool_end_tex_part(job->of1);
934
935 }
936
937
938
939 void
f2leps_eps_with_tex_text_object(f2l_job_t * job,dk3_fig_drawing_t * drw,dk3_fig_obj_t * obj,double x,double y)940 f2leps_eps_with_tex_text_object(
941 f2l_job_t *job,
942 dk3_fig_drawing_t *drw,
943 dk3_fig_obj_t *obj,
944 double x,
945 double y
946 )
947 {
948 f2leps_drawing_info_t *pdi;
949 pdi = (f2leps_drawing_info_t *)(drw->dsd);
950 f2l_tool_text_object(job->of1, job, drw, obj, x, y, pdi->nFonts);
951 }
952
953
954
955 void
f2leps_eps_with_tex_image_object(f2l_job_t * job,dk3_fig_drawing_t * drw,dk3_fig_obj_t * obj,dk3_bb_t * outbb,int drawdir,int * ec)956 f2leps_eps_with_tex_image_object(
957 f2l_job_t *job,
958 dk3_fig_drawing_t *drw,
959 dk3_fig_obj_t *obj,
960 dk3_bb_t *outbb,
961 int drawdir,
962 int *ec
963 )
964 {
965 f2leps_image_object(job->of2, job, drw, obj, outbb, drawdir, ec);
966 }
967
968
969 void
f2leps_eps_with_tex_newpath(f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED (obj))970 f2leps_eps_with_tex_newpath(
971 f2l_job_t *job,
972 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
973 dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED(obj)
974 )
975 {
976 DK3_UNUSED_ARG(drw)
977 DK3_UNUSED_ARG(obj)
978 fputs(f2leps_c8_kw[21], job->of2);
979 }
980
981
982
983 void
f2leps_eps_with_tex_moveto(f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED (obj),double x,double y)984 f2leps_eps_with_tex_moveto(
985 f2l_job_t *job,
986 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
987 dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED(obj),
988 double x,
989 double y
990 )
991 {
992 DK3_UNUSED_ARG(drw)
993 DK3_UNUSED_ARG(obj)
994 fprintf(job->of2, f2leps_c8_kw[25], x, y);
995 }
996
997
998
999 void
f2leps_eps_with_tex_lineto(f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED (obj),double x,double y)1000 f2leps_eps_with_tex_lineto(
1001 f2l_job_t *job,
1002 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
1003 dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED(obj),
1004 double x,
1005 double y
1006 )
1007 {
1008 DK3_UNUSED_ARG(drw)
1009 DK3_UNUSED_ARG(obj)
1010 fprintf(job->of2, f2leps_c8_kw[26], x, y);
1011 }
1012
1013
1014
1015 void
f2leps_eps_with_tex_curveto(f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED (obj),double xcs,double ycs,double xce,double yce,double xe,double ye)1016 f2leps_eps_with_tex_curveto(
1017 f2l_job_t *job,
1018 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
1019 dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED(obj),
1020 double xcs,
1021 double ycs,
1022 double xce,
1023 double yce,
1024 double xe,
1025 double ye
1026 )
1027 {
1028 DK3_UNUSED_ARG(drw)
1029 DK3_UNUSED_ARG(obj)
1030 fprintf(job->of2, f2leps_c8_kw[27], xcs, ycs, xce, yce, xe, ye);
1031 }
1032
1033
1034
1035 void
f2leps_eps_with_tex_closepath(f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED (obj))1036 f2leps_eps_with_tex_closepath(
1037 f2l_job_t *job,
1038 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
1039 dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED(obj)
1040 )
1041 {
1042 DK3_UNUSED_ARG(drw)
1043 DK3_UNUSED_ARG(obj)
1044 fputs(f2leps_c8_kw[28], job->of2);
1045 }
1046
1047
1048
1049 void
f2leps_eps_with_tex_fill(f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED (obj))1050 f2leps_eps_with_tex_fill(
1051 f2l_job_t *job,
1052 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
1053 dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED(obj)
1054 )
1055 {
1056 DK3_UNUSED_ARG(drw)
1057 DK3_UNUSED_ARG(obj)
1058 fputs(f2leps_c8_kw[29], job->of2);
1059 }
1060
1061
1062
1063 void
f2leps_eps_with_tex_clip(f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED (obj))1064 f2leps_eps_with_tex_clip(
1065 f2l_job_t *job,
1066 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
1067 dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED(obj)
1068 )
1069 {
1070 DK3_UNUSED_ARG(drw)
1071 DK3_UNUSED_ARG(obj)
1072 fputs(f2leps_c8_kw[30], job->of2);
1073 }
1074
1075
1076
1077 void
f2leps_eps_with_tex_stroke(f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED (obj))1078 f2leps_eps_with_tex_stroke(
1079 f2l_job_t *job,
1080 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
1081 dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED(obj)
1082 )
1083 {
1084 DK3_UNUSED_ARG(drw)
1085 DK3_UNUSED_ARG(obj)
1086 fputs(f2leps_c8_kw[31], job->of2);
1087 }
1088
1089
1090
1091 void
f2leps_eps_with_tex_gsave(f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED (obj))1092 f2leps_eps_with_tex_gsave(
1093 f2l_job_t *job,
1094 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
1095 dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED(obj)
1096 )
1097 {
1098 DK3_UNUSED_ARG(drw)
1099 DK3_UNUSED_ARG(obj)
1100 fputs(f2leps_c8_kw[15], job->of2);
1101 }
1102
1103
1104
1105 void
f2leps_eps_with_tex_grestore(f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED (obj))1106 f2leps_eps_with_tex_grestore(
1107 f2l_job_t *job,
1108 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
1109 dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED(obj)
1110 )
1111 {
1112 DK3_UNUSED_ARG(drw)
1113 DK3_UNUSED_ARG(obj)
1114 fputs(f2leps_c8_kw[16], job->of2);
1115 }
1116
1117
1118
1119 void
f2leps_eps_with_tex_setcolor(f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED (obj),double r,double g,double b)1120 f2leps_eps_with_tex_setcolor(
1121 f2l_job_t *job,
1122 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
1123 dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED(obj),
1124 double r,
1125 double g,
1126 double b
1127 )
1128 {
1129 DK3_UNUSED_ARG(drw)
1130 DK3_UNUSED_ARG(obj)
1131 fprintf(job->of2, f2leps_c8_kw[32], r, g, b);
1132 }
1133
1134
1135
1136 void
f2leps_eps_with_tex_set_line_width(f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED (obj),double lw)1137 f2leps_eps_with_tex_set_line_width(
1138 f2l_job_t *job,
1139 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
1140 dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED(obj),
1141 double lw
1142 )
1143 {
1144 DK3_UNUSED_ARG(drw)
1145 DK3_UNUSED_ARG(obj)
1146 fprintf(job->of2, f2leps_c8_kw[33], lw);
1147 }
1148
1149
1150 void
f2leps_eps_with_tex_set_line_style(f2l_job_t * job,dk3_fig_drawing_t * drw,dk3_fig_obj_t * obj,int ls,double sv,double lw)1151 f2leps_eps_with_tex_set_line_style(
1152 f2l_job_t *job,
1153 dk3_fig_drawing_t *drw,
1154 dk3_fig_obj_t *obj,
1155 int ls,
1156 double sv,
1157 double lw
1158 )
1159 {
1160 f2leps_set_line_style(job->of2, job, drw, obj, ls, sv, lw);
1161 }
1162
1163
1164
1165 void
f2leps_eps_with_tex_set_line_end(f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED (obj),int le)1166 f2leps_eps_with_tex_set_line_end(
1167 f2l_job_t *job,
1168 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
1169 dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED(obj),
1170 int le
1171 )
1172 {
1173 DK3_UNUSED_ARG(drw)
1174 DK3_UNUSED_ARG(obj)
1175 fprintf(job->of2, f2leps_c8_kw[34], le);
1176 }
1177
1178
1179
1180 void
f2leps_eps_with_tex_set_line_join(f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED (obj),int lj)1181 f2leps_eps_with_tex_set_line_join(
1182 f2l_job_t *job,
1183 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
1184 dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED(obj),
1185 int lj
1186 )
1187 {
1188 DK3_UNUSED_ARG(drw)
1189 DK3_UNUSED_ARG(obj)
1190 fprintf(job->of2, f2leps_c8_kw[35], lj);
1191 }
1192
1193
1194
1195 void
f2leps_eps_with_tex_set_color_1(f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_rgb_color_t * rgb)1196 f2leps_eps_with_tex_set_color_1(
1197 f2l_job_t *job,
1198 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
1199 dk3_rgb_color_t *rgb
1200 )
1201 {
1202 DK3_UNUSED_ARG(drw)
1203 fprintf(job->of2, f2leps_c8_kw[32], rgb->r, rgb->g, rgb->b);
1204 }
1205
1206
1207
1208 void
f2leps_eps_with_tex_set_color_2(f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_rgb_color_t * rgb)1209 f2leps_eps_with_tex_set_color_2(
1210 f2l_job_t *job,
1211 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
1212 dk3_rgb_color_t *rgb
1213 )
1214 {
1215 DK3_UNUSED_ARG(drw)
1216 fprintf(job->of2, f2leps_c8_kw[32], rgb->r, rgb->g, rgb->b);
1217 }
1218
1219
1220
1221 void
f2leps_eps_with_tex_debug(f2l_job_t * job,char const * msg)1222 f2leps_eps_with_tex_debug(
1223 f2l_job_t *job,
1224 char const *msg
1225 )
1226 {
1227 f2leps_debug(job->of2, job, msg);
1228 }
1229
1230
1231 /* ************************************************************************ */
1232 /* * * */
1233 /* * Driver: EPS standalone file * */
1234 /* * * */
1235 /* ************************************************************************ */
1236
1237
1238
1239 int
f2leps_eps_pure_initialize(f2l_job_t * job,dk3_fig_drawing_t * drw)1240 f2leps_eps_pure_initialize(f2l_job_t *job, dk3_fig_drawing_t *drw)
1241 {
1242 f2leps_drawing_info_t *pdi;
1243 dk3_fig_obj_t *pobj;
1244 int back = 0;
1245 int fn;
1246 int i;
1247 int ff;
1248 drw->dsd = (void *)(pdi = f2leps_drawing_info_new(job, 0));
1249 if(drw->dsd) {
1250 back = 1;
1251 /* Inspect all elements.
1252 */
1253 dk3sto_it_reset(drw->iobj);
1254 while(NULL != (pobj = (dk3_fig_obj_t *)dk3sto_it_next(drw->iobj))) {
1255 switch(pobj->ot) {
1256 case DK3_FIG_OBJ_TEXT: {
1257 ff = (pobj->dt).txt.ff;
1258 if(!(ff & DK3_FIG_FONT_FLAG_HIDDEN)) {
1259 if(!(ff & DK3_FIG_FONT_FLAG_SPECIAL)) {
1260 pdi->havetext = 1;
1261 switch(pobj->st) {
1262 case 1: {
1263 pdi->alignedcenter = 1;
1264 } break;
1265 case 2: {
1266 pdi->alignedright = 1;
1267 } break;
1268 }
1269 fn = dk3fig_tool_ps_font_number(pobj);
1270 if(-1 < fn) {
1271 if(35 > fn) {
1272 (pdi->fonts)[fn] = 1;
1273 }
1274 }
1275 }
1276 }
1277 } break;
1278 case DK3_FIG_OBJ_ELLIPSE:
1279 case DK3_FIG_OBJ_POLYLINE:
1280 case DK3_FIG_OBJ_SPLINE:
1281 case DK3_FIG_OBJ_ARC: {
1282 } break;
1283 }
1284 }
1285 /* Calculate dictionary size.
1286 */
1287 for(i = 0; i < 35; i++) {
1288 if((pdi->fonts)[i]) { /* Fonts */
1289 pdi->dictsize += 1;
1290 }
1291 }
1292 if(pdi->havetext) { /* Font reencode procedure */
1293 pdi->dictsize += 1;
1294 }
1295 if(pdi->alignedcenter) { /* Procedure to show centered text. */
1296 pdi->dictsize += 1;
1297 }
1298 if(pdi->alignedright) { /* Procedure to show right-algigned. */
1299 pdi->dictsize += 1;
1300 }
1301 pdi->dictsize += 5; /* Reserve. */
1302 } else {
1303 f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
1304 }
1305 return back;
1306 }
1307
1308
1309
1310 void
f2leps_eps_pure_end(f2l_job_t * DK3_SILENCE_ARG_UNUSED (job),dk3_fig_drawing_t * drw)1311 f2leps_eps_pure_end(
1312 f2l_job_t * DK3_SILENCE_ARG_UNUSED(job),
1313 dk3_fig_drawing_t *drw
1314 )
1315 {
1316 DK3_UNUSED_ARG(job)
1317 if(drw->dsd) {
1318 f2leps_drawing_info_delete((f2leps_drawing_info_t *)(drw->dsd));
1319 }
1320 }
1321
1322
1323
1324 int
f2leps_eps_pure_open_output_files(f2l_job_t * job)1325 f2leps_eps_pure_open_output_files(f2l_job_t *job)
1326 {
1327 int back = 0;
1328 job->of1 = dk3sf_fopen_app(job->on1, dkT("wb"), job->app);
1329 if(job->of1) {
1330 back = 1;
1331 } else {
1332 f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
1333 }
1334 return back;
1335 }
1336
1337
1338
1339 void
f2leps_eps_pure_close_output_files(f2l_job_t * job)1340 f2leps_eps_pure_close_output_files(f2l_job_t *job)
1341 {
1342 if(job->of1) {
1343 dk3sf_fclose_app(job->of1, job->app);
1344 } job->of1 = NULL;
1345 }
1346
1347
1348
1349 int
f2leps_eps_pure_start_processing(f2l_job_t * job,dk3_fig_drawing_t * drw)1350 f2leps_eps_pure_start_processing(f2l_job_t *job, dk3_fig_drawing_t *drw)
1351 {
1352 int back = 1;
1353 f2leps_file_header(job, drw, job->of1, 1);
1354 return back;
1355 }
1356
1357
1358
1359 void
f2leps_eps_pure_end_processing(f2l_job_t * job,dk3_fig_drawing_t * drw)1360 f2leps_eps_pure_end_processing(f2l_job_t *job, dk3_fig_drawing_t *drw)
1361 {
1362 f2leps_file_footer(job, drw, job->of1, 1);
1363 }
1364
1365
1366
1367 void
f2leps_eps_pure_text_object(f2l_job_t * job,dk3_fig_drawing_t * drw,dk3_fig_obj_t * obj,double x,double y)1368 f2leps_eps_pure_text_object(
1369 f2l_job_t *job,
1370 dk3_fig_drawing_t *drw,
1371 dk3_fig_obj_t *obj,
1372 double x,
1373 double y
1374 )
1375 {
1376 dk3_rgb_color_t rgb;
1377 double fs;
1378 int ff;
1379 int fn;
1380 int muc;
1381 ff = (obj->dt).txt.ff;
1382 if(!(ff & DK3_FIG_FONT_FLAG_HIDDEN)) {
1383 if(!(ff & DK3_FIG_FONT_FLAG_SPECIAL)) {
1384 fn = dk3fig_tool_ps_font_number(obj);
1385 if(-1 < fn) {
1386 if((obj->dt).txt.st) {
1387 /* Set color */
1388 dk3fig_tool_find_color(&rgb, drw, (obj->pc), 20);
1389 muc = dk3fig_tool_must_set_color(
1390 (job->gs).hc1, (job->gs).c1.r, (job->gs).c1.g, (job->gs).c1.b,
1391 rgb.r, rgb.g, rgb.b
1392 );
1393 if(muc) {
1394 fprintf(job->of1, f2leps_c8_kw[32], rgb.r, rgb.g, rgb.b);
1395 (job->gs).c1.r = rgb.r;
1396 (job->gs).c1.g = rgb.g;
1397 (job->gs).c1.b = rgb.b;
1398 (job->gs).c2.r = rgb.r;
1399 (job->gs).c2.g = rgb.g;
1400 (job->gs).c2.b = rgb.b;
1401 (job->gs).hc1 = 1;
1402 (job->gs).hc2 = 1;
1403 }
1404 /* Set font */
1405 fs = (obj->dt).txt.fs;
1406 if(0.0 < job->nts) { fs = fs * job->nts; }
1407 muc = dk3fig_tool_must_set_font(
1408 (job->gs).hfn, (job->gs).fn, (job->gs).fs, fn, fs
1409 );
1410 if(muc) {
1411 fprintf(job->of1, f2leps_c8_kw[43], fn, fs);
1412 (job->gs).hfn = 1;
1413 (job->gs).fn = fn;
1414 (job->gs).fs = fs;
1415 }
1416 if(1.0e-6 < fabs((obj->dt).txt.an)) { /* rotated */
1417 /* gsave */
1418 fputs(f2leps_c8_kw[15], job->of1);
1419 /* translate */
1420 fprintf(job->of1, f2leps_c8_kw[47], x, y);
1421 /* rotate */
1422 fprintf(
1423 job->of1, f2leps_c8_kw[48],
1424 ((180.0 * (obj->dt).txt.an) / M_PI)
1425 );
1426 #if 0
1427 /* newpath */
1428 fputs(f2leps_c8_kw[21], job->of1);
1429 /* 0 0 moveto */
1430 fputs(f2leps_c8_kw[49], job->of1);
1431 /* string */
1432 f2leps_encode_string(job->of1, (obj->dt).txt.st);
1433 /* show/show aligned */
1434 switch(obj->st) {
1435 case 2: {
1436 fputs(f2leps_c8_kw[46], job->of1);
1437 } break;
1438 case 1: {
1439 fputs(f2leps_c8_kw[45], job->of1);
1440 } break;
1441 default: {
1442 fputs(f2leps_c8_kw[44], job->of1);
1443 } break;
1444 }
1445 #else
1446 fputs(f2leps_c8_kw[51], job->of1);
1447 /* string */
1448 f2leps_encode_string(job->of1, (obj->dt).txt.st);
1449 /* show/show aligned */
1450 switch(obj->st) {
1451 case 2: {
1452 fputs(f2leps_c8_kw[46], job->of1);
1453 } break;
1454 case 1: {
1455 fputs(f2leps_c8_kw[45], job->of1);
1456 } break;
1457 default: {
1458 fputs(f2leps_c8_kw[50], job->of1);
1459 } break;
1460 }
1461 #endif
1462 /* grestore */
1463 fputs(f2leps_c8_kw[16], job->of1);
1464 } else { /* not rotated */
1465 #if 0
1466 /* newpath */
1467 fputs(f2leps_c8_kw[21], job->of1);
1468 /* moveto */
1469 fprintf(job->of1, f2leps_c8_kw[25], x, y);
1470 /* string */
1471 f2leps_encode_string(job->of1, (obj->dt).txt.st);
1472 /* show/show aligned */
1473 switch(obj->st) {
1474 case 2: {
1475 fputs(f2leps_c8_kw[46], job->of1);
1476 } break;
1477 case 1: {
1478 fputs(f2leps_c8_kw[45], job->of1);
1479 } break;
1480 default: {
1481 fputs(f2leps_c8_kw[44], job->of1);
1482 } break;
1483 }
1484 #else
1485 fprintf(job->of1, "%g %g\n", x, y);
1486 /* string */
1487 f2leps_encode_string(job->of1, (obj->dt).txt.st);
1488 /* show/show aligned */
1489 switch(obj->st) {
1490 case 2: {
1491 fputs(f2leps_c8_kw[46], job->of1);
1492 } break;
1493 case 1: {
1494 fputs(f2leps_c8_kw[45], job->of1);
1495 } break;
1496 default: {
1497 fputs(f2leps_c8_kw[50], job->of1);
1498 } break;
1499 }
1500 #endif
1501 }
1502 } else {
1503 /* ##### BUG: No string */
1504 }
1505 } else {
1506 /* ##### BUG: No font number found! */
1507 }
1508 } else {
1509 /* Warning: Skipping special text! */
1510 dk3app_log_1(job->app, DK3_LL_WARNING, job->msg, 41);
1511 f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYNTAX);
1512 }
1513 }
1514 }
1515
1516
1517
1518 void
f2leps_eps_pure_image_object(f2l_job_t * job,dk3_fig_drawing_t * drw,dk3_fig_obj_t * obj,dk3_bb_t * outbb,int drawdir,int * ec)1519 f2leps_eps_pure_image_object(
1520 f2l_job_t *job,
1521 dk3_fig_drawing_t *drw,
1522 dk3_fig_obj_t *obj,
1523 dk3_bb_t *outbb,
1524 int drawdir,
1525 int *ec
1526 )
1527 {
1528 f2leps_image_object(job->of1, job, drw, obj, outbb, drawdir, ec);
1529 }
1530
1531
1532 void
f2leps_eps_pure_newpath(f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED (obj))1533 f2leps_eps_pure_newpath(
1534 f2l_job_t *job,
1535 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
1536 dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED(obj)
1537 )
1538 {
1539 DK3_UNUSED_ARG(drw)
1540 DK3_UNUSED_ARG(obj)
1541 fputs(f2leps_c8_kw[21], job->of1);
1542 }
1543
1544
1545
1546 void
f2leps_eps_pure_moveto(f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED (obj),double x,double y)1547 f2leps_eps_pure_moveto(
1548 f2l_job_t *job,
1549 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
1550 dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED(obj),
1551 double x,
1552 double y
1553 )
1554 {
1555 DK3_UNUSED_ARG(drw)
1556 DK3_UNUSED_ARG(obj)
1557 fprintf(job->of1, f2leps_c8_kw[25], x, y);
1558 }
1559
1560
1561
1562 void
f2leps_eps_pure_lineto(f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED (obj),double x,double y)1563 f2leps_eps_pure_lineto(
1564 f2l_job_t *job,
1565 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
1566 dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED(obj),
1567 double x,
1568 double y
1569 )
1570 {
1571 DK3_UNUSED_ARG(drw)
1572 DK3_UNUSED_ARG(obj)
1573 fprintf(job->of1, f2leps_c8_kw[26], x, y);
1574 }
1575
1576
1577
1578 void
f2leps_eps_pure_curveto(f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED (obj),double xcs,double ycs,double xce,double yce,double xe,double ye)1579 f2leps_eps_pure_curveto(
1580 f2l_job_t *job,
1581 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
1582 dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED(obj),
1583 double xcs,
1584 double ycs,
1585 double xce,
1586 double yce,
1587 double xe,
1588 double ye
1589 )
1590 {
1591 DK3_UNUSED_ARG(drw)
1592 DK3_UNUSED_ARG(obj)
1593 fprintf(job->of1, f2leps_c8_kw[27], xcs, ycs, xce, yce, xe, ye);
1594 }
1595
1596
1597
1598 void
f2leps_eps_pure_closepath(f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED (obj))1599 f2leps_eps_pure_closepath(
1600 f2l_job_t *job,
1601 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
1602 dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED(obj)
1603 )
1604 {
1605 DK3_UNUSED_ARG(drw)
1606 DK3_UNUSED_ARG(obj)
1607 fputs(f2leps_c8_kw[28], job->of1);
1608 }
1609
1610
1611
1612 void
f2leps_eps_pure_fill(f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED (obj))1613 f2leps_eps_pure_fill(
1614 f2l_job_t *job,
1615 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
1616 dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED(obj)
1617 )
1618 {
1619 DK3_UNUSED_ARG(drw)
1620 DK3_UNUSED_ARG(obj)
1621 fputs(f2leps_c8_kw[29], job->of1);
1622 }
1623
1624
1625
1626 void
f2leps_eps_pure_clip(f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED (obj))1627 f2leps_eps_pure_clip(
1628 f2l_job_t *job,
1629 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
1630 dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED(obj)
1631 )
1632 {
1633 DK3_UNUSED_ARG(drw)
1634 DK3_UNUSED_ARG(obj)
1635 fputs(f2leps_c8_kw[30], job->of1);
1636 }
1637
1638
1639
1640 void
f2leps_eps_pure_stroke(f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED (obj))1641 f2leps_eps_pure_stroke(
1642 f2l_job_t *job,
1643 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
1644 dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED(obj)
1645 )
1646 {
1647 DK3_UNUSED_ARG(drw)
1648 DK3_UNUSED_ARG(obj)
1649 fputs(f2leps_c8_kw[31], job->of1);
1650 }
1651
1652
1653
1654 void
f2leps_eps_pure_gsave(f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED (obj))1655 f2leps_eps_pure_gsave(
1656 f2l_job_t *job,
1657 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
1658 dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED(obj)
1659 )
1660 {
1661 DK3_UNUSED_ARG(drw)
1662 DK3_UNUSED_ARG(obj)
1663 fputs(f2leps_c8_kw[15], job->of1);
1664 }
1665
1666
1667
1668 void
f2leps_eps_pure_grestore(f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED (obj))1669 f2leps_eps_pure_grestore(
1670 f2l_job_t *job,
1671 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
1672 dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED(obj)
1673 )
1674 {
1675 DK3_UNUSED_ARG(drw)
1676 DK3_UNUSED_ARG(obj)
1677 fputs(f2leps_c8_kw[16], job->of1);
1678 }
1679
1680
1681
1682 void
f2leps_eps_pure_setcolor(f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED (obj),double r,double g,double b)1683 f2leps_eps_pure_setcolor(
1684 f2l_job_t *job,
1685 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
1686 dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED(obj),
1687 double r,
1688 double g,
1689 double b
1690 )
1691 {
1692 DK3_UNUSED_ARG(drw)
1693 DK3_UNUSED_ARG(obj)
1694 fprintf(job->of1, f2leps_c8_kw[32], r, g, b);
1695 }
1696
1697
1698
1699 void
f2leps_eps_pure_set_line_width(f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED (obj),double lw)1700 f2leps_eps_pure_set_line_width(
1701 f2l_job_t *job,
1702 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
1703 dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED(obj),
1704 double lw
1705 )
1706 {
1707 DK3_UNUSED_ARG(drw)
1708 DK3_UNUSED_ARG(obj)
1709 fprintf(job->of1, f2leps_c8_kw[33], lw);
1710 }
1711
1712
1713
1714 void
f2leps_eps_pure_set_line_style(f2l_job_t * job,dk3_fig_drawing_t * drw,dk3_fig_obj_t * obj,int ls,double sv,double lw)1715 f2leps_eps_pure_set_line_style(
1716 f2l_job_t *job,
1717 dk3_fig_drawing_t *drw,
1718 dk3_fig_obj_t *obj,
1719 int ls,
1720 double sv,
1721 double lw
1722 )
1723 {
1724 f2leps_set_line_style(job->of1, job, drw, obj, ls, sv, lw);
1725 }
1726
1727
1728
1729 void
f2leps_eps_pure_set_line_end(f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED (obj),int le)1730 f2leps_eps_pure_set_line_end(
1731 f2l_job_t *job,
1732 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
1733 dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED(obj),
1734 int le
1735 )
1736 {
1737 DK3_UNUSED_ARG(drw)
1738 DK3_UNUSED_ARG(obj)
1739 fprintf(job->of1, f2leps_c8_kw[34], le);
1740 }
1741
1742
1743
1744 void
f2leps_eps_pure_set_line_join(f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED (obj),int lj)1745 f2leps_eps_pure_set_line_join(
1746 f2l_job_t *job,
1747 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
1748 dk3_fig_obj_t * DK3_SILENCE_ARG_UNUSED(obj),
1749 int lj
1750 )
1751 {
1752 DK3_UNUSED_ARG(drw)
1753 DK3_UNUSED_ARG(obj)
1754 fprintf(job->of1, f2leps_c8_kw[35], lj);
1755 }
1756
1757
1758
1759 void
f2leps_eps_pure_set_color_1(f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_rgb_color_t * rgb)1760 f2leps_eps_pure_set_color_1(
1761 f2l_job_t *job,
1762 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
1763 dk3_rgb_color_t *rgb
1764 )
1765 {
1766 DK3_UNUSED_ARG(drw)
1767 fprintf(job->of1, f2leps_c8_kw[32], rgb->r, rgb->g, rgb->b);
1768 }
1769
1770
1771
1772 void
f2leps_eps_pure_set_color_2(f2l_job_t * job,dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED (drw),dk3_rgb_color_t * rgb)1773 f2leps_eps_pure_set_color_2(
1774 f2l_job_t *job,
1775 dk3_fig_drawing_t * DK3_SILENCE_ARG_UNUSED(drw),
1776 dk3_rgb_color_t *rgb
1777 )
1778 {
1779 DK3_UNUSED_ARG(drw)
1780 fprintf(job->of1, f2leps_c8_kw[32], rgb->r, rgb->g, rgb->b);
1781 }
1782
1783
1784
1785 void
f2leps_eps_pure_debug(f2l_job_t * job,char const * msg)1786 f2leps_eps_pure_debug(
1787 f2l_job_t *job,
1788 char const *msg
1789 )
1790 {
1791 f2leps_debug(job->of1, job, msg);
1792 }
1793
1794