Compare commits

..

No commits in common. "1b1f742ae110685ba3c589a36accce4d61c77945" and "7977ee7c8be89f7a3bf7bf7f240d7aad537ad047" have entirely different histories.

18 changed files with 95 additions and 292 deletions

View File

@ -30,9 +30,6 @@ pkg_search_module(GLIB REQUIRED glib-2.0)
pkg_check_modules(GTK3 REQUIRED gtk+-3.0) pkg_check_modules(GTK3 REQUIRED gtk+-3.0)
pkg_check_modules(CAIRO REQUIRED cairo) pkg_check_modules(CAIRO REQUIRED cairo)
include_directories(${GLIB_INCLUDE_DIRS} ${GTK3_INCLUDE_DIRS} ${CAIRO_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/include)
add_subdirectory(plugins)
add_compile_options(-Wall -Wextra -Wold-style-declaration -Wuninitialized -Wmaybe-uninitialized -Wunused-parameter) add_compile_options(-Wall -Wextra -Wold-style-declaration -Wuninitialized -Wmaybe-uninitialized -Wunused-parameter)
IF(CMAKE_BUILD_TYPE STREQUAL "Debug") IF(CMAKE_BUILD_TYPE STREQUAL "Debug")
@ -49,6 +46,7 @@ add_subdirectory(doxygen)
add_subdirectory(translations) add_subdirectory(translations)
add_subdirectory(version) add_subdirectory(version)
include_directories(${GLIB_INCLUDE_DIRS} ${GTK3_INCLUDE_DIRS} ${CAIRO_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/include)
link_directories(${GLIB_LINK_DIRS} ${GTK3_LINK_DIRS} ${CAIRO_LINK_DIRS}) link_directories(${GLIB_LINK_DIRS} ${GTK3_LINK_DIRS} ${CAIRO_LINK_DIRS})
add_definitions(${GLIB2_CFLAGS_OTHER}) add_definitions(${GLIB2_CFLAGS_OTHER})

View File

@ -56,7 +56,7 @@ static int create_renderers(char **renderers,
char **output_file_names, char **output_file_names,
gboolean tex_layers, gboolean tex_layers,
gboolean tex_standalone, gboolean tex_standalone,
const struct external_renderer_params *ext_params, const char *so_path,
GList **renderer_list, GList **renderer_list,
LayerSettings *layer_settings) LayerSettings *layer_settings)
{ {
@ -100,13 +100,11 @@ static int create_renderers(char **renderers,
} else if (!strcmp(current_renderer, "svg")) { } else if (!strcmp(current_renderer, "svg")) {
output_renderer = GDS_RENDER_OUTPUT_RENDERER(cairo_renderer_new_svg()); output_renderer = GDS_RENDER_OUTPUT_RENDERER(cairo_renderer_new_svg());
} else if (!strcmp(current_renderer, "ext")) { } else if (!strcmp(current_renderer, "ext")) {
if (!ext_params->so_path) { if (!so_path) {
fprintf(stderr, _("Please specify shared object for external renderer. Will ignore this renderer.\n")); fprintf(stderr, _("Please specify shared object for external renderer. Will ignore this renderer.\n"));
continue; continue;
} }
output_renderer = GDS_RENDER_OUTPUT_RENDERER( output_renderer = GDS_RENDER_OUTPUT_RENDERER(external_renderer_new_with_so(so_path));
external_renderer_new_with_so_and_param(ext_params->so_path,
ext_params->cli_params));
} else { } else {
continue; continue;
} }
@ -140,7 +138,7 @@ int command_line_convert_gds(const char *gds_name,
char **renderers, char **renderers,
char **output_file_names, char **output_file_names,
const char *layer_file, const char *layer_file,
struct external_renderer_params *ext_param, const char *so_path,
gboolean tex_standalone, gboolean tex_standalone,
gboolean tex_layers, gboolean tex_layers,
double scale) double scale)
@ -167,7 +165,7 @@ int command_line_convert_gds(const char *gds_name,
/* Create renderers */ /* Create renderers */
if (create_renderers(renderers, output_file_names, tex_layers, tex_standalone, if (create_renderers(renderers, output_file_names, tex_layers, tex_standalone,
ext_param, &renderer_list, layer_sett)) so_path, &renderer_list, layer_sett))
goto ret_destroy_layer_mapping; goto ret_destroy_layer_mapping;

View File

@ -15,5 +15,5 @@ if (DOXYGEN_FOUND)
DEPENDS doxygen DEPENDS doxygen
) )
else (DOXYGEN_FOUND) else (DOXYGEN_FOUND)
message("Doxygen needs to be installed to generate the doxygen documentation") message("Doxygen need to be installed to generate the doxygen documentation")
endif (DOXYGEN_FOUND) endif (DOXYGEN_FOUND)

View File

