Compare commits
16 Commits
daf12a7d8c
...
1b1f742ae1
Author | SHA1 | Date | |
---|---|---|---|
1b1f742ae1 | |||
3b6837b886 | |||
efb1af7ee0 | |||
fa1a78e54c | |||
0417784877 | |||
c186d3cdb3 | |||
f02a720f99 | |||
374a893dda | |||
83a7848c14 | |||
7977ee7c8b | |||
e7f0f904e8 | |||
48eb2c296f | |||
3d5c4daad9 | |||
9899b94db6 | |||
f153485996 | |||
f15e82b5dc |
@ -30,6 +30,7 @@ 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_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)
|
||||||
@ -48,7 +49,6 @@ 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})
|
||||||
|
|
||||||
@ -70,15 +70,19 @@ set(SOURCE
|
|||||||
${LAYER_SELECTOR_SOURCES}
|
${LAYER_SELECTOR_SOURCES}
|
||||||
)
|
)
|
||||||
|
|
||||||
add_executable(${PROJECT_NAME} ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/resources/resources.c)
|
set(SOURCE_GENERATED
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/resources/resources.c
|
||||||
|
)
|
||||||
|
|
||||||
|
SET_SOURCE_FILES_PROPERTIES(${SOURCE_GENERATED} PROPERTIES GENERATED 1)
|
||||||
|
|
||||||
|
add_executable(${PROJECT_NAME} ${SOURCE} ${SOURCE_GENERATED})
|
||||||
add_dependencies(${PROJECT_NAME} glib-resources)
|
add_dependencies(${PROJECT_NAME} glib-resources)
|
||||||
add_dependencies(${PROJECT_NAME} version)
|
add_dependencies(${PROJECT_NAME} version)
|
||||||
add_dependencies(${PROJECT_NAME} translations)
|
add_dependencies(${PROJECT_NAME} translations)
|
||||||
SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_BINARY_DIR}/resources/resources.c PROPERTIES GENERATED 1)
|
|
||||||
target_link_libraries(${PROJECT_NAME} ${GLIB_LDFLAGS} ${GTK3_LDFLAGS} ${CAIRO_LDFLAGS} m version ${CMAKE_DL_LIBS})
|
target_link_libraries(${PROJECT_NAME} ${GLIB_LDFLAGS} ${GTK3_LDFLAGS} ${CAIRO_LDFLAGS} m version ${CMAKE_DL_LIBS})
|
||||||
install (TARGETS ${PROJECT_NAME}
|
install (TARGETS ${PROJECT_NAME}
|
||||||
RUNTIME
|
RUNTIME
|
||||||
DESTINATION bin
|
DESTINATION bin
|
||||||
)
|
)
|
||||||
|
|
||||||
add_custom_target(documentation DEPENDS doxygen)
|
|
||||||
|
@ -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 char *so_path,
|
const struct external_renderer_params *ext_params,
|
||||||
GList **renderer_list,
|
GList **renderer_list,
|
||||||
LayerSettings *layer_settings)
|
LayerSettings *layer_settings)
|
||||||
{
|
{
|
||||||
@ -100,11 +100,13 @@ 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 (!so_path) {
|
if (!ext_params->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(external_renderer_new_with_so(so_path));
|
output_renderer = GDS_RENDER_OUTPUT_RENDERER(
|
||||||
|
external_renderer_new_with_so_and_param(ext_params->so_path,
|
||||||
|
ext_params->cli_params));
|
||||||
} else {
|
} else {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -138,7 +140,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,
|
||||||
const char *so_path,
|
struct external_renderer_params *ext_param,
|
||||||
gboolean tex_standalone,
|
gboolean tex_standalone,
|
||||||
gboolean tex_layers,
|
gboolean tex_layers,
|
||||||
double scale)
|
double scale)
|
||||||
@ -165,7 +167,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,
|
||||||
so_path, &renderer_list, layer_sett))
|
ext_param, &renderer_list, layer_sett))
|
||||||
goto ret_destroy_layer_mapping;
|
goto ret_destroy_layer_mapping;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,10 +1,19 @@
|
|||||||
find_package(Doxygen)
|
find_package(Doxygen)
|
||||||
|
|
||||||
if (DOXYGEN_FOUND)
|
if (DOXYGEN_FOUND)
|
||||||
|
add_custom_target(documentation DEPENDS doxygen doxygen-pdf)
|
||||||
|
|
||||||
add_custom_target(doxygen
|
add_custom_target(doxygen
|
||||||
COMMAND ./build-doxygen.sh "${PROJECT_BINARY_DIR}"
|
COMMAND ./build-doxygen.sh "${PROJECT_BINARY_DIR}"
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
COMMENT "Generating documentation with Doxygen")
|
COMMENT "Generating documentation with Doxygen")
|
||||||
|
|
||||||
|
add_custom_target(
|
||||||
|
doxygen-pdf
|
||||||
|
COMMAND make
|
||||||
|
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/latex"
|
||||||
|
DEPENDS doxygen
|
||||||
|
)
|
||||||
else (DOXYGEN_FOUND)
|
else (DOXYGEN_FOUND)
|
||||||
message("Doxygen needs to be installed to generate the doxygen documentation")
|
message("Doxygen needs to be installed to generate the doxygen documentation")
|
||||||
endif (DOXYGEN_FOUND)
|
endif (DOXYGEN_FOUND)
|
||||||
|
@ -9,7 +9,18 @@
|
|||||||
* 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
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -33,6 +33,21 @@
|
|||||||
|
|
||||||
#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
|
||||||
@ -40,7 +55,7 @@
|
|||||||
* @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 so_path Shared object
|
* @param ext_param Settings for external library renderer
|
||||||
* @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
|
||||||
@ -51,7 +66,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,
|
||||||
const char *so_path,
|
struct external_renderer_params *ext_param,
|
||||||
gboolean tex_standalone,
|
gboolean tex_standalone,
|
||||||
gboolean tex_layers,
|
gboolean tex_layers,
|
||||||
double scale);
|
double scale);
|
||||||
|
@ -0,0 +1,51 @@
|
|||||||
|
#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__ */
|
@ -33,6 +33,7 @@
|
|||||||
|
|
||||||
#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
|
||||||
|
|
||||||
@ -40,16 +41,6 @@ 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
|
||||||
@ -59,9 +50,10 @@ 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(const char *so_path);
|
ExternalRenderer *external_renderer_new_with_so_and_param(const char *so_path, const char *param_string);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
30
main.c
30
main.c
@ -23,8 +23,6 @@
|
|||||||
* @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>
|
||||||
@ -265,9 +263,12 @@ 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");
|
||||||
@ -284,9 +285,11 @@ 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, &custom_library_path,
|
{"custom-render-lib", 'P', 0, G_OPTION_ARG_FILENAME, &so_render_params.so_path,
|
||||||
"Path to a custom shared object, that implements the " EXTERNAL_LIBRARY_FUNCTION " function", "PATH"},
|
_("Path to a custom shared object, that implements the necessary rendering functions"), "PATH"},
|
||||||
{NULL}
|
{"render-lib-params", 'W', 0, G_OPTION_ARG_STRING, &so_render_params.cli_params,
|
||||||
|
_("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"));
|
||||||
@ -298,6 +301,8 @@ int main(int argc, char **argv)
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_option_context_free(context);
|
||||||
|
|
||||||
if (version) {
|
if (version) {
|
||||||
print_version();
|
print_version();
|
||||||
goto ret_status;
|
goto ret_status;
|
||||||
@ -318,14 +323,17 @@ 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,
|
||||||
custom_library_path, pdf_standalone, pdf_layers, scale);
|
&so_render_params, pdf_standalone, pdf_layers, scale);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
app_status = start_gui(argc, argv);
|
app_status = start_gui(argc, argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret_status:
|
ret_status:
|
||||||
/* If necessary, free command line parameters */
|
/* If necessary, free command line parameters.
|
||||||
|
* This is only really necessary for automated mem-leak testing.
|
||||||
|
* Omitting these frees would be perfectly fine.
|
||||||
|
*/
|
||||||
if (output_paths)
|
if (output_paths)
|
||||||
g_strfreev(output_paths);
|
g_strfreev(output_paths);
|
||||||
if (renderer_args)
|
if (renderer_args)
|
||||||
@ -334,8 +342,10 @@ ret_status:
|
|||||||
g_free(mappingname);
|
g_free(mappingname);
|
||||||
if (cellname)
|
if (cellname)
|
||||||
free(cellname);
|
free(cellname);
|
||||||
if (custom_library_path)
|
if (so_render_params.so_path)
|
||||||
free(custom_library_path);
|
free(so_render_params.so_path);
|
||||||
|
if (so_render_params.cli_params)
|
||||||
|
g_free(so_render_params.cli_params);
|
||||||
|
|
||||||
return app_status;
|
return app_status;
|
||||||
}
|
}
|
||||||
|
@ -30,16 +30,22 @@
|
|||||||
|
|
||||||
#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 */
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -52,15 +58,20 @@ 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 *output_file, double scale, const char *so_path, const char *params)
|
||||||
{
|
{
|
||||||
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");
|
||||||
@ -78,22 +89,57 @@ static int external_renderer_render_cell(struct gds_cell *toplevel_cell, GList *
|
|||||||
return -2000;
|
return -2000;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Load symbol from library */
|
/* Load rendering 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, EXTERNAL_LIBRARY_FUNCTION);
|
dlsym(so_handle, xstr(EXTERNAL_LIBRARY_RENDER_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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Execute */
|
/* Load the init function */
|
||||||
if (so_render_func) {
|
so_init_func = (int (*)(const char *, const char *))dlsym(so_handle, xstr(EXTERNAL_LIBRARY_INIT_FUNCTION));
|
||||||
g_message("Calling external renderer.");
|
error_msg = dlerror();
|
||||||
ret = so_render_func(toplevel_cell, layer_info_list, output_file, scale);
|
if (error_msg != NULL) {
|
||||||
g_message("External renderer finished.");
|
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 */
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
/* 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;
|
||||||
@ -116,7 +162,8 @@ 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);
|
||||||
|
|
||||||
@ -133,6 +180,9 @@ 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;
|
||||||
@ -151,6 +201,11 @@ 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;
|
||||||
@ -159,7 +214,9 @@ 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 = GDS_RENDER_EXTERNAL_RENDERER(self_obj);
|
ExternalRenderer *self;
|
||||||
|
|
||||||
|
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);
|
||||||
@ -194,12 +251,19 @@ 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()
|
||||||
@ -207,9 +271,10 @@ 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(const char *so_path)
|
ExternalRenderer *external_renderer_new_with_so_and_param(const char *so_path, const char *param_string)
|
||||||
{
|
{
|
||||||
return g_object_new(GDS_RENDER_TYPE_EXTERNAL_RENDERER, "shared-object-path", so_path, NULL);
|
return g_object_new(GDS_RENDER_TYPE_EXTERNAL_RENDERER, "shared-object-path", so_path,
|
||||||
|
"param-string", param_string,NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
add_subdirectory(python-renderer)
|
add_subdirectory(plugin-example)
|
||||||
add_custom_target(plugins DEPENDS pythonrenderer)
|
add_custom_target(plugins DEPENDS pluginexample)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
project(pythonrenderer)
|
project(pluginexample)
|
||||||
cmake_minimum_required(VERSION 2.8)
|
cmake_minimum_required(VERSION 2.8)
|
||||||
find_package(PkgConfig REQUIRED)
|
find_package(PkgConfig REQUIRED)
|
||||||
pkg_search_module(PYTHON REQUIRED python3)
|
pkg_search_module(PYTHON REQUIRED python3)
|
19
plugins/plugin-example/src/plugin-main.c
Normal file
19
plugins/plugin-example/src/plugin-main.c
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#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;
|
||||||
|
}
|
@ -1,7 +0,0 @@
|
|||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
int a(void)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
@ -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-10-25 20:27+0200\n"
|
"POT-Creation-Date: 2019-11-15 20:32+0100\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"
|
||||||
|
@ -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-10-25 20:27+0200\n"
|
"POT-Creation-Date: 2019-11-15 20:32+0100\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:273
|
#: ../gds-render-gui.c:275
|
||||||
msgid "Acc. Date"
|
msgid "Acc. Date"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../gds-render-gui.c:314
|
#: ../gds-render-gui.c:318
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../gds-render-gui.c:266
|
#: ../gds-render-gui.c:268
|
||||||
msgid "Cell"
|
msgid "Cell"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../gds-render-gui.c:322
|
#: ../gds-render-gui.c:326
|
||||||
msgid "GDSII-Files"
|
msgid "GDSII-Files"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../gds-render-gui.c:263
|
#: ../gds-render-gui.c:265
|
||||||
msgid "Library"
|
msgid "Library"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../gds-render-gui.c:270
|
#: ../gds-render-gui.c:272
|
||||||
msgid "Mod. Date"
|
msgid "Mod. Date"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../gds-render-gui.c:315
|
#: ../gds-render-gui.c:319
|
||||||
msgid "Open GDSII"
|
msgid "Open GDSII"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../gds-render-gui.c:312
|
#: ../gds-render-gui.c:316
|
||||||
msgid "Open GDSII File"
|
msgid "Open GDSII File"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -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-10-25 20:27+0200\n"
|
"POT-Creation-Date: 2019-11-15 20:32+0100\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:99
|
#: ../main.c:97
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
@ -25,23 +25,27 @@ msgid ""
|
|||||||
"Full git commit: %s"
|
"Full git commit: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../main.c:289
|
#: ../main.c:293
|
||||||
msgid " FILE - Convert GDS file <FILE> to graphic"
|
msgid " FILE - Convert GDS file <FILE> to graphic"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../main.c:223
|
#: ../main.c:221
|
||||||
msgid "About"
|
msgid "About"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../main.c:282
|
#: ../main.c:289
|
||||||
msgid "Cell to render"
|
msgid "Argument string passed to render lib"
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../main.c:284
|
|
||||||
msgid "Create PDF Layers (OCG)"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../main.c:283
|
#: ../main.c:283
|
||||||
|
msgid "Cell to render"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../main.c:285
|
||||||
|
msgid "Create PDF Layers (OCG)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../main.c:284
|
||||||
msgid "Create standalone TeX"
|
msgid "Create standalone TeX"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -49,34 +53,40 @@ msgstr ""
|
|||||||
msgid "Divide output coordinates by <SCALE>"
|
msgid "Divide output coordinates by <SCALE>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../main.c:314
|
#: ../main.c:320
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Ignored argument: %s"
|
msgid "Ignored argument: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../main.c:118
|
#: ../main.c:116
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Logo could not be displayed: %s\n"
|
msgid "Logo could not be displayed: %s\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../main.c:294
|
#: ../main.c:298
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Option parsing failed: %s\n"
|
msgid "Option parsing failed: %s\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../main.c:280
|
#: ../main.c:281
|
||||||
msgid "Output file path. Can be used multiple times."
|
msgid "Output file path. Can be used multiple times."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../main.c:281
|
#: ../main.c:282
|
||||||
msgid "Path for Layer Mapping File"
|
msgid "Path for Layer Mapping File"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../main.c:277
|
#: ../main.c:287
|
||||||
|
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:222
|
#: ../main.c:220
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -84,19 +94,19 @@ msgstr ""
|
|||||||
msgid "Renderer to use. Can be used multiple times."
|
msgid "Renderer to use. Can be used multiple times."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../main.c:305
|
#: ../main.c:311
|
||||||
#, 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:215
|
#: ../main.c:213
|
||||||
#, 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:247
|
#: ../main.c:245
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"This is gds-render, version: %s\n"
|
"This is gds-render, version: %s\n"
|
||||||
@ -104,7 +114,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:98
|
#: ../main.c:96
|
||||||
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."
|
||||||
|
@ -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-10-22 23:02+0200\n"
|
"POT-Creation-Date: 2019-11-15 20:32+0100\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:273
|
#: ../gds-render-gui.c:275
|
||||||
msgid "Acc. Date"
|
msgid "Acc. Date"
|
||||||
msgstr "Zugr. Datum"
|
msgstr "Zugr. Datum"
|
||||||
|
|
||||||
#: ../gds-render-gui.c:314
|
#: ../gds-render-gui.c:318
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Abbruch"
|
msgstr "Abbruch"
|
||||||
|
|
||||||
#: ../gds-render-gui.c:266
|
#: ../gds-render-gui.c:268
|
||||||
msgid "Cell"
|
msgid "Cell"
|
||||||
msgstr "Zelle"
|
msgstr "Zelle"
|
||||||
|
|
||||||
#: ../gds-render-gui.c:322
|
#: ../gds-render-gui.c:326
|
||||||
msgid "GDSII-Files"
|
msgid "GDSII-Files"
|
||||||
msgstr "GDSII-Dateiem"
|
msgstr "GDSII-Dateiem"
|
||||||
|
|
||||||
#: ../gds-render-gui.c:263
|
#: ../gds-render-gui.c:265
|
||||||
msgid "Library"
|
msgid "Library"
|
||||||
msgstr "Bibliothek"
|
msgstr "Bibliothek"
|
||||||
|
|
||||||
#: ../gds-render-gui.c:270
|
#: ../gds-render-gui.c:272
|
||||||
msgid "Mod. Date"
|
msgid "Mod. Date"
|
||||||
msgstr "Mod. Datum"
|
msgstr "Mod. Datum"
|
||||||
|
|
||||||
#: ../gds-render-gui.c:315
|
#: ../gds-render-gui.c:319
|
||||||
msgid "Open GDSII"
|
msgid "Open GDSII"
|
||||||
msgstr "GDSII öffnen"
|
msgstr "GDSII öffnen"
|
||||||
|
|
||||||
#: ../gds-render-gui.c:312
|
#: ../gds-render-gui.c:316
|
||||||
msgid "Open GDSII File"
|
msgid "Open GDSII File"
|
||||||
msgstr "GDSII Datei öffnen"
|
msgstr "GDSII Datei öffnen"
|
||||||
|
@ -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-10-18 23:03+0200\n"
|
"POT-Creation-Date: 2019-11-15 20:32+0100\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:99
|
#: ../main.c:97
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
@ -28,23 +28,27 @@ msgstr ""
|
|||||||
"\n"
|
"\n"
|
||||||
"Vollständige git Commit-ID %s"
|
"Vollständige git Commit-ID %s"
|
||||||
|
|
||||||
#: ../main.c:289
|
#: ../main.c:293
|
||||||
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:223
|
#: ../main.c:221
|
||||||
msgid "About"
|
msgid "About"
|
||||||
msgstr "Über"
|
msgstr "Über"
|
||||||
|
|
||||||
#: ../main.c:282
|
#: ../main.c:289
|
||||||
|
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:284
|
#: ../main.c:285
|
||||||
msgid "Create PDF Layers (OCG)"
|
msgid "Create PDF Layers (OCG)"
|
||||||
msgstr "Generiere PDF Layer (OCG)"
|
msgstr "Generiere PDF Layer (OCG)"
|
||||||
|
|
||||||
#: ../main.c:283
|
#: ../main.c:284
|
||||||
msgid "Create standalone TeX"
|
msgid "Create standalone TeX"
|
||||||
msgstr "Generiere alleinstehendes TeX"
|
msgstr "Generiere alleinstehendes TeX"
|
||||||
|
|
||||||
@ -52,34 +56,41 @@ 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:314
|
#: ../main.c:320
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Ignored argument: %s"
|
msgid "Ignored argument: %s"
|
||||||
msgstr "Ignoriertes Argument: %s"
|
msgstr "Ignoriertes Argument: %s"
|
||||||
|
|
||||||
#: ../main.c:118
|
#: ../main.c:116
|
||||||
#, 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:294
|
#: ../main.c:298
|
||||||
#, 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:280
|
#: ../main.c:281
|
||||||
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:281
|
#: ../main.c:282
|
||||||
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:277
|
#: ../main.c:287
|
||||||
|
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:222
|
#: ../main.c:220
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "Beenden"
|
msgstr "Beenden"
|
||||||
|
|
||||||
@ -87,12 +98,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:305
|
#: ../main.c:311
|
||||||
#, 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:215
|
#: ../main.c:213
|
||||||
#, 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 "
|
||||||
@ -101,7 +112,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:247
|
#: ../main.c:245
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"This is gds-render, version: %s\n"
|
"This is gds-render, version: %s\n"
|
||||||
@ -113,7 +124,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:98
|
#: ../main.c:96
|
||||||
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."
|
||||||
|
@ -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-10-25 20:27+0200\n"
|
"POT-Creation-Date: 2019-11-15 20:32+0100\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"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user