Compare commits

...

16 Commits

Author SHA1 Message Date
1b1f742ae1 Fix doxygen for command line header 2019-11-15 21:39:33 +01:00
3b6837b886 Rename python renderer to plugin example and leave it be as a template 2019-11-15 21:34:13 +01:00
efb1af7ee0 Complete chain of passing command line parameters to external renderer 2019-11-15 21:11:41 +01:00
fa1a78e54c Edit comments 2019-11-15 21:06:41 +01:00
0417784877 Add property for command line parameters to external renderer 2019-11-15 21:04:59 +01:00
c186d3cdb3 Pass command line parameters for shared object renderer to command line convert struct 2019-11-15 20:50:46 +01:00
f02a720f99 Uodate translations of main.c 2019-11-15 20:35:36 +01:00
374a893dda Add W option to command line parser for external renderer parameters 2019-11-15 20:31:57 +01:00
83a7848c14 Merge branch 'dev' into external-renderer-rework 2019-11-14 23:39:40 +01:00
7977ee7c8b Merge branch 'master' into dev 2019-11-14 23:39:29 +01:00
e7f0f904e8 main: Free command line option context, add comment for freeing all the command line parameter data 2019-11-14 23:39:12 +01:00
48eb2c296f Merge branch 'dev' into external-renderer-rework 2019-11-14 19:36:59 +01:00
3d5c4daad9 Doxygen: Rework documentation make targets
* new target doxygen-pdf which build the latex output
* Add doxygen-pdf to documentation target
* Move documentaiton target definition to doxygen's CMakeLists.txt
2019-11-14 19:32:54 +01:00
9899b94db6 cmake: rework source list for generated files 2019-11-14 19:31:57 +01:00
f153485996 Implement base construct of new external renderer. CLI parameters still not implemented. Currently NULL is passed to init func. Forking implemented but not tested 2019-11-12 21:15:36 +01:00
f15e82b5dc Modify External Renderer: External renderer docu updated for future changes, restructuring. Not that the changes in the documentation are not yet implemented in code 2019-11-12 20:52:42 +01:00
19 changed files with 308 additions and 116 deletions

View File

@ -30,6 +30,7 @@ pkg_search_module(GLIB REQUIRED glib-2.0)
pkg_check_modules(GTK3 REQUIRED gtk+-3.0)
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)
@ -48,7 +49,6 @@ add_subdirectory(doxygen)
add_subdirectory(translations)
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})
add_definitions(${GLIB2_CFLAGS_OTHER})
@ -70,15 +70,19 @@ set(SOURCE
${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} version)
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})
install (TARGETS ${PROJECT_NAME}
RUNTIME
DESTINATION bin
)
add_custom_target(documentation DEPENDS doxygen)

View File