@ -9,18 +9,7 @@
* Property Name | Description * Property Name | Description
* -----------------|---------------------------------------------------------------- * -----------------|----------------------------------------------------------------
* shared-object-path | Path to the shared object used for rendering * shared-object-path | Path to the shared object used for rendering
* param-string | Command line parameters passed to external renderer's init function
* *
* All these properties have to be set for rendering. * All these properties have to be set for rendering.
* *
* @section ExternalRendererFuncs Necessary Functions
*
* The following functions and variables are necessary for an external renderer to implement:
*
* Code Define | Prototype | Description
* ---------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------
* @ref EXTERNAL_LIBRARY_RENDER_FUNCTION | int EXTERNAL_LIBRARY_RENDER_FUNCTION(struct gds_cell *toplevel, GList *layer_info_list, const char *output_file_name, double scale) | Render cell to output file
* @ref EXTERNAL_LIBRARY_INIT_FUNCTION | int EXTERNAL_LIBRARY_INIT_FUNCTION(const char *option_string, const char *version_string) | Init function. Executed before rendering. This is given the command line parameters specified for the external renderer and the version string of the currently running gds-render program.
* @ref EXTERNAL_LIBRARY_FORK_REQUEST | int EXTERNAL_LIBRARY_FORK_REQUEST; | The pure presence of this integer results in the execution inside a subprocess of hte whole shared object's code
*
*/ */

View File

@ -33,21 +33,6 @@
#include <glib.h> #include <glib.h>
/**
* @brief External renderer paramameters to command line renderer
*/
struct external_renderer_params {
/**
* @brief Path to shared object
*/
char *so_path;
/**
* @brief Command line parameters given
*/
char *cli_params;
};
/** /**
* @brief Convert GDS according to command line parameters * @brief Convert GDS according to command line parameters
* @param gds_name Path to GDS File * @param gds_name Path to GDS File
@ -55,7 +40,7 @@ struct external_renderer_params {
* @param renderers Renderer ids * @param renderers Renderer ids
* @param output_file_names Output file names * @param output_file_names Output file names
* @param layer_file Layer mapping file * @param layer_file Layer mapping file
* @param ext_param Settings for external library renderer * @param so_path Shared object
* @param tex_standalone Standalone TeX * @param tex_standalone Standalone TeX
* @param tex_layers TeX OCR layers * @param tex_layers TeX OCR layers
* @param scale Scale value * @param scale Scale value
@ -66,7 +51,7 @@ int command_line_convert_gds(const char *gds_name,
char **renderers, char **renderers,
char **output_file_names, char **output_file_names,
const char *layer_file, const char *layer_file,
struct external_renderer_params *ext_param, const char *so_path,
gboolean tex_standalone, gboolean tex_standalone,
gboolean tex_layers, gboolean tex_layers,
double scale); double scale);

View File

@ -1,51 +0,0 @@
#ifndef __EXTERNAL_RENDERER_INTERFACES_H__
#define __EXTERNAL_RENDERER_INTERFACES_H__
#ifndef xstr
#define xstr(a) str(a)
#define str(a) #a
#endif /* xstr */
/**
* @addtogroup ExternalRenderer
* @{
*/
/**
* @brief Function name expected to be found in external library for rendering.
*
* The function has to be defined as follows:
* @code
* int EXTERNAL_LIBRARY_RENDER_FUNCTION(struct gds_cell *toplevel, GList *layer_info_list, const char *output_file_name, double scale);
* @endcode
*/
#define EXTERNAL_LIBRARY_RENDER_FUNCTION exported_render_cell_to_file
/**
* @brief Function name expected to be found in external library for initialization.
*
* @code
* int EXTERNAL_LIBRARY_INIT_FUNCTION(const char *option_string, const char *version_string);
* @endcode
*/
#define EXTERNAL_LIBRARY_INIT_FUNCTION exported_init
/**
* @brief Global integer specified by an external renderer to signal, that the init and render functions shall be executed in a subprocess
*
* The pure presence of this symbol name causes forking. The content of this variable is don't care.
* @note Use this if you mess with the internal structures of gds-render
*
*/
#define EXTERNAL_LIBRARY_FORK_REQUEST exported_fork_request
/**
* @brief Define for declaring the exported functions
*/
#define FUNC_DECL(FUNC) FUNC
/** @} */
#endif /* __EXTERNAL_RENDERER_INTERFACES_H__ */

View File

