summaryrefslogtreecommitdiff
path: root/support/dktools/f2lpdf.c
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/f2lpdf.c
Initial commit
Diffstat (limited to 'support/dktools/f2lpdf.c')
-rw-r--r--support/dktools/f2lpdf.c1493
1 files changed, 1493 insertions, 0 deletions
diff --git a/support/dktools/f2lpdf.c b/support/dktools/f2lpdf.c
new file mode 100644
index 0000000000..45e44416e7
--- /dev/null
+++ b/support/dktools/f2lpdf.c
@@ -0,0 +1,1493 @@
+/*
+ WARNING: This file was generated by dkct.
+ Changes you make here will be lost if dkct is run again!
+ You should modify the original source and run dkct on it.
+ Original source: f2lpdf.ctr
+*/
+
+/*
+Copyright (C) 2012-2017, Dirk Krause
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above opyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+* Neither the name of the author nor the names of contributors may be used
+ to endorse or promote products derived from this software without specific
+ prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/** @file f2lpdf.c The f2lpdf module.
+*/
+
+
+#line 699 "f2lpdf.ctr"
+
+#include "dk3all.h"
+#include "dk3bezcu.h"
+#include "fig2lat.h"
+#include "f2lud.h"
+#include "f2lsvg.h"
+#include "f2lpdf.h"
+#include "dk3figto.h"
+#if 0
+#include "dkt-version.h"
+#endif
+#include "dk4vers.h"
+#include "dk3bmeo.h"
+#include "dk3bm.h"
+#include "dk3pdf.h"
+#include "dk3bif.h"
+
+
+
+
+
+#line 719 "f2lpdf.ctr"
+
+
+
+/** Driver specific details for entire drawing.
+*/
+typedef struct {
+ dk3_pdf_t *opdf; /**< Output PDF. */
+ dk3_sto_t *sFonts; /**< Storage for fonts. */
+ dk3_sto_it_t *iFonts; /**< Iterator for font storage. */
+ dk3_sto_t *sImages; /**< Storage for image data. */
+ dk3_sto_it_t *iImages; /**< Iterator for images storage. */
+ char const *shortOutFile; /**< Short output file name. */
+ unsigned long nFonts; /**< Number of fonts in sFonts. */
+ unsigned long nImages; /**< Number of images in sImages. */
+} f2l_pdf_drawing_info_t;
+
+
+
+
+
+
+/* ************************************************************************ */
+/* * * */
+/* * Tool functions. * */
+/* * * */
+/* ************************************************************************ */
+
+
+#line 743 "f2lpdf.ctr"
+
+
+
+/** Delete driver-specific details.
+ @param ptr Structure to delete.
+*/
+static
+void
+f2lpdf_drawing_info_delete(f2l_pdf_drawing_info_t *ptr)
+{
+ f2l_text_handling_t *th;
+ f2l_image_t *im;
+
+
+#line 756 "f2lpdf.ctr"
+ if(ptr) {
+ dk3_release(ptr->shortOutFile);
+ if(ptr->opdf) {
+ dk3pdf_close(ptr->opdf);
+ } ptr->opdf = NULL;
+ if(ptr->sFonts) {
+ if(ptr->iFonts) {
+ dk3sto_it_reset(ptr->iFonts);
+ while(NULL != (th = (f2l_text_handling_t *)dk3sto_it_next(ptr->iFonts)))
+ {
+ dk3_delete(th);
+ }
+ dk3sto_it_close(ptr->iFonts);
+ }
+ dk3sto_close(ptr->sFonts);
+ } ptr->sFonts = NULL; ptr->iFonts = NULL;
+ if(ptr->sImages) {
+ if(ptr->iImages) {
+ dk3sto_it_reset(ptr->iImages);
+ while(NULL != (im = (f2l_image_t *)dk3sto_it_next(ptr->iImages))) {
+ f2l_tool_image_delete(im);
+ }
+ dk3sto_it_close(ptr->iImages);
+ }
+ dk3sto_close(ptr->sImages);
+ } ptr->sImages = NULL; ptr->iImages = NULL;
+ ptr->nFonts = 0UL;
+ ptr->nImages = 0UL;
+ dk3_delete(ptr);
+ }
+
+#line 786 "f2lpdf.ctr"
+}
+
+
+
+/** Create structure for driver-specific details.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @return Pointer to new structure on success, NULL on error.
+*/
+static
+f2l_pdf_drawing_info_t *
+f2lpdf_drawing_info_new(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw
+)
+{
+ f2l_pdf_drawing_info_t *back = NULL;
+ int ok = 0; /* Flag: No error. */
+
+
+#line 805 "f2lpdf.ctr"
+ if((job) && (drw)) {
+ back = dk3_new_app(f2l_pdf_drawing_info_t,1,job->app);
+ if(back) {
+ back->shortOutFile = NULL;
+ back->opdf = NULL;
+ back->sFonts = NULL;
+ back->iFonts = NULL;
+ back->sImages = NULL;
+ back->iImages = NULL;
+ back->nFonts = 0UL;
+ back->nImages = 0UL;
+ back->sFonts = dk3sto_open_app(job->app);
+ if(back->sFonts) {
+ dk3sto_set_comp(back->sFonts, dk3fig_tool_text_handling_compare, 0);
+ back->iFonts = dk3sto_it_open(back->sFonts);
+ if(back->iFonts) {
+ back->sImages = dk3sto_open_app(job->app);
+ if(back->sImages) {
+ dk3sto_set_comp(back->sImages, f2l_tool_compare_images, 0);
+ back->iImages = dk3sto_it_open(back->sImages);
+ if(back->iImages) {
+ back->opdf = dk3pdf_open_app(job->app);
+ if(back->opdf) {
+ ok = 1;
+ }
+ }
+ }
+ }
+ }
+ if(!(ok)) {
+ f2lpdf_drawing_info_delete(back);
+ back = NULL;
+ }
+ } else {
+ }
+ }
+
+#line 841 "f2lpdf.ctr"
+ return back;
+}
+
+
+
+/* ************************************************************************ */
+/* * * */
+/* * PDF with LaTeX output driver. * */
+/* * This driver creates .tex/.pdf combinations to be included * */
+/* * in a .tex source. * */
+/* * * */
+/* ************************************************************************ */
+
+
+#line 851 "f2lpdf.ctr"
+
+
+
+/** Register image file name in pdi for later use.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param pdi PDF information structure.
+ @param fn Image file name to add.
+ @param li Line number of image object definition.
+ @return 1 on success, 0 on error.
+*/
+static
+f2l_image_t *
+f2lpdf_register_image(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ f2l_pdf_drawing_info_t *pdi,
+ char const *fn,
+ unsigned long li
+)
+{
+ dk3_ufi_t ufi; /* Unique file identifier. */
+ f2l_image_t *back = NULL; /* Image information structure. */
+
+ if(dk3ufi_c8_get_app(&ufi, fn, job->app)) {
+ back = (f2l_image_t *)dk3sto_it_find_like(pdi->iImages, (void *)(&ufi), 1);
+ if(!(back)) {
+ back = f2l_tool_image_new(fn, job->app, li);
+ if(back) {
+ if(dk3sto_add(pdi->sImages, (void *)back)) {
+ back->imageNumber = pdi->nImages;
+ pdi->nImages += 1UL;
+ } else {
+ f2l_tool_image_delete(back);
+ back = NULL;
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 887 "f2lpdf.ctr"
+ }
+ } else {
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 890 "f2lpdf.ctr"
+ }
+ }
+ } else {
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 894 "f2lpdf.ctr"
+ }
+ return back;
+}
+
+
+
+/** Add image XObject data to PDF.
+ @param job Job structure.
+ @param drw Drawing structure.
+ @param pdi PDF information structure.
+ @param im Image information to add.
+ @return 1 on success, 0 on error.
+*/
+static
+int
+f2lpdf_add_image_to_pdf(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ f2l_pdf_drawing_info_t *pdi,
+ f2l_image_t *im
+)
+{
+ dk3_bm_eps_options_t options; /* Options for PDF conversion. */
+ dk3_bif_t *bif; /* Bitmap image file. */
+ int back = 0;
+
+
+#line 920 "f2lpdf.ctr"
+ bif = dk3bif_open_c8_filename_app(
+ im->filename, DK3_BIF_IMAGE_TYPE_UNKNOWN, job->app
+ );
+ if(bif) {
+ dk3bmeo_init(&options);
+ options.app = job->app;
+ options.ip = 1;
+ options.jip = 0;
+ options.mode = DK3_BMEPS_MODE_PLACED_OBJECT;
+ options.szmode = DK3_BMEPS_SIZE_1_1;
+
+#line 930 "f2lpdf.ctr"
+ options.dr = DK3_BMEPS_DRIVER_PDF;
+ options.rbpc = 1;
+ options.dct = 1;
+ options.color = 1;
+ if(dk3bif_read_data(bif)) {
+ im->xo = dk3pdf_create_ixobject_progress(pdi->opdf,bif,&options,NULL,0,0);
+ im->width = dk3bif_get_width(bif);
+ im->height = dk3bif_get_height(bif);
+ im->xres = dk3bif_get_xres(bif);
+ im->yres = dk3bif_get_yres(bif);
+ if(im->xo) {
+ back = 1;
+ } else {
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 944 "f2lpdf.ctr"
+ }
+ } else {
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 947 "f2lpdf.ctr"
+ }
+ dk3bif_close(bif);
+ } else {
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 951 "f2lpdf.ctr"
+ }
+
+
+#line 953 "f2lpdf.ctr"
+ return back;
+}
+
+
+
+int
+f2lpdf_pdf_with_tex_initialize(f2l_job_t *job, dk3_fig_drawing_t *drw)
+{
+ f2l_pdf_drawing_info_t *pdi; /* Driver spec det. */
+ dk3_fig_obj_t *pobj; /* Current object. */
+ f2l_image_t *im; /* Current image. */
+ dkChar const *oldsourcefile = NULL; /* Old source file. */
+ unsigned long oldsourceline = 0UL; /* Old source line. */
+ int back = 0;
+ int ff; /* Font flags. */
+
+
+#line 969 "f2lpdf.ctr"
+ pdi = f2lpdf_drawing_info_new(job, drw);
+ if(pdi) {
+ drw->dsd = (void *)pdi;
+ pdi->shortOutFile = dk3fig_tool_short_output_file_name(job->on2, job->app);
+ if(pdi->shortOutFile) {
+ back = 1;
+ dk3pdf_set_next_mediabox(pdi->opdf, 0L, job->lwidth, 0L, job->lheight);
+ oldsourcefile = dk3app_get_source_file(job->app);
+ oldsourceline = dk3app_get_source_line(job->app);
+ dk3sto_it_reset(drw->iobj);
+ while(NULL != (pobj = (dk3_fig_obj_t *)dk3sto_it_next(drw->iobj))) {
+
+
+#line 981 "f2lpdf.ctr"
+ dk3app_set_source_line(job->app, pobj->li);
+ switch(pobj->ot) {
+ case DK3_FIG_OBJ_TEXT: {
+ ff = (pobj->dt).txt.ff;
+ if(!(ff & DK3_FIG_FONT_FLAG_HIDDEN)) {
+
+#line 986 "f2lpdf.ctr"
+ if(!(ff & DK3_FIG_FONT_FLAG_SPECIAL)) {
+
+#line 987 "f2lpdf.ctr"
+ if(ff & DK3_FIG_FONT_FLAG_PS) {
+
+#line 988 "f2lpdf.ctr"
+ if(job->ntf) {
+
+#line 989 "f2lpdf.ctr"
+ 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;
+
+#line 995 "f2lpdf.ctr"
+ f2l_tool_set_exit_status(job,FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 996 "f2lpdf.ctr"
+ }
+ } else {
+
+#line 998 "f2lpdf.ctr"
+ }
+ }
+ }
+ }
+ } break;
+ case DK3_FIG_OBJ_POLYLINE: {
+ if(5 == pobj->st) {
+
+#line 1005 "f2lpdf.ctr"
+ pobj->dsd =
+ (void *)f2lpdf_register_image(
+ job, drw, pdi, (pobj->dt).pol.fn, pobj->li
+ );
+ if(!(pobj->dsd)) {
+ back = 0;
+ f2l_tool_set_exit_status(job,FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 1012 "f2lpdf.ctr"
+ }
+ }
+ } break;
+ }
+ }
+ dk3sto_it_reset(pdi->iImages);
+ while(NULL != (im = (f2l_image_t *)dk3sto_it_next(pdi->iImages))) {
+ if(!f2lpdf_add_image_to_pdf(job, drw, pdi, im)) {
+
+#line 1020 "f2lpdf.ctr"
+ back = 0;
+ f2l_tool_set_exit_status(job,FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 1022 "f2lpdf.ctr"
+ }
+ }
+ dk3app_set_source_file(job->app, oldsourcefile);
+ dk3app_set_source_line(job->app, oldsourceline);
+ } else {
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 1028 "f2lpdf.ctr"
+ }
+ } else {
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 1031 "f2lpdf.ctr"
+ }
+
+#line 1032 "f2lpdf.ctr"
+ return back;
+}
+
+
+
+void
+f2lpdf_pdf_with_tex_end(f2l_job_t *job, dk3_fig_drawing_t *drw)
+{
+ if(drw->dsd) {
+ f2lpdf_drawing_info_delete((f2l_pdf_drawing_info_t *)(drw->dsd));
+ drw->dsd = NULL;
+ }
+}
+
+
+
+int
+f2lpdf_pdf_with_tex_open_output_files(f2l_job_t *job)
+{
+ int back = 0;
+ 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);
+
+#line 1059 "f2lpdf.ctr"
+ }
+ } else {
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 1062 "f2lpdf.ctr"
+ }
+ return back;
+}
+
+
+
+void
+f2lpdf_pdf_with_tex_close_output_files(f2l_job_t *job)
+{
+ if(job->of2) {
+ dk3sf_fclose_app(job->of2, job->app);
+ }
+ if(job->of1) {
+ dk3sf_fclose_app(job->of1, job->app);
+ }
+}
+
+
+
+int
+f2lpdf_pdf_with_tex_start_processing(f2l_job_t *job, dk3_fig_drawing_t *drw)
+{
+
+ f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */
+ int back = 0;
+
+ pdi = (f2l_pdf_drawing_info_t *)(drw->dsd);
+ f2l_tool_start_tex_part(
+ job->of1, job, drw, pdi->shortOutFile, pdi->iFonts, pdi->nFonts
+ );
+ if(dk3pdf_open_page_with_clip(pdi->opdf, 1)) {
+ back = 1;
+ } else {
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 1096 "f2lpdf.ctr"
+ }
+ return back;
+}
+
+
+
+void
+f2lpdf_pdf_with_tex_end_processing(f2l_job_t *job, dk3_fig_drawing_t *drw)
+{
+ f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */
+
+ pdi = (f2l_pdf_drawing_info_t *)(drw->dsd);
+ f2l_tool_end_tex_part(job->of1);
+ dk3pdf_close_page(pdi->opdf);
+ if(!dk3pdf_write_file(pdi->opdf, job->of2)) {
+ /* ERROR: Failed to write PDF output file! */
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 1113 "f2lpdf.ctr"
+ }
+}
+
+
+
+void
+f2lpdf_pdf_with_tex_text_object(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ double x,
+ double y
+)
+{
+ f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */
+
+ pdi = (f2l_pdf_drawing_info_t *)(drw->dsd);
+ if(pdi) {
+ f2l_tool_text_object(job->of1, job, drw, obj, x, y, pdi->nFonts);
+ }
+}
+
+
+
+void
+f2lpdf_pdf_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
+)
+{
+ dk3_coordinates_transformation_t trans; /* Graphics state transform. */
+ f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */
+ f2l_image_t *im; /* Current image. */
+ int res; /* Search result. */
+
+
+#line 1152 "f2lpdf.ctr"
+ pdi = (f2l_pdf_drawing_info_t *)(drw->dsd);
+ im = (f2l_image_t *)(obj->dsd);
+ if((im) && (pdi)) {
+
+#line 1155 "f2lpdf.ctr"
+ if(im->xo) {
+
+#line 1156 "f2lpdf.ctr"
+ res = dk3bm_find_transformation(
+ &trans, outbb, drawdir, (double)(im->width), (double)(im->height),
+ im->xres, im->yres, ec
+ );
+ if(res) {
+
+#line 1161 "f2lpdf.ctr"
+ res = dk3pdf_gsave(pdi->opdf);
+ if(!(res)) {
+
+#line 1163 "f2lpdf.ctr"
+ /* ERROR */
+ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41);
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 1166 "f2lpdf.ctr"
+ }
+ res =
+ dk3pdf_translate_double(pdi->opdf,trans.x_translate,trans.y_translate);
+ if(!(res)) {
+
+#line 1170 "f2lpdf.ctr"
+ /* ERROR */
+ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41);
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 1173 "f2lpdf.ctr"
+ }
+ if(trans.rot) {
+ res = dk3pdf_rotate_int(pdi->opdf, (90 * trans.rot));
+ if(!(res)) {
+
+#line 1177 "f2lpdf.ctr"
+ /* ERROR */
+ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41);
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 1180 "f2lpdf.ctr"
+ }
+ }
+ res = dk3pdf_scale_double(pdi->opdf, trans.x_scale, trans.y_scale);
+ if(!(res)) {
+
+#line 1184 "f2lpdf.ctr"
+ /* ERROR */
+ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41);
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 1187 "f2lpdf.ctr"
+ }
+ res = dk3pdf_add_xobject_to_page(pdi->opdf, im->xo);
+ if(!(res)) {
+
+#line 1190 "f2lpdf.ctr"
+ /* ERROR */
+ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41);
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 1193 "f2lpdf.ctr"
+ }
+ res = dk3pdf_grestore(pdi->opdf);
+ if(!(res)) {
+
+#line 1196 "f2lpdf.ctr"
+ /* ERROR */
+ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41);
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 1199 "f2lpdf.ctr"
+ }
+ } else {
+
+#line 1201 "f2lpdf.ctr"
+ /* ERROR: Math error while searching transformation! */
+ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 35);
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_MATH);
+
+#line 1204 "f2lpdf.ctr"
+ }
+ } else {
+
+#line 1206 "f2lpdf.ctr"
+ }
+ } else {
+
+#line 1208 "f2lpdf.ctr"
+ }
+
+#line 1209 "f2lpdf.ctr"
+}
+
+
+
+void
+f2lpdf_pdf_with_tex_newpath(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+)
+{
+ /* Do nothing, in PDF the moveto operator includes newpath. */
+}
+
+
+
+void
+f2lpdf_pdf_with_tex_moveto(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ double x,
+ double y
+)
+{
+ f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */
+ int res; /* Output operation result. */
+
+ pdi = (f2l_pdf_drawing_info_t *)(drw->dsd);
+ if(pdi) {
+ res = dk3pdf_newpath_moveto(pdi->opdf, x, y);
+ if(!(res)) {
+ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41);
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 1243 "f2lpdf.ctr"
+ }
+ }
+}
+
+
+
+void
+f2lpdf_pdf_with_tex_lineto(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ double x,
+ double y
+)
+{
+ f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */
+ int res; /* Ouutput operation result. */
+
+ pdi = (f2l_pdf_drawing_info_t *)(drw->dsd);
+ if(pdi) {
+ res = dk3pdf_lineto(pdi->opdf, x, y);
+ if(!(res)) {
+ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41);
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 1267 "f2lpdf.ctr"
+ }
+ }
+}
+
+
+
+void
+f2lpdf_pdf_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
+)
+{
+ f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */
+ int res; /* Output operation result. */
+ pdi = (f2l_pdf_drawing_info_t *)(drw->dsd);
+ if(pdi) {
+ res = dk3pdf_curveto(pdi->opdf, xcs, ycs, xce, yce, xe, ye);
+ if(!(res)) {
+ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41);
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 1294 "f2lpdf.ctr"
+ }
+ }
+}
+
+
+
+void
+f2lpdf_pdf_with_tex_closepath(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+)
+{
+ f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */
+ int res; /* Output operation result. */
+
+ pdi = (f2l_pdf_drawing_info_t *)(drw->dsd);
+ if(pdi) {
+ res = dk3pdf_closepath(pdi->opdf);
+ if(!(res)) {
+ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41);
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 1316 "f2lpdf.ctr"
+ }
+ }
+}
+
+
+
+void
+f2lpdf_pdf_with_tex_fill(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+)
+{
+ f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */
+ int res; /* Output operation result. */
+
+ pdi = (f2l_pdf_drawing_info_t *)(drw->dsd);
+ if(pdi) {
+ res = dk3pdf_fill_eo(pdi->opdf);
+ if(!(res)) {
+ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41);
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 1338 "f2lpdf.ctr"
+ }
+ }
+}
+
+
+
+void
+f2lpdf_pdf_with_tex_clip(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+)
+{
+ f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */
+ int res; /* Output operation result. */
+
+ pdi = (f2l_pdf_drawing_info_t *)(drw->dsd);
+ if(pdi) {
+ res = dk3pdf_clip_eo(pdi->opdf);
+ if(!(res)) {
+ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41);
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 1360 "f2lpdf.ctr"
+ }
+ }
+}
+
+
+
+void
+f2lpdf_pdf_with_tex_stroke(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+)
+{
+ f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */
+ int res; /* Output operation result. */
+
+ pdi = (f2l_pdf_drawing_info_t *)(drw->dsd);
+ if(pdi) {
+ res = dk3pdf_stroke(pdi->opdf);
+ if(!(res)) {
+ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41);
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 1382 "f2lpdf.ctr"
+ }
+ }
+}
+
+
+
+void
+f2lpdf_pdf_with_tex_gsave(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+)
+{
+ f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */
+ int res; /* Output operation result. */
+
+ pdi = (f2l_pdf_drawing_info_t *)(drw->dsd);
+ if(pdi) {
+ res = dk3pdf_gsave(pdi->opdf);
+ if(!(res)) {
+ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41);
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 1404 "f2lpdf.ctr"
+ }
+ }
+}
+
+
+
+void
+f2lpdf_pdf_with_tex_grestore(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+)
+{
+ f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */
+ int res; /* Output operation result. */
+
+ pdi = (f2l_pdf_drawing_info_t *)(drw->dsd);
+ if(pdi) {
+ res = dk3pdf_grestore(pdi->opdf);
+ if(!(res)) {
+ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41);
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 1426 "f2lpdf.ctr"
+ }
+ }
+}
+
+
+
+void
+f2lpdf_pdf_with_tex_setcolor(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ double r,
+ double g,
+ double b
+)
+{
+ f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */
+ int res; /* Output operation result. */
+
+ pdi = (f2l_pdf_drawing_info_t *)(drw->dsd);
+ if(pdi) {
+ res = dk3pdf_nonstroking_rgb(pdi->opdf, r, g, b);
+ if(!(res)) {
+ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41);
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 1451 "f2lpdf.ctr"
+ }
+ res = dk3pdf_stroking_rgb(pdi->opdf, r, g, b);
+ if(!(res)) {
+ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41);
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 1456 "f2lpdf.ctr"
+ }
+ }
+}
+
+
+
+void
+f2lpdf_pdf_with_tex_set_line_width(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ double lw
+)
+{
+ f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */
+ int res; /* Output operation result. */
+
+ pdi = (f2l_pdf_drawing_info_t *)(drw->dsd);
+ if(pdi) {
+ res = dk3pdf_set_linewidth(pdi->opdf, lw);
+ if(!(res)) {
+ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41);
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 1479 "f2lpdf.ctr"
+ }
+ }
+}
+
+
+
+void
+f2lpdf_pdf_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
+)
+{
+ double xsv[32]; /* Strokes and gaps lengths. */
+ f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */
+ double ph; /* Phase. */
+ double gw; /* Gap width. */
+ size_t nsv; /* Number of elements xsv. */
+ int res; /* Output operation result. */
+
+ ph = 0.0;
+ nsv = 0;
+ xsv[0] = 0.0;
+ gw = f2lto_find_gap_length(job, lw, sv);
+ pdi = (f2l_pdf_drawing_info_t *)(drw->dsd);
+ if(pdi) {
+ switch(ls) {
+ case DK3_FIG_LS_DASH_TRIPLE_DOTTED: {
+ xsv[0] = sv;
+ xsv[1] = gw;
+ xsv[2] = lw;
+ xsv[3] = gw;
+ xsv[4] = lw;
+ xsv[5] = gw;
+ xsv[6] = lw;
+ xsv[7] = gw;
+ nsv = 8;
+ } break;
+ case DK3_FIG_LS_DASH_DOUBLE_DOTTED: {
+ xsv[0] = sv;
+ xsv[1] = gw;
+ xsv[2] = lw;
+ xsv[3] = gw;
+ xsv[4] = lw;
+ xsv[5] = gw;
+ nsv = 6;
+ } break;
+ case DK3_FIG_LS_DASH_DOTTED: {
+ xsv[0] = sv;
+ xsv[1] = gw;
+ xsv[2] = lw;
+ xsv[3] = gw;
+ nsv = 4;
+ } break;
+ case DK3_FIG_LS_DOTTED: {
+ xsv[0] = lw; xsv[1] = gw;
+ nsv = 2;
+ } break;
+ case DK3_FIG_LS_DASHED: {
+ xsv[0] = sv; xsv[1] = gw;
+ nsv = 2;
+ } break;
+ }
+ res = dk3pdf_set_line_dash(pdi->opdf, xsv, nsv, ph);
+ if(!(res)) {
+ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41);
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 1549 "f2lpdf.ctr"
+ }
+ }
+}
+
+
+
+void
+f2lpdf_pdf_with_tex_set_line_end(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ int le
+)
+{
+ f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */
+ int res; /* Output operation result. */
+
+ pdi = (f2l_pdf_drawing_info_t *)(drw->dsd);
+ if(pdi) {
+ res = dk3pdf_set_linecap(pdi->opdf, le);
+ if(!(res)) {
+ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41);
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 1572 "f2lpdf.ctr"
+ }
+ }
+}
+
+
+
+void
+f2lpdf_pdf_with_tex_set_line_join(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ int lj
+)
+{
+ f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */
+ int res; /* Output operation result. */
+
+ pdi = (f2l_pdf_drawing_info_t *)(drw->dsd);
+ if(pdi) {
+ res = dk3pdf_set_linejoin(pdi->opdf, lj);
+ if(!(res)) {
+ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41);
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 1595 "f2lpdf.ctr"
+ }
+ }
+}
+
+
+
+void
+f2lpdf_pdf_with_tex_set_color_1(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_rgb_color_t *rgb
+)
+{
+ f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */
+ int res; /* Output operation result. */
+
+ pdi = (f2l_pdf_drawing_info_t *)(drw->dsd);
+ if(pdi) {
+ res = dk3pdf_stroking_rgb(pdi->opdf, rgb->r, rgb->g, rgb->b);
+ if(!(res)) {
+ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41);
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 1617 "f2lpdf.ctr"
+ }
+ }
+}
+
+
+
+void
+f2lpdf_pdf_with_tex_set_color_2(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_rgb_color_t *rgb
+)
+{
+ f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */
+ int res; /* Output operation result. */
+
+ pdi = (f2l_pdf_drawing_info_t *)(drw->dsd);
+ if(pdi) {
+ res = dk3pdf_nonstroking_rgb(pdi->opdf, rgb->r, rgb->g, rgb->b);
+ if(!(res)) {
+ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41);
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 1639 "f2lpdf.ctr"
+ }
+ }
+}
+
+
+
+void
+f2lpdf_pdf_with_tex_debug(
+ f2l_job_t *job,
+ char const *msg
+)
+{
+ f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */
+ int res; /* Output operation result. */
+
+ pdi = (f2l_pdf_drawing_info_t *)((job->drw)->dsd);
+ if(pdi) {
+ res = dk3pdf_write_debug_line(pdi->opdf, msg);
+ if(!(res)) {
+ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41);
+ f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM);
+
+#line 1660 "f2lpdf.ctr"
+ }
+ }
+}
+
+
+
+/* ************************************************************************ */
+/* * * */
+/* * LaTeX with PDF output driver. * */
+/* * This driver combines .tex/.pdf combinations to be * */
+/* * processed with pdflatex directly. * */
+/* * * */
+/* ************************************************************************ */
+
+
+#line 1671 "f2lpdf.ctr"
+
+
+
+int
+f2lpdf_tex_with_pdf_initialize(f2l_job_t *job, dk3_fig_drawing_t *drw)
+{
+ int back = 0;
+ back = f2lpdf_pdf_with_tex_initialize(job, drw);
+ return back;
+}
+
+
+
+void
+f2lpdf_tex_with_pdf_end(f2l_job_t *job, dk3_fig_drawing_t *drw)
+{
+ f2lpdf_pdf_with_tex_end(job, drw);
+}
+
+
+
+int
+f2lpdf_tex_with_pdf_open_output_files(f2l_job_t *job)
+{
+ int back = 0;
+ back = f2lpdf_pdf_with_tex_open_output_files(job);
+ return back;
+}
+
+
+
+void
+f2lpdf_tex_with_pdf_close_output_files(f2l_job_t *job)
+{
+ f2lpdf_pdf_with_tex_close_output_files(job);
+}
+
+
+
+int
+f2lpdf_tex_with_pdf_start_processing(f2l_job_t *job, dk3_fig_drawing_t *drw)
+{
+ int back = 0;
+ f2l_tool_begin_latex_document(job->of1, job, drw);
+ back = f2lpdf_pdf_with_tex_start_processing(job, drw);
+ return back;
+}
+
+
+
+void
+f2lpdf_tex_with_pdf_end_processing(f2l_job_t *job, dk3_fig_drawing_t *drw)
+{
+ f2lpdf_pdf_with_tex_end_processing(job, drw);
+ f2l_tool_end_latex_document(job->of1, job, drw);
+}
+
+
+
+void
+f2lpdf_tex_with_pdf_text_object(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ double x,
+ double y
+)
+{
+ f2lpdf_pdf_with_tex_text_object(job, drw, obj, x, y);
+}
+
+
+
+void
+f2lpdf_tex_with_pdf_image_object(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ dk3_bb_t *outbb,
+ int drawdir,
+ int *ec
+)
+{
+ f2lpdf_pdf_with_tex_image_object(job, drw, obj, outbb, drawdir, ec);
+}
+
+
+
+void
+f2lpdf_tex_with_pdf_newpath(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+)
+{
+ f2lpdf_pdf_with_tex_newpath(job, drw, obj);
+}
+
+
+
+void
+f2lpdf_tex_with_pdf_moveto(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ double x,
+ double y
+)
+{
+ f2lpdf_pdf_with_tex_moveto(job, drw, obj, x, y);
+}
+
+
+
+void
+f2lpdf_tex_with_pdf_lineto(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ double x,
+ double y
+)
+{
+ f2lpdf_pdf_with_tex_lineto(job, drw, obj, x, y);
+}
+
+
+
+void
+f2lpdf_tex_with_pdf_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
+)
+{
+ f2lpdf_pdf_with_tex_curveto(job, drw, obj, xcs, ycs, xce, yce, xe, ye);
+}
+
+
+
+void
+f2lpdf_tex_with_pdf_closepath(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+)
+{
+ f2lpdf_pdf_with_tex_closepath(job, drw, obj);
+}
+
+
+
+void
+f2lpdf_tex_with_pdf_fill(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+)
+{
+ f2lpdf_pdf_with_tex_fill(job, drw, obj);
+}
+
+
+
+void
+f2lpdf_tex_with_pdf_clip(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+)
+{
+ f2lpdf_pdf_with_tex_clip(job, drw, obj);
+}
+
+
+
+void
+f2lpdf_tex_with_pdf_stroke(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+)
+{
+ f2lpdf_pdf_with_tex_stroke(job, drw, obj);
+}
+
+
+
+void
+f2lpdf_tex_with_pdf_gsave(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+)
+{
+ f2lpdf_pdf_with_tex_gsave(job, drw, obj);
+}
+
+
+
+void
+f2lpdf_tex_with_pdf_grestore(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj
+)
+{
+ f2lpdf_pdf_with_tex_grestore(job, drw, obj);
+}
+
+
+
+void
+f2lpdf_tex_with_pdf_setcolor(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ double r,
+ double g,
+ double b
+)
+{
+ f2lpdf_pdf_with_tex_setcolor(job, drw, obj, r, g, b);
+}
+
+
+
+void
+f2lpdf_tex_with_pdf_set_line_width(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ double lw
+)
+{
+ f2lpdf_pdf_with_tex_set_line_width(job, drw, obj, lw);
+}
+
+
+
+void
+f2lpdf_tex_with_pdf_set_line_style(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ int ls,
+ double sv,
+ double lw
+)
+{
+ f2lpdf_pdf_with_tex_set_line_style(job, drw, obj, ls, sv, lw);
+}
+
+
+
+void
+f2lpdf_tex_with_pdf_set_line_end(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ int le
+)
+{
+ f2lpdf_pdf_with_tex_set_line_end(job, drw, obj, le);
+}
+
+
+
+void
+f2lpdf_tex_with_pdf_set_line_join(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_fig_obj_t *obj,
+ int lj
+)
+{
+ f2lpdf_pdf_with_tex_set_line_join(job, drw, obj, lj);
+}
+
+
+
+void
+f2lpdf_tex_with_pdf_set_color_1(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_rgb_color_t *rgb
+)
+{
+ f2lpdf_pdf_with_tex_set_color_1(job, drw, rgb);
+}
+
+
+
+void
+f2lpdf_tex_with_pdf_set_color_2(
+ f2l_job_t *job,
+ dk3_fig_drawing_t *drw,
+ dk3_rgb_color_t *rgb
+)
+{
+ f2lpdf_pdf_with_tex_set_color_2(job, drw, rgb);
+}
+
+
+
+void
+f2lpdf_tex_with_pdf_debug(
+ f2l_job_t *job,
+ char const *msg
+)
+{
+ f2lpdf_pdf_with_tex_debug(job, msg);
+}
+