@ -56,7 +56,7 @@ static int create_renderers(char **renderers,
char **output_file_names,
gboolean tex_layers,
gboolean tex_standalone,
const char *so_path,
const struct external_renderer_params *ext_params,
GList **renderer_list,
LayerSettings *layer_settings)
{
@ -100,11 +100,13 @@ static int create_renderers(char **renderers,
} else if (!strcmp(current_renderer, "svg")) {
output_renderer = GDS_RENDER_OUTPUT_RENDERER(cairo_renderer_new_svg());
} 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"));
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 {
continue;
}
@ -138,7 +140,7 @@ int command_line_convert_gds(const char *gds_name,
char **renderers,
char **output_file_names,
const char *layer_file,
const char *so_path,
struct external_renderer_params *ext_param,
gboolean tex_standalone,
gboolean tex_layers,
double scale)
@ -165,7 +167,7 @@ int command_line_convert_gds(const char *gds_name,
/* Create renderers */
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;

View File

@ -1,10 +1,19 @@
find_package(Doxygen)
if (DOXYGEN_FOUND)
add_custom_target(documentation DEPENDS doxygen doxygen-pdf)
add_custom_target(doxygen
COMMAND ./build-doxygen.sh "${PROJECT_BINARY_DIR}"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Generating documentation with Doxygen")
add_custom_target(
doxygen-pdf
COMMAND make
WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/latex"
DEPENDS doxygen
)
else (DOXYGEN_FOUND)
message("Doxygen needs to be installed to generate the doxygen documentation")
endif (DOXYGEN_FOUND)

View File

@ -9,7 +9,18 @@
* Property Name | Description
* -----------------|----------------------------------------------------------------
* 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.
*
* @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,6 +33,21 @@
#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
* @param gds_name Path to GDS File
@ -40,7 +55,7 @@
* @param renderers Renderer ids
* @param output_file_names Output file names
* @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_layers TeX OCR layers
* @param scale Scale value
@ -51,7 +66,7 @@ int command_line_convert_gds(const char *gds_name,
char **renderers,
char **output_file_names,
const char *layer_file,
const char *so_path,
struct external_renderer_params *ext_param,
gboolean tex_standalone,
gboolean tex_layers,
double scale);

View File

@ -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__ */

View File

@ -33,6 +33,7 @@
#include <gds-render/output-renderers/gds-output-renderer.h>
#include <gds-render/gds-utils/gds-types.h>
#include <gds-render/output-renderers/external-renderer-interfaces.h>
G_BEGIN_DECLS
@ -40,16 +41,6 @@ G_BEGIN_DECLS
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
* @return New object
@ -59,9 +50,10 @@ ExternalRenderer *external_renderer_new();
/**
* @brief Create new ExternalRenderer object with specified shared object path
* @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.
*/
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

30
main.c
View File

@ -23,8 +23,6 @@
* @author Mario Hüttel <mario.huettel@gmx.net>
*/
#include <stdio.h>
#include <gtk/gtk.h>
#include <glib.h>
@ -265,9 +263,12 @@ int main(int argc, char **argv)
gchar *cellname = NULL;
gchar **renderer_args = NULL;
gboolean version = FALSE, pdf_standalone = FALSE, pdf_layers = FALSE;
gchar *custom_library_path = NULL;
int scale = 1000;
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");
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" },
{"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 },
{"custom-render-lib", 'P', 0, G_OPTION_ARG_FILENAME, &custom_library_path,
"Path to a custom shared object, that implements the " EXTERNAL_LIBRARY_FUNCTION " function", "PATH"},
{NULL}
{"custom-render-lib", 'P', 0, G_OPTION_ARG_FILENAME, &so_render_params.so_path,
_("Path to a custom shared object, that implements the necessary rendering functions"), "PATH"},
{"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"));
@ -298,6 +301,8 @@ int main(int argc, char **argv)
exit(1);
}
g_option_context_free(context);
if (version) {
print_version();
goto ret_status;
@ -318,14 +323,17 @@ int main(int argc, char **argv)
app_status =
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 {
app_status = start_gui(argc, argv);
}
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)
g_strfreev(output_paths);
if (renderer_args)
@ -334,8 +342,10 @@ ret_status:
g_free(mappingname);
if (cellname)
free(cellname);
if (custom_library_path)
free(custom_library_path);
if (so_render_params.so_path)
free(so_render_params.so_path);
if (so_render_params.cli_params)
g_free(so_render_params.cli_params);
return app_status;
}

View File

@ -30,16 +30,22 @@
#include <dlfcn.h>
#include <stdio.h>
#include <sys/wait.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 {
GdsOutputRenderer parent;
char *shared_object_path;
char *cli_param_string;
};
enum {
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 */
};
@ -52,15 +58,20 @@ G_DEFINE_TYPE(ExternalRenderer, external_renderer, GDS_RENDER_TYPE_OUTPUT_RENDER
* @param output_file Destination file
* @param scale the scaling value to scale the output cell down by.
* @param so_path Path to shared object
* @param params Parameters passed to EXTERNAL_LIBRARY_INIT_FUNCTION
* @return 0 if successful
*/
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_init_func)(const char *, const char *) = NULL;
void *so_handle = NULL;
char *error_msg;
int forking_req;
int ret = 0;
pid_t fork_pid = 0;
int forked_status;
if (!so_path) {
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;
}
/* Load symbol from library */
/* Load rendering symbol from library */
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();
if (error_msg != NULL) {
fprintf(stderr, "Rendering function not found in library:\n%s\n", error_msg);
goto ret_close_so_handle;
}
/* Execute */
if (so_render_func) {
g_message("Calling external renderer.");
ret = so_render_func(toplevel_cell, layer_info_list, output_file, scale);
g_message("External renderer finished.");
/* 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 */
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:
dlclose(so_handle);
return ret;
@ -116,7 +162,8 @@ static int external_renderer_render_output(GdsOutputRenderer *renderer,
if (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)
g_object_unref(settings);
@ -133,6 +180,9 @@ static void external_renderer_get_property(GObject *obj, guint property_id, GVal
case PROP_SO_PATH:
g_value_set_string(value, self->shared_object_path);
break;
case PROP_PARAM_STRING:
g_value_set_string(value, self->cli_param_string);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, property_id, pspec);
break;
@ -151,6 +201,11 @@ static void external_renderer_set_property(GObject *obj, guint property_id, cons
g_free(self->shared_object_path);
self->shared_object_path = g_value_dup_string(value);
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:
G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, property_id, pspec);
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)
{
ExternalRenderer *self = GDS_RENDER_EXTERNAL_RENDERER(self_obj);
ExternalRenderer *self;
self = GDS_RENDER_EXTERNAL_RENDERER(self_obj);
if (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.",
NULL,
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);
}
static void external_renderer_init(ExternalRenderer *self)
{
self->shared_object_path = NULL;
self->cli_param_string = NULL;
}
ExternalRenderer *external_renderer_new()
@ -207,9 +271,10 @@ ExternalRenderer *external_renderer_new()
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);
}
/** @} */

