summaryrefslogtreecommitdiff
path: root/support/dktools/f2leps.ctr
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/dktools/f2leps.ctr
Initial commit
Diffstat (limited to 'support/dktools/f2leps.ctr')
-rw-r--r--support/dktools/f2leps.ctr2432
1 files changed, 2432 insertions, 0 deletions
diff --git a/support/dktools/f2leps.ctr b/support/dktools/f2leps.ctr
new file mode 100644
index 0000000000..6f88bf8ceb
--- /dev/null
+++ b/support/dktools/f2leps.ctr
@@ -0,0 +1,2432 @@
+%% options
+
+copyright owner = Dirk Krause
+copyright year = 2012-xxxx
+license = bsd
+
+
+
+%% header
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** Driver initialization for pdf with tex driver.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @return 1 on success, 0 on error.
+*/
+int
+f2leps_eps_with_tex_initialize(f2l_job_t *job, dk3_fig_drawing_t *drw);
+
+/** Driver cleanup for pdf with tex driver.
+ @param job Job structure.
+ @param drw Drawing structure.
+*/
+void
+f2leps_eps_with_tex_end(f2l_job_t *job, dk3_fig_drawing_t *drw);
+
+/** Write start of output for eps with tex driver.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @return 1 on success, 0 on error.
+*/
+int
+f2leps_eps_with_tex_start_processing(f2l_job_t *job, dk3_fig_drawing_t *drw);
+
+/** Write end of output for eps with tex driver.
+ @param job Job structure.
+ @param drw Drawing structure.
+*/
+void
+f2leps_eps_with_tex_end_processing(f2l_job_t *job, dk3_fig_drawing_t *drw);
+
+/** Open output files for eps with tex driver.
+ @param job Job structure.
+ @return 1 on success, 0 on error.
+*/
+int
+f2leps_eps_with_tex_open_output_files(f2l_job_t *job);
+
+/** Close output files for eps with tex driver.
+ @param job Job structure.
+*/
+void
+f2leps_eps_with_tex_close_output_files(f2l_job_t *job);
+
+/** Process one text object.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Current object to process.
+ @param x Point x.
+ @param y Point y.
+*/
+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
+);
+
+/** Process one image object.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Current object to process.
+ @param outbb Bounding box for image.
+ @param drawdir Drawing direction.
+ @param ec Pointer to error code variable, may be NULL.
+*/
+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
+);
+
+/** Start new path.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Current object to process.
+*/
+void
+f2leps_eps_with_tex_newpath(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+);
+
+/** Move to point.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Current object to process.
+ @param x Point x.
+ @param y Point y.
+*/
+void
+f2leps_eps_with_tex_moveto(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ double x,
+ double y
+);
+
+/** Draw line to point.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Current object to process.
+ @param x Point x.
+ @param y Point y.
+*/
+void
+f2leps_eps_with_tex_lineto(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ double x,
+ double y
+);
+
+/** Draw curve to point.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Current object to process.
+ @param xcs Start control point y.
+ @param ycs Start control point y.
+ @param xce End control point x.
+ @param yce End control point y.
+ @param xe End point x.
+ @param ye End point y.
+*/
+void
+f2leps_eps_with_tex_curveto(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ double xcs,
+ double ycs,
+ double xce,
+ double yce,
+ double xe,
+ double ye
+);
+
+/** Close path.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Current object to process.
+*/
+void
+f2leps_eps_with_tex_closepath(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+);
+
+/** Fill path.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Current object to process.
+*/
+void
+f2leps_eps_with_tex_fill(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+);
+
+/** Clip drawing operations to path.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Current object to process.
+*/
+void
+f2leps_eps_with_tex_clip(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+);
+
+/** Stroke path.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Current object to process.
+*/
+void
+f2leps_eps_with_tex_stroke(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+);
+
+/** Save graphics state.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Current object to process.
+*/
+void
+f2leps_eps_with_tex_gsave(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+);
+
+/** Restore graphics state.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Current object to process.
+*/
+void
+f2leps_eps_with_tex_grestore(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+);
+
+/** Set color.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Current object to process.
+ @param r Red.
+ @param g Green.
+ @param b Blue.
+*/
+void
+f2leps_eps_with_tex_setcolor(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ double r,
+ double g,
+ double b
+);
+
+/** Set line width.
+ The line width is not set again if we already
+ have a current line width equal to the new line width.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Fig Object.
+ @param lw New line width in output coordinates.
+*/
+void
+f2leps_eps_with_tex_set_line_width(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ double lw
+);
+
+/** Set line style.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Object to set up.
+ @param ls Line style, see @ref dk3figlinestyles.
+ @param sv Style value in output coordinates.
+ @param lw Dot length in output coordinates.
+*/
+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
+);
+
+/** Set line end.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Fig object.
+ @param le Line end, see @ref dk3figlinecap.
+*/
+void
+f2leps_eps_with_tex_set_line_end(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ int le
+);
+
+/** Set line join.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Fig object.
+ @param lj Line join style, see @ref dk3figlinejoin.
+*/
+void
+f2leps_eps_with_tex_set_line_join(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ int lj
+);
+
+/** Set current color or stroking color (PGF, PDF).
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param rgb New color value.
+*/
+void
+f2leps_eps_with_tex_set_color_1(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_rgb_color_t *rgb
+);
+
+/** Set non-stroking color (PGF, PDF).
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param rgb New color value.
+*/
+void
+f2leps_eps_with_tex_set_color_2(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_rgb_color_t *rgb
+);
+
+
+/** Write debugging line to output file.
+ @param job Job structure.
+ @param msg Message to write to output file.
+*/
+void
+f2leps_eps_with_tex_debug(
+ f2l_job_t *job,
+ char const *msg
+);
+
+/** Driver initialization for tex with pdf driver.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @return 1 on success, 0 on error.
+*/
+int
+f2leps_eps_pure_initialize(f2l_job_t *job, dk3_fig_drawing_t *drw);
+
+/** Driver cleanup for tex with pdf driver.
+ @param job Job structure.
+ @param drw Drawing structure.
+*/
+void
+f2leps_eps_pure_end(f2l_job_t *job, dk3_fig_drawing_t *drw);
+
+/** Write start of output for eps driver.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @return 1 on success, 0 on error.
+*/
+int
+f2leps_eps_pure_start_processing(f2l_job_t *job, dk3_fig_drawing_t *drw);
+
+/** Write end of output for eps driver.
+ @param job Job structure.
+ @param drw Drawing structure.
+*/
+void
+f2leps_eps_pure_end_processing(f2l_job_t *job, dk3_fig_drawing_t *drw);
+
+/** Open output files for eps driver.
+ @param job Job structure.
+ @return 1 on success, 0 on error.
+*/
+int
+f2leps_eps_pure_open_output_files(f2l_job_t *job);
+
+/** Close output files for eps driver.
+ @param job Job structure.
+*/
+void
+f2leps_eps_pure_close_output_files(f2l_job_t *job);
+
+/** Process one text object.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Current object to process.
+ @param x Point x.
+ @param y Point y.
+*/
+void
+f2leps_eps_pure_text_object(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ double x,
+ double y
+);
+
+/** Process one image object.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Current object to process.
+ @param outbb Bounding box for image.
+ @param drawdir Drawing direction.
+ @param ec Pointer to error code variable, may be NULL.
+*/
+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
+);
+
+/** Start new path.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Current object to process.
+*/
+void
+f2leps_eps_pure_newpath(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+);
+
+/** Move to point.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Current object to process.
+ @param x Point x.
+ @param y Point y.
+*/
+void
+f2leps_eps_pure_moveto(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ double x,
+ double y
+);
+
+/** Draw line to point.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Current object to process.
+ @param x Point x.
+ @param y Point y.
+*/
+void
+f2leps_eps_pure_lineto(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ double x,
+ double y
+);
+
+/** Draw curve to point.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Current object to process.
+ @param xcs Start control point y.
+ @param ycs Start control point y.
+ @param xce End control point x.
+ @param yce End control point y.
+ @param xe End point x.
+ @param ye End point y.
+*/
+void
+f2leps_eps_pure_curveto(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ double xcs,
+ double ycs,
+ double xce,
+ double yce,
+ double xe,
+ double ye
+);
+
+/** Close path.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Current object to process.
+*/
+void
+f2leps_eps_pure_closepath(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+);
+
+/** Fill path.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Current object to process.
+*/
+void
+f2leps_eps_pure_fill(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+);
+
+/** Clip drawing operations to path.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Current object to process.
+*/
+void
+f2leps_eps_pure_clip(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+);
+
+/** Stroke path.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Current object to process.
+*/
+void
+f2leps_eps_pure_stroke(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+);
+
+/** Save graphics state.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Current object to process.
+*/
+void
+f2leps_eps_pure_gsave(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+);
+
+/** Restore graphics state.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Current object to process.
+*/
+void
+f2leps_eps_pure_grestore(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+);
+
+/** Set color.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Current object to process.
+ @param r Red.
+ @param g Green.
+ @param b Blue.
+*/
+void
+f2leps_eps_pure_setcolor(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ double r,
+ double g,
+ double b
+);
+
+
+/** Set line width.
+ The line width is not set again if we already
+ have a current line width equal to the new line width.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Fig object.
+ @param lw New line width in output coordinates.
+*/
+void
+f2leps_eps_pure_set_line_width(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ double lw
+);
+
+/** Set line style.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Object to set up.
+ @param ls Line style, see @ref dk3figlinestyles.
+ @param sv Style value in output coordinates.
+ @param lw Dot length in output coordinates.
+*/
+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
+);
+
+/** Set line end.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Fig object.
+ @param le Line end, see @ref dk3figlinecap.
+*/
+void
+f2leps_eps_pure_set_line_end(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ int le
+);
+
+/** Set line join.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Fig object.
+ @param lj Line join style, see @ref dk3figlinejoin.
+*/
+void
+f2leps_eps_pure_set_line_join(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ int lj
+);
+
+/** Set current color or stroking color (PGF, PDF).
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param rgb New color value.
+*/
+void
+f2leps_eps_pure_set_color_1(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_rgb_color_t *rgb
+);
+
+/** Set non-stroking color (PGF, PDF).
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param rgb New color value.
+*/
+void
+f2leps_eps_pure_set_color_2(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_rgb_color_t *rgb
+);
+
+/** Write debugging line to output file.
+ @param job Job structure.
+ @param msg Message to write to output file.
+*/
+void
+f2leps_eps_pure_debug(
+ f2l_job_t *job,
+ char const *msg
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+%% module
+
+#include "dk3all.h"
+#include "dk3bezcu.h"
+#include "fig2lat.h"
+#include "f2lud.h"
+#include "f2lsvg.h"
+#include "f2leps.h"
+#include "dk3figto.h"
+#if 0
+#include "dkt-version.h"
+#endif
+#include "dk4vers.h"
+#include "dk3font.h"
+#include "dk3bm.h"
+#include "dk3bmeps.h"
+
+
+$!trace-include
+
+
+
+/** Drawing-related information for EPS output.
+*/
+typedef struct {
+ char const *shortOutFile; /**< Short output file name. */
+ dk3_sto_t *sFonts; /**< Fonts and sizes (dk3_fig_font_t). */
+ dk3_sto_it_t *iFonts; /**< Fonts storage iterator. */
+ int *fonts; /**< 35 flags: Font used. */
+ unsigned long nFonts; /**< Number of fonts in sFonts. */
+ int havetext; /**< Flag: Text to show as PS text. */
+ int alignedright; /**< Flag: Right-aligned text found. */
+ int alignedcenter; /**< Flag: Centered text found. */
+ int dictsize; /**< Size of dictionary. */
+} f2leps_drawing_info_t;
+
+
+
+#if 0
+/** Font reencoding to write ISO-LATIN-1 encoded strings.
+*/
+static char const * const f2leps_font_reencode_2[] = {
+$!text
+/FontReEncode % originalname encodedname --
+{
+ 5 dict begin /nn exch def /an exch def an findfont dup
+ length dict /nf exch def
+ {
+ 1 index /FID ne
+ { nf 3 1 roll put }
+ { pop pop }
+ ifelse
+ }
+ forall
+ nf /Encoding ISOLatin1Encoding put nn nf end definefont pop
+}
+def
+$!end
+};
+#else
+/** Font reencoding to write ISO-LATIN-1 encoded strings.
+*/
+static char const * const f2leps_font_reencode_2[] = {
+$!text
+/FontReEncode % originalname newname --
+{ % on nn
+ exch % nn on
+ findfont % nn of
+ dup % nn of of
+ length % nn of length
+ 1 add % nn of length
+ dict % nn of nf
+ exch % nn nf of
+ { % nn nf key value
+ 1 index % nn nf key value key
+ /FID eq % nn nf key value flag
+ { % nn nf key value
+ pop pop % nn nf
+ }
+ { % nn nf key value
+ 2 index % nn nf key value nf
+ 3 1 roll % nn nf nf key value
+ put % nn nf
+ }
+ ifelse % nn nf
+ }
+ forall % nn nf
+ dup % nn nf nf
+ /Encoding ISOLatin1Encoding put % nn nf
+ definefont % nf
+ pop %
+}
+def
+$!end
+};
+#endif
+
+#if 0
+
+/** Procedure for right aligned text.
+*/
+static char const * const f2leps_right_aligned_text[] = {
+$!text
+/TextAlignedRight % text --
+{
+ currentpoint % text x y
+ 3 -1 roll % x y text
+ dup % x y text text
+ true charpath % x y text
+ flattenpath % x y text
+ pathbbox % x y text x1 y1 x2 y2
+ pop exch pop % x y text x1 x2
+ exch sub abs % x y text length
+ newpath 4 -2 roll % text length x y
+ moveto % text length
+ 0 exch sub % text distance
+ 0 rmoveto % text
+ show %
+} def
+$!end
+};
+
+
+
+/** Procedure for centered text.
+*/
+static char const * const f2leps_centered_aligned_text[] = {
+$!text
+/TextAlignedCentered % text --
+{
+ currentpoint % text x y
+ 3 -1 roll % x y text
+ dup % x y text text
+ true charpath % x y text
+ flattenpath % x y text
+ pathbbox % x y text x1 y1 x2 y2
+ pop exch pop % x y text x1 x2
+ exch sub abs % x y text length
+ newpath 4 -2 roll % text length x y
+ moveto % text length
+ 0.5 mul % text distance
+ 0 exch sub % text xshift
+ 0 rmoveto % text
+ show %
+} def
+$!end
+};
+
+#else
+
+/** Procedure for right aligned text.
+*/
+static char const * const f2leps_right_aligned_text[] = {
+$!text
+/TextAlignedRight % x y text --
+{
+ dup % x y text text
+ newpath % x y text text
+ 0 0 moveto % x y text text
+ true charpath % x y text
+ pathbbox % x y text x1 y1 x2 y2
+ pop % x y text x1 y1 x2
+ exch % x y text x1 x2 y1
+ pop % x y text x1 x2
+ exch % x y text x2 x1
+ pop % x y text width
+ newpath % x y text width
+ 4 3 roll % y text width x
+ exch % y text x width
+ sub % y text x
+ 3 2 roll % text x y
+ moveto % text
+ show % -
+} def
+$!end
+};
+
+
+
+/** Procedure for centered text.
+*/
+static char const * const f2leps_centered_aligned_text[] = {
+$!text
+/TextAlignedCentered % x y text --
+{
+ dup % x y text text
+ newpath % x y text text
+ 0 0 moveto % x y text text
+ true charpath % x y text
+ pathbbox % x y text x1 y1 x2 y2
+ pop % x y text x1 y1 x2
+ exch % x y text x1 x2 y1
+ pop % x y text x1 x2
+ exch % x y text x2 x1
+ pop % x y text width
+ 0.5 mul % x y text width/2
+ newpath % x y text width/2
+ 4 3 roll % y text width/2 x
+ exch % y text x width/2
+ sub % y text x
+ 3 2 roll % text x y
+ moveto % text
+ show % -
+} def
+$!end
+};
+
+#endif
+
+
+
+/** Keywords used by the module.
+*/
+static
+char const * const f2leps_c8_kw[] = {
+$!string-table
+#
+# 0: Newline
+#
+\n
+#
+# 1: Space
+#
+
+#
+# 2: File header for PS level 3
+#
+\%!PS-Adobe-3.0 EPSF-3.0\n
+#
+# 3: File header for PS level 2
+#
+\%!PS-Adobe-2.0 EPSF-2.0\n
+#
+# 4: Language level 3
+#
+\%%LanguageLevel: 3\n
+#
+# 5: Language level 2
+#
+\%%LanguageLevel: 2\n
+#
+# 6: Bounding box
+#
+\%%BoundingBox:
+#
+# 7: Format string for bounding box data.
+#
+0 0 %ld %ld\n
+#
+# 8: Creator string
+#
+\%%Creator: http://dktools.sourceforge.net\n
+#
+# 9: Title string.
+#
+\%%Title: Converted Fig image\n
+#
+# 10: Pages
+#
+\%%Pages: 1\n
+#
+# 11: PageOrder
+#
+\%%PageOrder: Ascend\n
+#
+# 12: DocumentData
+#
+\%%DocumentData: Clean7Bit\n
+#
+# 13: EndComments
+#
+\%%EndComments\n
+#
+# 14: Page
+#
+\%%Page: 1 1\n
+#
+# 15: gsave
+#
+gsave\n
+#
+# 16: grestore
+#
+grestore\n
+#
+# 17: xxx dict begin
+#
+\%d dict begin\n
+#
+# 18: end
+#
+end\n
+#
+# 19: showpage
+#
+showpage\n
+#
+# 20: Trailer and EOF
+#
+\%%Trailer\n%%EOF\n
+#
+# 21: newpath
+#
+newpath\n
+#
+# 22: clip to bounding box
+#
+0 0 moveto %ld 0 lineto %ld %ld lineto 0 %ld lineto 0 0 lineto\n
+#
+# 23: Close path and clip
+#
+closepath clip\n
+#
+# 24: Font reencoding
+#
+/%s /fnt%02d FontReEncode\n
+#
+# 25: Move to
+#
+\%g %g moveto\n
+#
+# 26: Line to
+#
+\%g %g lineto\n
+#
+# 27: Curve to
+#
+\%g %g %g %g %g %g curveto\n
+#
+# 28: Close path
+#
+closepath\n
+#
+# 29: Fill using even/odd rule
+#
+eofill\n
+#
+# 30: Clip using even/odd rule
+#
+eoclip\n
+#
+# 31: Stroke
+#
+stroke\n
+#
+# 32: Set RGB color
+#
+\%g %g %g setrgbcolor\n
+#
+# 33: Set line width
+#
+\%g setlinewidth\n
+#
+# 34: Set line cap
+#
+\%d setlinecap\n
+#
+# 35: Set line join
+#
+\%d setlinejoin\n
+#
+# 36: Dash for solid line.
+#
+[] 0 setdash\n
+#
+# 37: Dashed line.
+#
+[%g %g] 0 setdash\n
+#
+# 38: Dash-dotted line
+#
+[%g %g %g %g] 0 setdash\n
+#
+# 39: Dash-double-dotted line
+#
+[%g %g %g %g %g %g] 0 setdash\n
+#
+# 40: Dash-triple-dotted line
+#
+[%g %g %g %g %g %g %g %g] 0 setdash\n
+#
+# 41: Start of string.
+#
+(
+#
+# 42: End of string.
+#
+)
+#
+# 43: Font setup
+#
+/fnt%02d findfont %g scalefont setfont\n
+#
+# 44: Show left-justified text
+#
+ show\n
+#
+# 45: Show centered text
+#
+ TextAlignedCentered\n
+#
+# 46: Show right-justified text
+#
+ TextAlignedRight\n
+#
+# 47: Translate
+#
+\%g %g translate\n
+#
+# 48: Rotate
+#
+\%g rotate\n
+#
+# 49: Go to origin
+#
+0 0 moveto\n
+#
+# 50: Procedure to show string.
+#
+ 3 -2 roll newpath moveto show\n
+#
+# 51: Origin coordinates
+#
+0 0
+#
+# 52: Start of debug line.
+#
+%
+$!end
+};
+
+
+$*
+Tool functions
+$*
+
+
+
+/** Destroy drawing info structure.
+ @param pdi Structure to destroy.
+*/
+static
+void
+f2leps_drawing_info_delete(
+ f2leps_drawing_info_t *pdi
+)
+{
+ void *ptr; /* Current text handling information to delete. */
+
+ if(pdi) {
+ dk3_release(pdi->shortOutFile);
+ if(pdi->sFonts) {
+ if(pdi->iFonts) {
+ dk3sto_it_reset(pdi->iFonts);
+ while(NULL != (ptr = dk3sto_it_next(pdi->iFonts))) {
+ dk3_delete(ptr);
+ }
+ dk3sto_it_close(pdi->iFonts);
+ }
+ dk3sto_close(pdi->sFonts);
+ } pdi->sFonts = NULL; pdi->iFonts = NULL;
+ dk3_release(pdi->fonts);
+ dk3_delete(pdi);
+ }
+}
+
+
+
+/** Create drawing information structure.
+ @param job Job structure.
+ @param withFonts Flag: Gather LaTeX font information.
+ This flag is set to 1 for EPS/LaTeX and set to 0 for
+ pure EPS.
+ @return Pointer to new structure on success, NULL on error.
+*/
+static
+f2leps_drawing_info_t *
+f2leps_drawing_info_new(
+ f2l_job_t *job,
+ int withFonts
+)
+{
+ f2leps_drawing_info_t *back;
+ int ok = 0;
+ back = dk3_new_app(f2leps_drawing_info_t,1,job->app);
+ if(back) {
+ back->nFonts = 0UL;
+ back->sFonts = NULL;
+ back->iFonts = NULL;
+ back->fonts = NULL;
+ back->havetext = 0;
+ back->alignedright = 0;
+ back->alignedcenter = 0;
+ back->dictsize = 0;
+ back->shortOutFile = NULL;
+ if(withFonts) {
+ back->sFonts = dk3sto_open_app(job->app);
+ if(back->sFonts) {
+ dk3sto_set_comp(back->sFonts, dk3fig_tool_font_compare, 0);
+ back->iFonts = dk3sto_it_open(back->sFonts);
+ if(back->iFonts) {
+ ok = 1;
+ }
+ }
+ } else {
+ back->fonts = dk3_new_app(int,35,job->app);
+ if(back->fonts) {
+ ok = 1;
+ }
+ }
+ if(!(ok)) {
+ f2leps_drawing_info_delete(back);
+ back = NULL;
+ }
+ }
+ return back;
+}
+
+
+
+/** Write a text section to the output file.
+ @param of Output file.
+ @param ta String array to write.
+*/
+static
+void
+f2leps_write_text_section(
+ FILE *of,
+ char const * const *ta
+)
+{
+ char const * const *ptr;
+ ptr = ta;
+ while(*ptr) {
+ fputs(*(ptr++), of);
+ fputc('\n', of);
+ }
+}
+
+
+
+/** Write EPS file header.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param of Output file.
+ @param pure Flag: Pure EPS (1) or EPS/LaTeX (0).
+*/
+static
+void
+f2leps_file_header(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ FILE *of,
+ int pure
+)
+{
+ f2leps_drawing_info_t *pdi;
+ int i;
+ pdi = (f2leps_drawing_info_t *)(drw->dsd);
+ /* %!PS-Adobe-3.0 EPSF-3.0 */
+ if(2 < job->pslevel) {
+ fputs(f2leps_c8_kw[2], of);
+ fputs(f2leps_c8_kw[4], of);
+ } else {
+ fputs(f2leps_c8_kw[3], of);
+ fputs(f2leps_c8_kw[5], of);
+ }
+ /* bounding box */
+ fputs(f2leps_c8_kw[6], of);
+ fprintf(of, f2leps_c8_kw[7], job->lwidth, job->lheight);
+ if(job->dsc) {
+ /* Creator */
+ fputs(f2leps_c8_kw[8], of);
+ /* Title */
+ fputs(f2leps_c8_kw[9], of);
+ /* Pages */
+ fputs(f2leps_c8_kw[10], of);
+ /* PageOrder */
+ fputs(f2leps_c8_kw[11], of);
+ /* DocumentData */
+ fputs(f2leps_c8_kw[12], of);
+ if(pure) {
+ /* ##### HIER WEITER: DocumentNeededFonts */
+ }
+ /* EndComments */
+ fputs(f2leps_c8_kw[13], of);
+ /* Page */
+ fputs(f2leps_c8_kw[14], of);
+ }
+ fputs(f2leps_c8_kw[15], of);
+ fputs(f2leps_c8_kw[21], of);
+ fprintf(
+ of, f2leps_c8_kw[22],
+ job->lwidth, job->lwidth, job->lheight, job->lheight
+ );
+ fputs(f2leps_c8_kw[23], of);
+ if(pure) {
+ /* xxx dict begin */
+ fprintf(of, f2leps_c8_kw[17], pdi->dictsize);
+ }
+ /* Text procedures */
+ if(pdi->havetext) {
+ f2leps_write_text_section(of, f2leps_font_reencode_2);
+ if(pdi->alignedcenter) {
+ f2leps_write_text_section(of, f2leps_centered_aligned_text);
+ }
+ if(pdi->alignedright) {
+ f2leps_write_text_section(of, f2leps_right_aligned_text);
+ }
+ /* Font reencodings */
+ for(i = 0; i < 35; i++) {
+ if((pdi->fonts)[i]) {
+ fprintf(of, f2leps_c8_kw[24], dk3font_get_ps_font_name(i), i);
+ }
+ }
+ }
+}
+
+
+
+/** Write EPS file header.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param of Output file.
+ @param pure Flag: Pure EPS (1) or EPS/LaTeX (0).
+*/
+static
+void
+f2leps_file_footer(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ FILE *of,
+ int pure
+)
+{
+ if(pure) {
+ /* end */
+ fputs(f2leps_c8_kw[18], of);
+ }
+ /* grestore */
+ fputs(f2leps_c8_kw[16], of);
+ if(job->showpage) {
+ /* showpage */
+ fputs(f2leps_c8_kw[19], of);
+ }
+ if(job->dsc) {
+ /* Trailer, EOF */
+ fputs(f2leps_c8_kw[20], of);
+ }
+}
+
+
+
+/** Check whether a text character is literal.
+ @param c Character to check.
+ @return 1 to issue character as is, 0 for octal encoding.
+*/
+static
+int
+f2leps_is_literal(char c)
+{
+ int back = 0;
+ if(('A' <= c) && ('Z' >= c)) {
+ back = 1;
+ } else {
+ if(('a' <= c) && ('z' >= c)) {
+ back = 1;
+ } else {
+ if(('0' <= c) && ('9' >= c)) {
+ back = 1;
+ } else {
+ switch(c) {
+ case ' ':
+ {
+ back = 1;
+ } break;
+ }
+ }
+ }
+ }
+ return back;
+}
+
+
+
+/** Write string PS-encoded to output.
+ @param of Output file.
+ @param str String to write.
+*/
+static
+void
+f2leps_encode_string(
+ FILE *of,
+ char const *str
+)
+{
+ char buf[32];
+ char const *ptr;
+ char c;
+ unsigned char uc;
+ unsigned u;
+ ptr = str;
+ fputs(f2leps_c8_kw[41], of);
+ while(*ptr) {
+ c = *(ptr++);
+ if(f2leps_is_literal(c)) {
+ fputc(c, of);
+ } else {
+ uc = (unsigned char)c;
+ u = (unsigned)uc;
+ while(255 < u) { u = u - 256; }
+ sprintf(buf, "\\%03o", u);
+ fputs(buf, of);
+ }
+ }
+ fputs(f2leps_c8_kw[42], of);
+}
+
+
+
+/** Process an embedded bitmap image.
+ @param of Output file.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Image object.
+ @param outbb Destination image area.
+ @param drawdir Drawing direction / coordinates origin.
+ @param ec Pointer to error code variable.
+*/
+static
+void
+f2leps_image_object(
+ FILE *of,
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ dk3_bb_t *outbb,
+ int drawdir,
+ int *ec
+)
+{
+ int res = 0;
+ res = dk3bm_ps_place_object(
+ of,outbb,drawdir,(obj->dt).pol.fn,job->app,job->pslevel,ec
+ );
+ if(!(res)) {
+ job->exval = FIG2LAT_EXIT_ERROR_UNKNOWN; $? ". exitcode"
+ }
+}
+
+
+
+/** Set line style.
+ @param of Output file.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param obj Object using the line style.
+ @param ls Line style.
+ @param sv Style value (gap length).
+ @param lw Line width.
+*/
+static
+void
+f2leps_set_line_style(
+ FILE *of,
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ int ls,
+ double sv,
+ double lw
+)
+{
+ double gw; /* Gap width. */
+ gw = f2lto_find_gap_length(job, lw, sv);
+ switch(ls) {
+ case DK3_FIG_LS_DASHED: {
+ fprintf(of, f2leps_c8_kw[37], sv, gw);
+ } break;
+ case DK3_FIG_LS_DOTTED: {
+ fprintf(of, f2leps_c8_kw[37], lw, gw);
+ } break;
+ case DK3_FIG_LS_DASH_DOTTED: {
+ fprintf(of, f2leps_c8_kw[38], sv, gw, lw, gw);
+ } break;
+ case DK3_FIG_LS_DASH_DOUBLE_DOTTED: {
+ fprintf(of, f2leps_c8_kw[39], sv, gw, lw, gw, lw, gw);
+ } break;
+ case DK3_FIG_LS_DASH_TRIPLE_DOTTED: {
+ fprintf(of, f2leps_c8_kw[40], sv, gw, lw, gw, lw, gw, lw, gw);
+ } break;
+ default: {
+ fputs(f2leps_c8_kw[36], of);
+ } break;
+ }
+}
+
+
+
+/** Write debug line to output.
+ @param of Output file.
+ @param job Job structure.
+ @param msg Message text to write.
+*/
+static
+void
+f2leps_debug(
+ FILE *of,
+ f2l_job_t *job,
+ char const *msg
+)
+{
+ if((job) && (msg)) {
+ fputs(f2leps_c8_kw[52], of);
+ fputs(msg, of);
+ fputs(f2leps_c8_kw[0], of);
+ }
+}
+
+
+
+$*
+Driver: EPS with LaTeX
+$*
+
+
+int
+f2leps_eps_with_tex_initialize(f2l_job_t *job, dk3_fig_drawing_t *drw)
+{
+ f2leps_drawing_info_t *pdi;
+ dk3_fig_obj_t *pobj;
+ dkChar const *oldsourcename = NULL;
+ unsigned long oldsourceline = 0UL;
+ int back = 0;
+ int ff;
+ $? "+ f2leps_eps_with_tex_initialize"
+ drw->dsd = (void *)(pdi = f2leps_drawing_info_new(job, 1));
+ if(drw->dsd) { $? ". dsd"
+ oldsourcename = dk3app_get_source_file(job->app);
+ oldsourceline = dk3app_get_source_line(job->app);
+ pdi->shortOutFile = dk3fig_tool_short_output_file_name(job->on2, job->app);
+ if(pdi->shortOutFile) { $? ". shortOutFile"
+ back = 1; $? ". back = 1"
+ dk3sto_it_reset(drw->iobj);
+ while(NULL != (pobj = (dk3_fig_obj_t *)dk3sto_it_next(drw->iobj))) {
+ $? ". object found %d %d", pobj->ot, pobj->st
+ dk3app_set_source_line(job->app, pobj->li);
+ switch(pobj->ot) {
+ case DK3_FIG_OBJ_TEXT: { $? ". text"
+ ff = (pobj->dt).txt.ff;
+ if(!(ff & DK3_FIG_FONT_FLAG_HIDDEN)) { $? ". not hidden"
+ if(!(ff & DK3_FIG_FONT_FLAG_SPECIAL)) { $? ". not special"
+ if(ff & DK3_FIG_FONT_FLAG_PS) { $? ". PS font"
+ if(job->ntf) { $? ". ntf"
+ pobj->dsd = (void *)f2l_tool_register_font(
+ pdi->sFonts, pdi->iFonts, &(pdi->nFonts),
+ (pobj->dt).txt.fo, (pobj->dt).txt.fs, job->app
+ );
+ if(!(pobj->dsd)) {
+ back = 0;
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); $? ". exitcode"
+ }
+ } else { $? ". no ntf"
+ }
+ }
+ }
+ }
+ } break;
+ }
+ }
+ } else { $? "! shortOutFile"
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); $? ". exitcode"
+ }
+ dk3app_set_source_file(job->app, oldsourcename);
+ dk3app_set_source_line(job->app, oldsourceline);
+ } else { $? "! dsd"
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); $? ". exitcode"
+ } $? "- f2leps_eps_with_tex_initialize %d", back
+ return back;
+}
+
+
+
+void
+f2leps_eps_with_tex_end(f2l_job_t *job, dk3_fig_drawing_t *drw)
+{
+ $? "+ f2leps_eps_with_tex_end"
+ if(drw->dsd) {
+ f2leps_drawing_info_delete((f2leps_drawing_info_t *)(drw->dsd));
+ }
+ $? "- f2leps_eps_with_tex_end"
+}
+
+
+
+int
+f2leps_eps_with_tex_open_output_files(f2l_job_t *job)
+{
+ int back = 0;
+ $? "+ f2leps_eps_with_tex_open_output_files"
+ job->of1 = dk3sf_fopen_app(job->on1, dkT("w"), job->app);
+ if(job->of1) {
+ job->of2 = dk3sf_fopen_app(job->on2, dkT("wb"), job->app);
+ if(job->of2) {
+ back = 1;
+ } else {
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); $? ". exitcode"
+ }
+ } else {
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); $? ". exitcode"
+ }
+ $? "- f2leps_eps_with_tex_open_output_files %d", back
+ return back;
+}
+
+
+
+void
+f2leps_eps_with_tex_close_output_files(f2l_job_t *job)
+{
+ $? "+ f2leps_eps_with_tex_close_output_files"
+ if(job->of2) {
+ dk3sf_fclose_app(job->of2, job->app);
+ } job->of2 = NULL;
+ if(job->of1) {
+ dk3sf_fclose_app(job->of1, job->app);
+ } job->of1 = NULL;
+ $? "- f2leps_eps_with_tex_close_output_files"
+}
+
+
+
+int
+f2leps_eps_with_tex_start_processing(f2l_job_t *job, dk3_fig_drawing_t *drw)
+{
+ f2leps_drawing_info_t *pdi;
+ int back = 1;
+ $? "+ f2leps_eps_with_tex_start_processing"
+ pdi = (f2leps_drawing_info_t *)(drw->dsd);
+ f2leps_file_header(job, drw, job->of2, 0);
+ f2l_tool_start_tex_part(
+ job->of1, job, drw, pdi->shortOutFile, pdi->iFonts, pdi->nFonts
+ );
+ $? "- f2leps_eps_with_tex_start_processing %d", back
+ return back;
+}
+
+
+
+void
+f2leps_eps_with_tex_end_processing(f2l_job_t *job, dk3_fig_drawing_t *drw)
+{
+ $? "+ f2leps_eps_with_tex_end_processing"
+ f2leps_file_footer(job, drw, job->of2, 0);
+ f2l_tool_end_tex_part(job->of1);
+ $? "- f2leps_eps_with_tex_end_processing"
+}
+
+
+
+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
+)
+{
+ f2leps_drawing_info_t *pdi;
+ pdi = (f2leps_drawing_info_t *)(drw->dsd);
+ f2l_tool_text_object(job->of1, job, drw, obj, x, y, pdi->nFonts);
+}
+
+
+
+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
+)
+{
+ f2leps_image_object(job->of2, job, drw, obj, outbb, drawdir, ec);
+}
+
+
+void
+f2leps_eps_with_tex_newpath(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+)
+{
+ fputs(f2leps_c8_kw[21], job->of2);
+}
+
+
+
+void
+f2leps_eps_with_tex_moveto(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ double x,
+ double y
+)
+{
+ fprintf(job->of2, f2leps_c8_kw[25], x, y);
+}
+
+
+
+void
+f2leps_eps_with_tex_lineto(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ double x,
+ double y
+)
+{
+ fprintf(job->of2, f2leps_c8_kw[26], x, y);
+}
+
+
+
+void
+f2leps_eps_with_tex_curveto(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ double xcs,
+ double ycs,
+ double xce,
+ double yce,
+ double xe,
+ double ye
+)
+{
+ fprintf(job->of2, f2leps_c8_kw[27], xcs, ycs, xce, yce, xe, ye);
+}
+
+
+
+void
+f2leps_eps_with_tex_closepath(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+)
+{
+ fputs(f2leps_c8_kw[28], job->of2);
+}
+
+
+
+void
+f2leps_eps_with_tex_fill(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+)
+{
+ fputs(f2leps_c8_kw[29], job->of2);
+}
+
+
+
+void
+f2leps_eps_with_tex_clip(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+)
+{
+ fputs(f2leps_c8_kw[30], job->of2);
+}
+
+
+
+void
+f2leps_eps_with_tex_stroke(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+)
+{
+ fputs(f2leps_c8_kw[31], job->of2);
+}
+
+
+
+void
+f2leps_eps_with_tex_gsave(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+)
+{
+ fputs(f2leps_c8_kw[15], job->of2);
+}
+
+
+
+void
+f2leps_eps_with_tex_grestore(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+)
+{
+ fputs(f2leps_c8_kw[16], job->of2);
+}
+
+
+
+void
+f2leps_eps_with_tex_setcolor(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ double r,
+ double g,
+ double b
+)
+{
+ fprintf(job->of2, f2leps_c8_kw[32], r, g, b);
+}
+
+
+
+void
+f2leps_eps_with_tex_set_line_width(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ double lw
+)
+{
+ fprintf(job->of2, f2leps_c8_kw[33], lw);
+}
+
+
+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
+)
+{
+ f2leps_set_line_style(job->of2, job, drw, obj, ls, sv, lw);
+}
+
+
+
+void
+f2leps_eps_with_tex_set_line_end(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ int le
+)
+{
+ fprintf(job->of2, f2leps_c8_kw[34], le);
+}
+
+
+
+void
+f2leps_eps_with_tex_set_line_join(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ int lj
+)
+{
+ fprintf(job->of2, f2leps_c8_kw[35], lj);
+}
+
+
+
+void
+f2leps_eps_with_tex_set_color_1(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_rgb_color_t *rgb
+)
+{
+ fprintf(job->of2, f2leps_c8_kw[32], rgb->r, rgb->g, rgb->b);
+}
+
+
+
+void
+f2leps_eps_with_tex_set_color_2(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_rgb_color_t *rgb
+)
+{
+ fprintf(job->of2, f2leps_c8_kw[32], rgb->r, rgb->g, rgb->b);
+}
+
+
+
+void
+f2leps_eps_with_tex_debug(
+ f2l_job_t *job,
+ char const *msg
+)
+{
+ f2leps_debug(job->of2, job, msg);
+}
+
+
+$*
+Driver: EPS standalone file
+$*
+
+
+int
+f2leps_eps_pure_initialize(f2l_job_t *job, dk3_fig_drawing_t *drw)
+{
+ f2leps_drawing_info_t *pdi;
+ dk3_fig_obj_t *pobj;
+ int back = 0;
+ int fn;
+ int i;
+ int ff;
+ drw->dsd = (void *)(pdi = f2leps_drawing_info_new(job, 0));
+ if(drw->dsd) {
+ back = 1;
+ /* Inspect all elements.
+ */
+ dk3sto_it_reset(drw->iobj);
+ while(NULL != (pobj = (dk3_fig_obj_t *)dk3sto_it_next(drw->iobj))) {
+ switch(pobj->ot) {
+ case DK3_FIG_OBJ_TEXT: {
+ ff = (pobj->dt).txt.ff;
+ if(!(ff & DK3_FIG_FONT_FLAG_HIDDEN)) {
+ if(!(ff & DK3_FIG_FONT_FLAG_SPECIAL)) {
+ pdi->havetext = 1;
+ switch(pobj->st) {
+ case 1: {
+ pdi->alignedcenter = 1;
+ } break;
+ case 2: {
+ pdi->alignedright = 1;
+ } break;
+ }
+ fn = dk3fig_tool_ps_font_number(pobj);
+ if(-1 < fn) {
+ if(35 > fn) {
+ (pdi->fonts)[fn] = 1;
+ }
+ }
+ }
+ }
+ } break;
+ case DK3_FIG_OBJ_ELLIPSE:
+ case DK3_FIG_OBJ_POLYLINE:
+ case DK3_FIG_OBJ_SPLINE:
+ case DK3_FIG_OBJ_ARC: {
+ } break;
+ }
+ }
+ /* Calculate dictionary size.
+ */
+ for(i = 0; i < 35; i++) {
+ if((pdi->fonts)[i]) { /* Fonts */
+ pdi->dictsize += 1;
+ }
+ }
+ if(pdi->havetext) { /* Font reencode procedure */
+ pdi->dictsize += 1;
+ }
+ if(pdi->alignedcenter) { /* Procedure to show centered text. */
+ pdi->dictsize += 1;
+ }
+ if(pdi->alignedright) { /* Procedure to show right-algigned. */
+ pdi->dictsize += 1;
+ }
+ pdi->dictsize += 5; /* Reserve. */
+ } else {
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); $? ". exitcode"
+ }
+ return back;
+}
+
+
+
+void
+f2leps_eps_pure_end(f2l_job_t *job, dk3_fig_drawing_t *drw)
+{
+ if(drw->dsd) {
+ f2leps_drawing_info_delete((f2leps_drawing_info_t *)(drw->dsd));
+ }
+}
+
+
+
+int
+f2leps_eps_pure_open_output_files(f2l_job_t *job)
+{
+ int back = 0;
+ job->of1 = dk3sf_fopen_app(job->on1, dkT("wb"), job->app);
+ if(job->of1) {
+ back = 1;
+ } else {
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); $? ". exitcode"
+ }
+ return back;
+}
+
+
+
+void
+f2leps_eps_pure_close_output_files(f2l_job_t *job)
+{
+ if(job->of1) {
+ dk3sf_fclose_app(job->of1, job->app);
+ } job->of1 = NULL;
+}
+
+
+
+int
+f2leps_eps_pure_start_processing(f2l_job_t *job, dk3_fig_drawing_t *drw)
+{
+ int back = 1;
+ f2leps_file_header(job, drw, job->of1, 1);
+ return back;
+}
+
+
+
+void
+f2leps_eps_pure_end_processing(f2l_job_t *job, dk3_fig_drawing_t *drw)
+{
+ f2leps_file_footer(job, drw, job->of1, 1);
+}
+
+
+
+void
+f2leps_eps_pure_text_object(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ double x,
+ double y
+)
+{
+ dk3_rgb_color_t rgb;
+ double fs;
+ int ff;
+ int fn;
+ int muc;
+ ff = (obj->dt).txt.ff;
+ if(!(ff & DK3_FIG_FONT_FLAG_HIDDEN)) {
+ if(!(ff & DK3_FIG_FONT_FLAG_SPECIAL)) {
+ fn = dk3fig_tool_ps_font_number(obj);
+ if(-1 < fn) {
+ if((obj->dt).txt.st) {
+ /* Set color */
+ dk3fig_tool_find_color(&rgb, drw, (obj->pc), 20);
+ muc = dk3fig_tool_must_set_color(
+ (job->gs).hc1, (job->gs).c1.r, (job->gs).c1.g, (job->gs).c1.b,
+ rgb.r, rgb.g, rgb.b
+ );
+ if(muc) {
+ fprintf(job->of1, f2leps_c8_kw[32], rgb.r, rgb.g, rgb.b);
+ (job->gs).c1.r = rgb.r;
+ (job->gs).c1.g = rgb.g;
+ (job->gs).c1.b = rgb.b;
+ (job->gs).c2.r = rgb.r;
+ (job->gs).c2.g = rgb.g;
+ (job->gs).c2.b = rgb.b;
+ (job->gs).hc1 = 1;
+ (job->gs).hc2 = 1;
+ }
+ /* Set font */
+ fs = (obj->dt).txt.fs;
+ if(0.0 < job->nts) { fs = fs * job->nts; }
+ muc = dk3fig_tool_must_set_font(
+ (job->gs).hfn, (job->gs).fn, (job->gs).fs, fn, fs
+ );
+ if(muc) {
+ fprintf(job->of1, f2leps_c8_kw[43], fn, fs);
+ (job->gs).hfn = 1;
+ (job->gs).fn = fn;
+ (job->gs).fs = fs;
+ }
+ if(1.0e-6 < fabs((obj->dt).txt.an)) { /* rotated */
+ /* gsave */
+ fputs(f2leps_c8_kw[15], job->of1);
+ /* translate */
+ fprintf(job->of1, f2leps_c8_kw[47], x, y);
+ /* rotate */
+ fprintf(
+ job->of1, f2leps_c8_kw[48],
+ ((180.0 * (obj->dt).txt.an) / M_PI)
+ );
+#if 0
+ /* newpath */
+ fputs(f2leps_c8_kw[21], job->of1);
+ /* 0 0 moveto */
+ fputs(f2leps_c8_kw[49], job->of1);
+ /* string */
+ f2leps_encode_string(job->of1, (obj->dt).txt.st);
+ /* show/show aligned */
+ switch(obj->st) {
+ case 2: {
+ fputs(f2leps_c8_kw[46], job->of1);
+ } break;
+ case 1: {
+ fputs(f2leps_c8_kw[45], job->of1);
+ } break;
+ default: {
+ fputs(f2leps_c8_kw[44], job->of1);
+ } break;
+ }
+#else
+ fputs(f2leps_c8_kw[51], job->of1);
+ /* string */
+ f2leps_encode_string(job->of1, (obj->dt).txt.st);
+ /* show/show aligned */
+ switch(obj->st) {
+ case 2: {
+ fputs(f2leps_c8_kw[46], job->of1);
+ } break;
+ case 1: {
+ fputs(f2leps_c8_kw[45], job->of1);
+ } break;
+ default: {
+ fputs(f2leps_c8_kw[50], job->of1);
+ } break;
+ }
+#endif
+ /* grestore */
+ fputs(f2leps_c8_kw[16], job->of1);
+ } else { /* not rotated */
+#if 0
+ /* newpath */
+ fputs(f2leps_c8_kw[21], job->of1);
+ /* moveto */
+ fprintf(job->of1, f2leps_c8_kw[25], x, y);
+ /* string */
+ f2leps_encode_string(job->of1, (obj->dt).txt.st);
+ /* show/show aligned */
+ switch(obj->st) {
+ case 2: {
+ fputs(f2leps_c8_kw[46], job->of1);
+ } break;
+ case 1: {
+ fputs(f2leps_c8_kw[45], job->of1);
+ } break;
+ default: {
+ fputs(f2leps_c8_kw[44], job->of1);
+ } break;
+ }
+#else
+ fprintf(job->of1, "%g %g\n", x, y);
+ /* string */
+ f2leps_encode_string(job->of1, (obj->dt).txt.st);
+ /* show/show aligned */
+ switch(obj->st) {
+ case 2: {
+ fputs(f2leps_c8_kw[46], job->of1);
+ } break;
+ case 1: {
+ fputs(f2leps_c8_kw[45], job->of1);
+ } break;
+ default: {
+ fputs(f2leps_c8_kw[50], job->of1);
+ } break;
+ }
+#endif
+ }
+ } else {
+ /* ##### BUG: No string */
+ }
+ } else {
+ /* ##### BUG: No font number found! */
+ }
+ } else {
+ /* Warning: Skipping special text! */
+ dk3app_log_1(job->app, DK3_LL_WARNING, job->msg, 41);
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYNTAX); $? ". exitcode"
+ }
+ }
+}
+
+
+
+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
+)
+{
+ f2leps_image_object(job->of1, job, drw, obj, outbb, drawdir, ec);
+}
+
+
+void
+f2leps_eps_pure_newpath(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+)
+{
+ fputs(f2leps_c8_kw[21], job->of1);
+}
+
+
+
+void
+f2leps_eps_pure_moveto(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ double x,
+ double y
+)
+{
+ fprintf(job->of1, f2leps_c8_kw[25], x, y);
+}
+
+
+
+void
+f2leps_eps_pure_lineto(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ double x,
+ double y
+)
+{
+ fprintf(job->of1, f2leps_c8_kw[26], x, y);
+}
+
+
+
+void
+f2leps_eps_pure_curveto(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ double xcs,
+ double ycs,
+ double xce,
+ double yce,
+ double xe,
+ double ye
+)
+{
+ fprintf(job->of1, f2leps_c8_kw[27], xcs, ycs, xce, yce, xe, ye);
+}
+
+
+
+void
+f2leps_eps_pure_closepath(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+)
+{
+ fputs(f2leps_c8_kw[28], job->of1);
+}
+
+
+
+void
+f2leps_eps_pure_fill(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+)
+{
+ fputs(f2leps_c8_kw[29], job->of1);
+}
+
+
+
+void
+f2leps_eps_pure_clip(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+)
+{
+ fputs(f2leps_c8_kw[30], job->of1);
+}
+
+
+
+void
+f2leps_eps_pure_stroke(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+)
+{
+ fputs(f2leps_c8_kw[31], job->of1);
+}
+
+
+
+void
+f2leps_eps_pure_gsave(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+)
+{
+ fputs(f2leps_c8_kw[15], job->of1);
+}
+
+
+
+void
+f2leps_eps_pure_grestore(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+)
+{
+ fputs(f2leps_c8_kw[16], job->of1);
+}
+
+
+
+void
+f2leps_eps_pure_setcolor(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ double r,
+ double g,
+ double b
+)
+{
+ fprintf(job->of1, f2leps_c8_kw[32], r, g, b);
+}
+
+
+
+void
+f2leps_eps_pure_set_line_width(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ double lw
+)
+{
+ fprintf(job->of1, f2leps_c8_kw[33], lw);
+}
+
+
+
+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
+)
+{
+ f2leps_set_line_style(job->of1, job, drw, obj, ls, sv, lw);
+}
+
+
+
+void
+f2leps_eps_pure_set_line_end(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ int le
+)
+{
+ fprintf(job->of1, f2leps_c8_kw[34], le);
+}
+
+
+
+void
+f2leps_eps_pure_set_line_join(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ int lj
+)
+{
+ fprintf(job->of1, f2leps_c8_kw[35], lj);
+}
+
+
+
+void
+f2leps_eps_pure_set_color_1(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_rgb_color_t *rgb
+)
+{
+ fprintf(job->of1, f2leps_c8_kw[32], rgb->r, rgb->g, rgb->b);
+}
+
+
+
+void
+f2leps_eps_pure_set_color_2(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_rgb_color_t *rgb
+)
+{
+ fprintf(job->of1, f2leps_c8_kw[32], rgb->r, rgb->g, rgb->b);
+}
+
+
+
+void
+f2leps_eps_pure_debug(
+ f2l_job_t *job,
+ char const *msg
+)
+{
+ f2leps_debug(job->of1, job, msg);
+}
+