%% options copyright owner = Dirk Krause copyright year = 2012-2014 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" #include "dkt-version.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 # \%lg %lg moveto\n # # 26: Line to # \%lg %lg lineto\n # # 27: Curve to # \%lg %lg %lg %lg %lg %lg 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 # \%lg %lg %lg setrgbcolor\n # # 33: Set line width # \%lg 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. # [%lg %lg] 0 setdash\n # # 38: Dash-dotted line # [%lg %lg %lg %lg] 0 setdash\n # # 39: Dash-double-dotted line # [%lg %lg %lg %lg %lg %lg] 0 setdash\n # # 40: Dash-triple-dotted line # [%lg %lg %lg %lg %lg %lg %lg %lg] 0 setdash\n # # 41: Start of string. # ( # # 42: End of string. # ) # # 43: Font setup # /fnt%02d findfont %lg 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 # \%lg %lg translate\n # # 48: Rotate # \%lg 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, "%lg %lg\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); }