View File

@ -1,2 +1,2 @@
add_subdirectory(python-renderer)
add_custom_target(plugins DEPENDS pythonrenderer)
add_subdirectory(plugin-example)
add_custom_target(plugins DEPENDS pluginexample)

View File

@ -1,4 +1,4 @@
project(pythonrenderer)
project(pluginexample)
cmake_minimum_required(VERSION 2.8)
find_package(PkgConfig REQUIRED)
pkg_search_module(PYTHON REQUIRED python3)

View 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;
}

View File

@ -1,7 +0,0 @@
#include <stdio.h>
#include <stdlib.h>
int a(void)
{
return 0;
}

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\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"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\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"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -17,34 +17,34 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../gds-render-gui.c:273
#: ../gds-render-gui.c:275
msgid "Acc. Date"
msgstr ""
#: ../gds-render-gui.c:314
#: ../gds-render-gui.c:318
msgid "Cancel"
msgstr ""
#: ../gds-render-gui.c:266
#: ../gds-render-gui.c:268
msgid "Cell"
msgstr ""
#: ../gds-render-gui.c:322
#: ../gds-render-gui.c:326
msgid "GDSII-Files"
msgstr ""
#: ../gds-render-gui.c:263
#: ../gds-render-gui.c:265
msgid "Library"
msgstr ""
#: ../gds-render-gui.c:270
#: ../gds-render-gui.c:272
msgid "Mod. Date"
msgstr ""
#: ../gds-render-gui.c:315
#: ../gds-render-gui.c:319
msgid "Open GDSII"
msgstr ""
#: ../gds-render-gui.c:312
#: ../gds-render-gui.c:316
msgid "Open GDSII File"
msgstr ""