@ -33,7 +33,6 @@
#include <gds-render/output-renderers/gds-output-renderer.h> #include <gds-render/output-renderers/gds-output-renderer.h>
#include <gds-render/gds-utils/gds-types.h> #include <gds-render/gds-utils/gds-types.h>
#include <gds-render/output-renderers/external-renderer-interfaces.h>
G_BEGIN_DECLS G_BEGIN_DECLS
@ -41,6 +40,16 @@ G_BEGIN_DECLS
G_DECLARE_FINAL_TYPE(ExternalRenderer, external_renderer, GDS_RENDER, EXTERNAL_RENDERER, GdsOutputRenderer) G_DECLARE_FINAL_TYPE(ExternalRenderer, external_renderer, GDS_RENDER, EXTERNAL_RENDERER, GdsOutputRenderer)
/**
* @brief function name expected to be found in external library.
*
* The function has to be defined as follows:
* @code
* int EXTERNAL_LIBRARY_FUNCTION(struct gds_cell *toplevel, GList *layer_info_list, const char *output_file_name, double scale)
* @endcode
*/
#define EXTERNAL_LIBRARY_FUNCTION "render_cell_to_file"
/** /**
* @brief Create new ExternalRenderer object * @brief Create new ExternalRenderer object
* @return New object * @return New object
@ -50,10 +59,9 @@ ExternalRenderer *external_renderer_new();
/** /**
* @brief Create new ExternalRenderer object with specified shared object path * @brief Create new ExternalRenderer object with specified shared object path
* @param so_path Path to shared object, the rendering function is searched in * @param so_path Path to shared object, the rendering function is searched in
* @param param_string Command line parameter string passed to external renderer
* @return New object. * @return New object.
*/ */
ExternalRenderer *external_renderer_new_with_so_and_param(const char *so_path, const char *param_string); ExternalRenderer *external_renderer_new_with_so(const char *so_path);
G_END_DECLS G_END_DECLS

23
main.c
View File

@ -23,6 +23,8 @@
* @author Mario Hüttel <mario.huettel@gmx.net> * @author Mario Hüttel <mario.huettel@gmx.net>
*/ */
#include <stdio.h> #include <stdio.h>
#include <gtk/gtk.h> #include <gtk/gtk.h>
#include <glib.h> #include <glib.h>
@ -263,12 +265,9 @@ int main(int argc, char **argv)
gchar *cellname = NULL; gchar *cellname = NULL;
gchar **renderer_args = NULL; gchar **renderer_args = NULL;
gboolean version = FALSE, pdf_standalone = FALSE, pdf_layers = FALSE; gboolean version = FALSE, pdf_standalone = FALSE, pdf_layers = FALSE;
gchar *custom_library_path = NULL;
int scale = 1000; int scale = 1000;
int app_status = 0; int app_status = 0;
struct external_renderer_params so_render_params;
so_render_params.so_path = NULL;
so_render_params.cli_params = NULL;
bindtextdomain(GETTEXT_PACKAGE, LOCALEDATADIR "/locale"); bindtextdomain(GETTEXT_PACKAGE, LOCALEDATADIR "/locale");
bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
@ -285,11 +284,9 @@ int main(int argc, char **argv)
{"cell", 'c', 0, G_OPTION_ARG_STRING, &cellname, _("Cell to render"), "NAME" }, {"cell", 'c', 0, G_OPTION_ARG_STRING, &cellname, _("Cell to render"), "NAME" },
{"tex-standalone", 'a', 0, G_OPTION_ARG_NONE, &pdf_standalone, _("Create standalone TeX"), NULL }, {"tex-standalone", 'a', 0, G_OPTION_ARG_NONE, &pdf_standalone, _("Create standalone TeX"), NULL },
{"tex-layers", 'l', 0, G_OPTION_ARG_NONE, &pdf_layers, _("Create PDF Layers (OCG)"), NULL }, {"tex-layers", 'l', 0, G_OPTION_ARG_NONE, &pdf_layers, _("Create PDF Layers (OCG)"), NULL },
{"custom-render-lib", 'P', 0, G_OPTION_ARG_FILENAME, &so_render_params.so_path, {"custom-render-lib", 'P', 0, G_OPTION_ARG_FILENAME, &custom_library_path,
_("Path to a custom shared object, that implements the necessary rendering functions"), "PATH"}, "Path to a custom shared object, that implements the " EXTERNAL_LIBRARY_FUNCTION " function", "PATH"},
{"render-lib-params", 'W', 0, G_OPTION_ARG_STRING, &so_render_params.cli_params, {NULL}
_("Argument string passed to render lib"), NULL},
{NULL, 0, 0, 0, NULL, NULL, NULL}
}; };
context = g_option_context_new(_(" FILE - Convert GDS file <FILE> to graphic")); context = g_option_context_new(_(" FILE - Convert GDS file <FILE> to graphic"));
@ -323,7 +320,7 @@ int main(int argc, char **argv)
app_status = app_status =
command_line_convert_gds(gds_name, cellname, renderer_args, output_paths, mappingname, command_line_convert_gds(gds_name, cellname, renderer_args, output_paths, mappingname,
&so_render_params, pdf_standalone, pdf_layers, scale); custom_library_path, pdf_standalone, pdf_layers, scale);
} else { } else {
app_status = start_gui(argc, argv); app_status = start_gui(argc, argv);
@ -342,10 +339,8 @@ ret_status:
g_free(mappingname); g_free(mappingname);
if (cellname) if (cellname)
free(cellname); free(cellname);
if (so_render_params.so_path) if (custom_library_path)
free(so_render_params.so_path); free(custom_library_path);
if (so_render_params.cli_params)
g_free(so_render_params.cli_params);
return app_status; return app_status;
} }

View File

@ -30,22 +30,16 @@
#include <dlfcn.h> #include <dlfcn.h>
#include <stdio.h> #include <stdio.h>
#include <sys/wait.h>
#include <gds-render/output-renderers/external-renderer.h> #include <gds-render/output-renderers/external-renderer.h>
#include <gds-render/version.h>
#define FORCE_FORK 0U /**< @brief if != 0, then forking is forced regardless of the shared object's settings */
struct _ExternalRenderer { struct _ExternalRenderer {
GdsOutputRenderer parent; GdsOutputRenderer parent;
char *shared_object_path; char *shared_object_path;
char *cli_param_string;
}; };
enum { enum {
PROP_SO_PATH = 1, /**< @brief Shared object path property */ PROP_SO_PATH = 1, /**< @brief Shared object path property */
PROP_PARAM_STRING, /** @brief Shared object renderer parameter string from CLI */
N_PROPERTIES /**< @brief Used to get property count */ N_PROPERTIES /**< @brief Used to get property count */
}; };
@ -58,20 +52,15 @@ G_DEFINE_TYPE(ExternalRenderer, external_renderer, GDS_RENDER_TYPE_OUTPUT_RENDER
* @param output_file Destination file * @param output_file Destination file
* @param scale the scaling value to scale the output cell down by. * @param scale the scaling value to scale the output cell down by.
* @param so_path Path to shared object * @param so_path Path to shared object
* @param params Parameters passed to EXTERNAL_LIBRARY_INIT_FUNCTION
* @return 0 if successful * @return 0 if successful
*/ */
static int external_renderer_render_cell(struct gds_cell *toplevel_cell, GList *layer_info_list, static int external_renderer_render_cell(struct gds_cell *toplevel_cell, GList *layer_info_list,
const char *output_file, double scale, const char *so_path, const char *params) const char *output_file, double scale, const char *so_path)
{ {
int (*so_render_func)(struct gds_cell *, GList *, const char *, double) = NULL; int (*so_render_func)(struct gds_cell *, GList *, const char *, double) = NULL;
int (*so_init_func)(const char *, const char *) = NULL;
void *so_handle = NULL; void *so_handle = NULL;
char *error_msg; char *error_msg;
int forking_req;
int ret = 0; int ret = 0;
pid_t fork_pid = 0;
int forked_status;
if (!so_path) { if (!so_path) {
fprintf(stderr, "Path to shared object not set!\n"); fprintf(stderr, "Path to shared object not set!\n");
@ -89,57 +78,22 @@ static int external_renderer_render_cell(struct gds_cell *toplevel_cell, GList *
return -2000; return -2000;
} }
/* Load rendering symbol from library */ /* Load symbol from library */
so_render_func = (int (*)(struct gds_cell *, GList *, const char *, double)) so_render_func = (int (*)(struct gds_cell *, GList *, const char *, double))
dlsym(so_handle, xstr(EXTERNAL_LIBRARY_RENDER_FUNCTION)); dlsym(so_handle, EXTERNAL_LIBRARY_FUNCTION);
error_msg = dlerror(); error_msg = dlerror();
if (error_msg != NULL) { if (error_msg != NULL) {
fprintf(stderr, "Rendering function not found in library:\n%s\n", error_msg); fprintf(stderr, "Rendering function not found in library:\n%s\n", error_msg);
goto ret_close_so_handle; goto ret_close_so_handle;
} }
/* Load the init function */
so_init_func = (int (*)(const char *, const char *))dlsym(so_handle, xstr(EXTERNAL_LIBRARY_INIT_FUNCTION));
error_msg = dlerror();
if (error_msg != NULL) {
fprintf(stderr, "Rendering function not found in library:\n%s\n", error_msg);
goto ret_close_so_handle;
}
/* Check if forking is requested */
if (dlsym(so_handle, xstr(EXTERNAL_LIBRARY_FORK_REQUEST)))
forking_req = 1;
else if (FORCE_FORK)
forking_req = 1;
else
forking_req = 0;
/* Execute */ /* Execute */
if (so_render_func) {
g_message("Calling external renderer."); g_message("Calling external renderer.");
if (forking_req)
fork_pid = fork();
if (fork_pid != 0)
goto end_forked;
ret = so_init_func(params, _app_version_string);
if (!ret)
ret = so_render_func(toplevel_cell, layer_info_list, output_file, scale); ret = so_render_func(toplevel_cell, layer_info_list, output_file, scale);
g_message("External renderer finished.");
/* If we are in a separate process, terminate here */
if (forking_req)
exit(ret);
/* The forked paths end here */
end_forked:
if (forking_req) {
waitpid(fork_pid, &forked_status, 0);
ret = WEXITSTATUS(forked_status);
} }
g_message("External renderer finished.");
ret_close_so_handle: ret_close_so_handle:
dlclose(so_handle); dlclose(so_handle);
return ret; return ret;
@ -162,8 +116,7 @@ static int external_renderer_render_output(GdsOutputRenderer *renderer,
if (settings) if (settings)
layer_infos = layer_settings_get_layer_info_list(settings); layer_infos = layer_settings_get_layer_info_list(settings);
ret = external_renderer_render_cell(cell, layer_infos, output_file, scale, ext_renderer->shared_object_path, ret = external_renderer_render_cell(cell, layer_infos, output_file, scale, ext_renderer->shared_object_path);
ext_renderer->cli_param_string);
if (settings) if (settings)
g_object_unref(settings); g_object_unref(settings);
@ -180,9 +133,6 @@ static void external_renderer_get_property(GObject *obj, guint property_id, GVal
case PROP_SO_PATH: case PROP_SO_PATH:
g_value_set_string(value, self->shared_object_path); g_value_set_string(value, self->shared_object_path);
break; break;
case PROP_PARAM_STRING:
g_value_set_string(value, self->cli_param_string);
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, property_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, property_id, pspec);
break; break;
@ -201,11 +151,6 @@ static void external_renderer_set_property(GObject *obj, guint property_id, cons
g_free(self->shared_object_path); g_free(self->shared_object_path);
self->shared_object_path = g_value_dup_string(value); self->shared_object_path = g_value_dup_string(value);
break; break;
case PROP_PARAM_STRING:
if (self->cli_param_string)
g_free(self->cli_param_string);
self->cli_param_string = g_value_dup_string(value);
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, property_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, property_id, pspec);
break; break;
@ -214,9 +159,7 @@ static void external_renderer_set_property(GObject *obj, guint property_id, cons
static void external_renderer_dispose(GObject *self_obj) static void external_renderer_dispose(GObject *self_obj)
{ {
ExternalRenderer *self; ExternalRenderer *self = GDS_RENDER_EXTERNAL_RENDERER(self_obj);
self = GDS_RENDER_EXTERNAL_RENDERER(self_obj);
if (self->shared_object_path) { if (self->shared_object_path) {
g_free(self->shared_object_path); g_free(self->shared_object_path);
@ -251,19 +194,12 @@ static void external_renderer_class_init(ExternalRendererClass *klass)
"Path to the shared object to search rendering function in.", "Path to the shared object to search rendering function in.",
NULL, NULL,
G_PARAM_READWRITE); G_PARAM_READWRITE);
external_renderer_properties[PROP_PARAM_STRING] =
g_param_spec_string("param-string",
"Shared object renderer parameter string",
"Command line arguments passed to the external shared object renderer",
NULL,
G_PARAM_READWRITE);
g_object_class_install_properties(oclass, N_PROPERTIES, external_renderer_properties); g_object_class_install_properties(oclass, N_PROPERTIES, external_renderer_properties);
} }
static void external_renderer_init(ExternalRenderer *self) static void external_renderer_init(ExternalRenderer *self)
{ {
self->shared_object_path = NULL; self->shared_object_path = NULL;
self->cli_param_string = NULL;
} }
ExternalRenderer *external_renderer_new() ExternalRenderer *external_renderer_new()
@ -271,10 +207,9 @@ ExternalRenderer *external_renderer_new()
return g_object_new(GDS_RENDER_TYPE_EXTERNAL_RENDERER, NULL); return g_object_new(GDS_RENDER_TYPE_EXTERNAL_RENDERER, NULL);
} }
ExternalRenderer *external_renderer_new_with_so_and_param(const char *so_path, const char *param_string) ExternalRenderer *external_renderer_new_with_so(const char *so_path)
{ {
return g_object_new(GDS_RENDER_TYPE_EXTERNAL_RENDERER, "shared-object-path", so_path, return g_object_new(GDS_RENDER_TYPE_EXTERNAL_RENDERER, "shared-object-path", so_path, NULL);
"param-string", param_string,NULL);
} }
/** @} */ /** @} */

View File

@ -1,2 +0,0 @@
add_subdirectory(plugin-example)
add_custom_target(plugins DEPENDS pluginexample)

View File

@ -1,12 +0,0 @@
project(pluginexample)
cmake_minimum_required(VERSION 2.8)
find_package(PkgConfig REQUIRED)
pkg_search_module(PYTHON REQUIRED python3)
aux_source_directory(src SOURCES)
include_directories(${PYTHON_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/include)
link_libraries(${PYTHON_LDFLAGS} version)
add_library(${PROJECT_NAME} SHARED EXCLUDE_FROM_ALL ${SOURCES})
add_dependencies(${PROJECT_NAME} version)

View File

@ -1,19 +0,0 @@
#include <stdio.h>
#include <glib.h>
#include <gds-render/gds-utils/gds-types.h>
#include <gds-render/output-renderers/external-renderer-interfaces.h>
int FUNC_DECL(EXTERNAL_LIBRARY_RENDER_FUNCTION)(struct gds_cell *toplevel, GList *layer_info_list, const char *output_file_name, double scale)
{
if (!toplevel)
return -1000;
printf("Rendering %s\n", toplevel->name);
return 0;
}
int FUNC_DECL(EXTERNAL_LIBRARY_INIT_FUNCTION)(const char *params, const char *version)
{
printf("Init with params: %s\ngds-render version: %s\n", params, version);
return 0;
}

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-11-15 20:32+0100\n" "POT-Creation-Date: 2019-10-25 20:27+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-11-15 20:32+0100\n" "POT-Creation-Date: 2019-10-25 20:27+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -17,34 +17,34 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n" "Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
#: ../gds-render-gui.c:275 #: ../gds-render-gui.c:273
msgid "Acc. Date" msgid "Acc. Date"
msgstr "" msgstr ""
#: ../gds-render-gui.c:318 #: ../gds-render-gui.c:314
msgid "Cancel" msgid "Cancel"
msgstr "" msgstr ""
#: ../gds-render-gui.c:268 #: ../gds-render-gui.c:266
msgid "Cell" msgid "Cell"
msgstr "" msgstr ""
#: ../gds-render-gui.c:326 #: ../gds-render-gui.c:322
msgid "GDSII-Files" msgid "GDSII-Files"
msgstr "" msgstr ""
#: ../gds-render-gui.c:265 #: ../gds-render-gui.c:263
msgid "Library" msgid "Library"
msgstr "" msgstr ""
#: ../gds-render-gui.c:272 #: ../gds-render-gui.c:270
msgid "Mod. Date" msgid "Mod. Date"
msgstr "" msgstr ""
#: ../gds-render-gui.c:319 #: ../gds-render-gui.c:315
msgid "Open GDSII" msgid "Open GDSII"
msgstr "" msgstr ""
#: ../gds-render-gui.c:316 #: ../gds-render-gui.c:312
msgid "Open GDSII File" msgid "Open GDSII File"
msgstr "" msgstr ""

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-11-15 20:32+0100\n" "POT-Creation-Date: 2019-10-25 20:27+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n" "Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
#: ../main.c:97 #: ../main.c:99
#, c-format #, c-format
msgid "" msgid ""
"\n" "\n"
@ -25,27 +25,23 @@ msgid ""
"Full git commit: %s" "Full git commit: %s"
msgstr "" msgstr ""
#: ../main.c:293 #: ../main.c:289
msgid " FILE - Convert GDS file <FILE> to graphic" msgid " FILE - Convert GDS file <FILE> to graphic"
msgstr "" msgstr ""
#: ../main.c:221 #: ../main.c:223
msgid "About" msgid "About"
msgstr "" msgstr ""
#: ../main.c:289 #: ../main.c:282
msgid "Argument string passed to render lib"
msgstr ""
#: ../main.c:283
msgid "Cell to render" msgid "Cell to render"
msgstr "" msgstr ""
#: ../main.c:285 #: ../main.c:284
msgid "Create PDF Layers (OCG)" msgid "Create PDF Layers (OCG)"
msgstr "" msgstr ""
#: ../main.c:284 #: ../main.c:283
msgid "Create standalone TeX" msgid "Create standalone TeX"
msgstr "" msgstr ""
@ -53,40 +49,34 @@ msgstr ""
msgid "Divide output coordinates by <SCALE>" msgid "Divide output coordinates by <SCALE>"
msgstr "" msgstr ""
#: ../main.c:320 #: ../main.c:314
#, c-format #, c-format
msgid "Ignored argument: %s" msgid "Ignored argument: %s"
msgstr "" msgstr ""
#: ../main.c:116 #: ../main.c:118
#, c-format #, c-format
msgid "Logo could not be displayed: %s\n" msgid "Logo could not be displayed: %s\n"
msgstr "" msgstr ""
#: ../main.c:298 #: ../main.c:294
#, c-format #, c-format
msgid "Option parsing failed: %s\n" msgid "Option parsing failed: %s\n"
msgstr "" msgstr ""
#: ../main.c:281 #: ../main.c:280
msgid "Output file path. Can be used multiple times." msgid "Output file path. Can be used multiple times."
msgstr "" msgstr ""
#: ../main.c:282 #: ../main.c:281
msgid "Path for Layer Mapping File" msgid "Path for Layer Mapping File"
msgstr "" msgstr ""
#: ../main.c:287 #: ../main.c:277
msgid ""
"Path to a custom shared object, that implements the necessary rendering "
"functions"
msgstr ""
#: ../main.c:276
msgid "Print version" msgid "Print version"
msgstr "" msgstr ""
#: ../main.c:220 #: ../main.c:222
msgid "Quit" msgid "Quit"
msgstr "" msgstr ""
@ -94,19 +84,19 @@ msgstr ""
msgid "Renderer to use. Can be used multiple times." msgid "Renderer to use. Can be used multiple times."
msgstr "" msgstr ""
#: ../main.c:311 #: ../main.c:305
#, c-format #, c-format
msgid "Scale < 1 not allowed. Setting to 1\n" msgid "Scale < 1 not allowed. Setting to 1\n"
msgstr "" msgstr ""
#: ../main.c:213 #: ../main.c:215
#, c-format #, c-format
msgid "" msgid ""
"There is already an open instance. Will open second window in that " "There is already an open instance. Will open second window in that "
"instance.\n" "instance.\n"
msgstr "" msgstr ""
#: ../main.c:245 #: ../main.c:247
#, c-format #, c-format
msgid "" msgid ""
"This is gds-render, version: %s\n" "This is gds-render, version: %s\n"
@ -114,7 +104,7 @@ msgid ""
"For a list of supported commands execute with --help option.\n" "For a list of supported commands execute with --help option.\n"
msgstr "" msgstr ""
#: ../main.c:96 #: ../main.c:98
msgid "" msgid ""
"gds-render is a free tool for rendering GDS2 layout files into vector " "gds-render is a free tool for rendering GDS2 layout files into vector "
"graphics." "graphics."

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gds-render VERSION\n" "Project-Id-Version: gds-render VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-11-15 20:32+0100\n" "POT-Creation-Date: 2019-10-22 23:02+0200\n"
"PO-Revision-Date: 2019-10-18 23:10+0200\n" "PO-Revision-Date: 2019-10-18 23:10+0200\n"
"Last-Translator: <mario.huettel@gmx.net>\n" "Last-Translator: <mario.huettel@gmx.net>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n" "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
@ -17,34 +17,34 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../gds-render-gui.c:275 #: ../gds-render-gui.c:273
msgid "Acc. Date" msgid "Acc. Date"
msgstr "Zugr. Datum" msgstr "Zugr. Datum"
#: ../gds-render-gui.c:318 #: ../gds-render-gui.c:314
msgid "Cancel" msgid "Cancel"
msgstr "Abbruch" msgstr "Abbruch"
#: ../gds-render-gui.c:268 #: ../gds-render-gui.c:266
msgid "Cell" msgid "Cell"
msgstr "Zelle" msgstr "Zelle"
#: ../gds-render-gui.c:326 #: ../gds-render-gui.c:322
msgid "GDSII-Files" msgid "GDSII-Files"
msgstr "GDSII-Dateiem" msgstr "GDSII-Dateiem"
#: ../gds-render-gui.c:265 #: ../gds-render-gui.c:263
msgid "Library" msgid "Library"
msgstr "Bibliothek" msgstr "Bibliothek"
#: ../gds-render-gui.c:272 #: ../gds-render-gui.c:270
msgid "Mod. Date" msgid "Mod. Date"
msgstr "Mod. Datum" msgstr "Mod. Datum"
#: ../gds-render-gui.c:319 #: ../gds-render-gui.c:315
msgid "Open GDSII" msgid "Open GDSII"
msgstr "GDSII öffnen" msgstr "GDSII öffnen"
#: ../gds-render-gui.c:316 #: ../gds-render-gui.c:312
msgid "Open GDSII File" msgid "Open GDSII File"
msgstr "GDSII Datei öffnen" msgstr "GDSII Datei öffnen"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gds-render VERSION\n" "Project-Id-Version: gds-render VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-11-15 20:32+0100\n" "POT-Creation-Date: 2019-10-18 23:03+0200\n"
"PO-Revision-Date: 2019-10-18 20:49+0200\n" "PO-Revision-Date: 2019-10-18 20:49+0200\n"
"Last-Translator: <mario.huettel@gmx.net>\n" "Last-Translator: <mario.huettel@gmx.net>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n" "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
@ -17,7 +17,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../main.c:97 #: ../main.c:99
#, c-format #, c-format
msgid "" msgid ""
"\n" "\n"
@ -28,27 +28,23 @@ msgstr ""
"\n" "\n"
"Vollständige git Commit-ID %s" "Vollständige git Commit-ID %s"
#: ../main.c:293 #: ../main.c:289
msgid " FILE - Convert GDS file <FILE> to graphic" msgid " FILE - Convert GDS file <FILE> to graphic"
msgstr "Datei -- Konvertiere GDS Datei <Datei> zu Vektorgrafik" msgstr "Datei -- Konvertiere GDS Datei <Datei> zu Vektorgrafik"
#: ../main.c:221 #: ../main.c:223
msgid "About" msgid "About"
msgstr "Über" msgstr "Über"
#: ../main.c:289 #: ../main.c:282
msgid "Argument string passed to render lib"
msgstr "Argumente, die an externe Render-Bibliothek weitergegeben werden sollen"
#: ../main.c:283
msgid "Cell to render" msgid "Cell to render"
msgstr "Zu konvertierende Zelle" msgstr "Zu konvertierende Zelle"
#: ../main.c:285 #: ../main.c:284
msgid "Create PDF Layers (OCG)" msgid "Create PDF Layers (OCG)"
msgstr "Generiere PDF Layer (OCG)" msgstr "Generiere PDF Layer (OCG)"
#: ../main.c:284 #: ../main.c:283
msgid "Create standalone TeX" msgid "Create standalone TeX"
msgstr "Generiere alleinstehendes TeX" msgstr "Generiere alleinstehendes TeX"
@ -56,41 +52,34 @@ msgstr "Generiere alleinstehendes TeX"
msgid "Divide output coordinates by <SCALE>" msgid "Divide output coordinates by <SCALE>"
msgstr "Skaliere Ausgabekoordinaten um Faktor <SCALE> herab" msgstr "Skaliere Ausgabekoordinaten um Faktor <SCALE> herab"
#: ../main.c:320 #: ../main.c:314
#, c-format #, c-format
msgid "Ignored argument: %s" msgid "Ignored argument: %s"
msgstr "Ignoriertes Argument: %s" msgstr "Ignoriertes Argument: %s"
#: ../main.c:116 #: ../main.c:118
#, c-format #, c-format
msgid "Logo could not be displayed: %s\n" msgid "Logo could not be displayed: %s\n"
msgstr "Logo konnte nicht angezeigt werden: %s\n" msgstr "Logo konnte nicht angezeigt werden: %s\n"
#: ../main.c:298 #: ../main.c:294
#, c-format #, c-format
msgid "Option parsing failed: %s\n" msgid "Option parsing failed: %s\n"
msgstr "Übergabeparameterkonvertierung fehlgeschlagen: %s\n" msgstr "Übergabeparameterkonvertierung fehlgeschlagen: %s\n"
#: ../main.c:281 #: ../main.c:280
msgid "Output file path. Can be used multiple times." msgid "Output file path. Can be used multiple times."
msgstr "Ausgabedatei. Kann mehrfach angegeben werden." msgstr "Ausgabedatei. Kann mehrfach angegeben werden."
#: ../main.c:282 #: ../main.c:281
msgid "Path for Layer Mapping File" msgid "Path for Layer Mapping File"
msgstr "Pfad zur \"Layer Mapping\"-Datei" msgstr "Pfad zur \"Layer Mapping\"-Datei"
#: ../main.c:287 #: ../main.c:277
msgid ""
"Path to a custom shared object, that implements the necessary rendering "
"functions"
msgstr ""
"Pfad zu einer Programmbibliothek, die die notwendigen Renderingfunktionen bereitstellt"
#: ../main.c:276
msgid "Print version" msgid "Print version"
msgstr "Programmversion aufgeben" msgstr "Programmversion aufgeben"
#: ../main.c:220 #: ../main.c:222
msgid "Quit" msgid "Quit"
msgstr "Beenden" msgstr "Beenden"
@ -98,12 +87,12 @@ msgstr "Beenden"
msgid "Renderer to use. Can be used multiple times." msgid "Renderer to use. Can be used multiple times."
msgstr "Gewünschter Renderer. Kann mehrfach angegeben werden." msgstr "Gewünschter Renderer. Kann mehrfach angegeben werden."
#: ../main.c:311 #: ../main.c:305
#, c-format #, c-format
msgid "Scale < 1 not allowed. Setting to 1\n" msgid "Scale < 1 not allowed. Setting to 1\n"
msgstr "Skalierung < 1 nicht erlaubt. Rückfallwert 1 benutzt.\n" msgstr "Skalierung < 1 nicht erlaubt. Rückfallwert 1 benutzt.\n"
#: ../main.c:213 #: ../main.c:215
#, c-format #, c-format
msgid "" msgid ""
"There is already an open instance. Will open second window in that " "There is already an open instance. Will open second window in that "
@ -112,7 +101,7 @@ msgstr ""
"Es is bereits eine Instanz dieses Programms geöffnet. Ein weiteres Fenster " "Es is bereits eine Instanz dieses Programms geöffnet. Ein weiteres Fenster "
"in dieser wird geöffnet.\n" "in dieser wird geöffnet.\n"
#: ../main.c:245 #: ../main.c:247
#, c-format #, c-format
msgid "" msgid ""
"This is gds-render, version: %s\n" "This is gds-render, version: %s\n"
@ -124,7 +113,7 @@ msgstr ""
"Um eine Liste der unterstützten Befehle zu erhalten, bitte mit der Option --" "Um eine Liste der unterstützten Befehle zu erhalten, bitte mit der Option --"
"help ausführen.\n" "help ausführen.\n"
#: ../main.c:96 #: ../main.c:98
msgid "" msgid ""
"gds-render is a free tool for rendering GDS2 layout files into vector " "gds-render is a free tool for rendering GDS2 layout files into vector "
"graphics." "graphics."

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-11-15 20:32+0100\n" "POT-Creation-Date: 2019-10-25 20:27+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"