View File

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

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gds-render VERSION\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"
"Last-Translator: <mario.huettel@gmx.net>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
@ -17,34 +17,34 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../gds-render-gui.c:273
#: ../gds-render-gui.c:275
msgid "Acc. Date"
msgstr "Zugr. Datum"
#: ../gds-render-gui.c:314
#: ../gds-render-gui.c:318
msgid "Cancel"
msgstr "Abbruch"
#: ../gds-render-gui.c:266
#: ../gds-render-gui.c:268
msgid "Cell"
msgstr "Zelle"
#: ../gds-render-gui.c:322
#: ../gds-render-gui.c:326
msgid "GDSII-Files"
msgstr "GDSII-Dateiem"
#: ../gds-render-gui.c:263
#: ../gds-render-gui.c:265
msgid "Library"
msgstr "Bibliothek"
#: ../gds-render-gui.c:270
#: ../gds-render-gui.c:272
msgid "Mod. Date"
msgstr "Mod. Datum"
#: ../gds-render-gui.c:315
#: ../gds-render-gui.c:319
msgid "Open GDSII"
msgstr "GDSII öffnen"
#: ../gds-render-gui.c:312
#: ../gds-render-gui.c:316
msgid "Open GDSII File"
msgstr "GDSII Datei öffnen"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gds-render VERSION\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"
"Last-Translator: <mario.huettel@gmx.net>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
@ -17,7 +17,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../main.c:99
#: ../main.c:97
#, c-format
msgid ""
"\n"
@ -28,23 +28,27 @@ msgstr ""
"\n"
"Vollständige git Commit-ID %s"
#: ../main.c:289
#: ../main.c:293
msgid " FILE - Convert GDS file <FILE> to graphic"
msgstr "Datei -- Konvertiere GDS Datei <Datei> zu Vektorgrafik"
#: ../main.c:223
#: ../main.c:221
msgid "About"
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"
msgstr "Zu konvertierende Zelle"
#: ../main.c:284
#: ../main.c:285
msgid "Create PDF Layers (OCG)"
msgstr "Generiere PDF Layer (OCG)"
#: ../main.c:283
#: ../main.c:284
msgid "Create standalone TeX"
msgstr "Generiere alleinstehendes TeX"
@ -52,34 +56,41 @@ msgstr "Generiere alleinstehendes TeX"
msgid "Divide output coordinates by <SCALE>"
msgstr "Skaliere Ausgabekoordinaten um Faktor <SCALE> herab"
#: ../main.c:314
#: ../main.c:320
#, c-format
msgid "Ignored argument: %s"
msgstr "Ignoriertes Argument: %s"
#: ../main.c:118
#: ../main.c:116
#, c-format
msgid "Logo could not be displayed: %s\n"
msgstr "Logo konnte nicht angezeigt werden: %s\n"
#: ../main.c:294
#: ../main.c:298
#, c-format
msgid "Option parsing failed: %s\n"
msgstr "Übergabeparameterkonvertierung fehlgeschlagen: %s\n"
#: ../main.c:280
#: ../main.c:281
msgid "Output file path. Can be used multiple times."
msgstr "Ausgabedatei. Kann mehrfach angegeben werden."
#: ../main.c:281
#: ../main.c:282
msgid "Path for Layer Mapping File"
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"
msgstr "Programmversion aufgeben"
#: ../main.c:222
#: ../main.c:220
msgid "Quit"
msgstr "Beenden"
@ -87,12 +98,12 @@ msgstr "Beenden"
msgid "Renderer to use. Can be used multiple times."
msgstr "Gewünschter Renderer. Kann mehrfach angegeben werden."
#: ../main.c:305
#: ../main.c:311
#, c-format
msgid "Scale < 1 not allowed. Setting to 1\n"
msgstr "Skalierung < 1 nicht erlaubt. Rückfallwert 1 benutzt.\n"
#: ../main.c:215
#: ../main.c:213
#, c-format
msgid ""
"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 "
"in dieser wird geöffnet.\n"
#: ../main.c:247
#: ../main.c:245
#, c-format
msgid ""
"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 --"
"help ausführen.\n"
#: ../main.c:98
#: ../main.c:96
msgid ""
"gds-render is a free tool for rendering GDS2 layout files into vector "
"graphics."

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\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"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"