Compare commits
73 Commits
v1.2.3-1
...
447d583103
| Author | SHA1 | Date | |
|---|---|---|---|
| 447d583103 | |||
| 394efb79cf | |||
| 2420b80c9e | |||
| 02f221b926 | |||
| dd2f21c5cd | |||
| b27676e0a4 | |||
| b610b1593a | |||
| 95f6b31e4b | |||
| a4d84cff43 | |||
| aa7f5b4745 | |||
| 71b500e030 | |||
| 2d7103abbb | |||
| d69d4f3f7e | |||
| a60fe6543e | |||
| dc32499ad7 | |||
| 322439145e | |||
| 231248e404 | |||
| 88d912f59d | |||
| 392d7e1b3c | |||
| f454ca7e71 | |||
| 2fddfa475b | |||
| 045b9dce30 | |||
| 112a5ac74c | |||
| 6b5101ecec | |||
| 583e5581c0 | |||
| 519d2296ad | |||
| 02720ec37b | |||
| cf2947d2d5 | |||
| c7ceef7d66 | |||
| 80730ab9c4 | |||
| 0c20db39bd | |||
| ebce4a2669 | |||
| 1b1f742ae1 | |||
| 3b6837b886 | |||
| efb1af7ee0 | |||
| fa1a78e54c | |||
| 0417784877 | |||
| c186d3cdb3 | |||
| f02a720f99 | |||
| 374a893dda | |||
| 83a7848c14 | |||
| 7977ee7c8b | |||
| 48eb2c296f | |||
| 3d5c4daad9 | |||
| 9899b94db6 | |||
| f153485996 | |||
| f15e82b5dc | |||
| daf12a7d8c | |||
| 11f2068b76 | |||
| 24d66e74fe | |||
| 58a0bd85c4 | |||
| f8de3468de | |||
| 4cc31c81e3 | |||
| 74dfbd9b34 | |||
| 40a7e5a650 | |||
| 866d36873a | |||
| 70ea6a8901 | |||
| e7bf59aa8c | |||
| 8f788e262f | |||
| 4a6b0dc879 | |||
| f7b2a331ec | |||
| e90cd1313d | |||
| 0fbbc1db64 | |||
| 8005e8bcc7 | |||
| 31a47339f8 | |||
| 7753e42078 | |||
| b2ffc709bb | |||
| b6c6262662 | |||
| c70f99a283 | |||
| 592dcbae53 | |||
| f1102162b7 | |||
| 8bef6bcb17 | |||
| dc40dec212 |
11
AUR/PKGBUILD
11
AUR/PKGBUILD
@@ -1,7 +1,7 @@
|
||||
# Maintainer: Mario Hüttel <mario (dot) huettel (!) gmx (dot) net>
|
||||
|
||||
pkgname=gds-render
|
||||
pkgver=20180725.001
|
||||
pkgver=20191020.403.448de30
|
||||
pkgrel=1
|
||||
pkgdesc="Conversion tool for converting GDS layout files into TikZ Code and PDF"
|
||||
arch=('i686' 'x86_64')
|
||||
@@ -20,13 +20,14 @@ pkgver () {
|
||||
}
|
||||
|
||||
build () {
|
||||
cd "$srcdir/$pkgname-git"
|
||||
cmake -DCMAKE_BUILD_TYPE=Release .
|
||||
mkdir "$srcdir/$pkgname-git/build"
|
||||
cd "$srcdir/$pkgname-git/build"
|
||||
cmake -DCMAKE_BUILD_TYPE=Release ..
|
||||
make
|
||||
}
|
||||
|
||||
package () {
|
||||
cd "$srcdir/$pkgname-git"
|
||||
cd "$srcdir/$pkgname-git/build"
|
||||
make DESTDIR="${pkgdir}" install
|
||||
install -D -m664 "$srcdir/$pkgname-git/AUR/gds-render.desktop" \
|
||||
"$pkgdir/usr/share/applications/gds-render.desktop"
|
||||
@@ -34,4 +35,6 @@ package () {
|
||||
"$pkgdir/usr/share/icons/hicolor/scalable/apps/gds-render.svg"
|
||||
install -D -m664 "$srcdir/$pkgname-git/icon/128x128/gds-render.png" \
|
||||
"$pkgdir/usr/share/icons/hicolor/128x128/apps/gds-render.png"
|
||||
|
||||
(cd $srcdir/$pkgname-git/build/translations/output/ && tar cf - "locale" | (cd "$pkgdir/usr/share/" && tar xf -))
|
||||
}
|
||||
|
||||
@@ -1,18 +1,54 @@
|
||||
project(gds-render)
|
||||
|
||||
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
||||
set(CMAKE_INSTALL_PREFIX "/usr/" CACHE PATH "..." FORCE)
|
||||
endif()
|
||||
|
||||
if(NOT WIN32)
|
||||
string(ASCII 27 Esc)
|
||||
set(ColorReset "${Esc}[m")
|
||||
set(ColorBold "${Esc}[1m")
|
||||
set(Red "${Esc}[31m")
|
||||
set(Green "${Esc}[32m")
|
||||
set(Yellow "${Esc}[33m")
|
||||
set(Blue "${Esc}[34m")
|
||||
set(Magenta "${Esc}[35m")
|
||||
set(Cyan "${Esc}[36m")
|
||||
set(White "${Esc}[37m")
|
||||
set(BoldRed "${Esc}[1;31m")
|
||||
set(BoldGreen "${Esc}[1;32m")
|
||||
set(BoldYellow "${Esc}[1;33m")
|
||||
set(BoldBlue "${Esc}[1;34m")
|
||||
set(BoldMagenta "${Esc}[1;35m")
|
||||
set(BoldCyan "${Esc}[1;36m")
|
||||
set(BoldWhite "${Esc}[1;37m")
|
||||
endif()
|
||||
|
||||
cmake_minimum_required(VERSION 2.8)
|
||||
find_package(PkgConfig REQUIRED)
|
||||
pkg_search_module(GLIB REQUIRED glib-2.0)
|
||||
pkg_check_modules(GTK3 REQUIRED gtk+-3.0)
|
||||
pkg_check_modules(CAIRO REQUIRED cairo)
|
||||
|
||||
add_compile_options(-Wall -Wold-style-declaration -Wuninitialized -Wmaybe-uninitialized -Wunused-parameter)
|
||||
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)
|
||||
|
||||
IF(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
message("${Yellow}Debug mode for translations used!${ColorReset}")
|
||||
add_definitions(-DGETTEXT_PACKAGE=\"gds-render\" -DLOCALEDATADIR=\"${CMAKE_CURRENT_BINARY_DIR}/translations/output\")
|
||||
message("${BoldMagenta}${CMAKE_CURRENT_BINARY_DIR}/translations/output used as data dir${ColorReset}")
|
||||
else(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
message("${BoldCyan}Global locale directory used. Make sure files in /usr/share/locale are available${ColorReset}")
|
||||
add_definitions(-DGETTEXT_PACKAGE=\"gds-render\" -DLOCALEDATADIR=\"/usr/share\")
|
||||
ENDIF(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
|
||||
add_subdirectory(resources)
|
||||
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})
|
||||
|
||||
@@ -34,11 +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)
|
||||
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} DESTINATION bin)
|
||||
add_dependencies(${PROJECT_NAME} translations)
|
||||
|
||||
add_custom_target(documentation DEPENDS doxygen)
|
||||
target_link_libraries(${PROJECT_NAME} ${GLIB_LDFLAGS} ${GTK3_LDFLAGS} ${CAIRO_LDFLAGS} m version ${CMAKE_DL_LIBS})
|
||||
install (TARGETS ${PROJECT_NAME}
|
||||
RUNTIME
|
||||
DESTINATION bin
|
||||
)
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -29,6 +29,7 @@
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <glib/gi18n.h>
|
||||
|
||||
#include <gds-render/command-line.h>
|
||||
#include <gds-render/gds-utils/gds-parser.h>
|
||||
@@ -55,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)
|
||||
{
|
||||
@@ -70,14 +71,14 @@ static int create_renderers(char **renderers,
|
||||
return -1;
|
||||
|
||||
if (!renderers || !output_file_names) {
|
||||
fprintf(stderr, "Please specify renderers and file names\n");
|
||||
fprintf(stderr, _("Please specify renderers and file names\n"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
count_render = string_array_count(renderers);
|
||||
count_out = string_array_count(output_file_names);
|
||||
if (count_render != count_out) {
|
||||
fprintf(stderr, "Count of renderers %d does not match count of output file names %d\n",
|
||||
fprintf(stderr, _("Count of renderers %d does not match count of output file names %d\n"),
|
||||
count_render, count_out);
|
||||
return -1;
|
||||
}
|
||||
@@ -99,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) {
|
||||
fprintf(stderr, "Please specify shared object for external renderer. Will ignore this renderer.\n");
|
||||
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;
|
||||
}
|
||||
@@ -137,12 +140,13 @@ 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)
|
||||
{
|
||||
int ret = -1;
|
||||
int render_ret;
|
||||
GList *libs = NULL;
|
||||
int res;
|
||||
GList *renderer_list = NULL;
|
||||
@@ -154,17 +158,24 @@ int command_line_convert_gds(const char *gds_name,
|
||||
|
||||
/* Check if parameters are valid */
|
||||
if (!gds_name || !cell_name || !output_file_names || !layer_file || !renderers) {
|
||||
printf("Probably missing argument. Check --help option\n");
|
||||
printf(_("Probably missing argument. Check --help option\n"));
|
||||
return -2;
|
||||
}
|
||||
|
||||
/* Load layer_settings */
|
||||
layer_sett = layer_settings_new();
|
||||
layer_settings_load_from_csv(layer_sett, layer_file);
|
||||
if (!layer_sett)
|
||||
goto return_value;
|
||||
|
||||
ret = layer_settings_load_from_csv(layer_sett, layer_file);
|
||||
if (ret) {
|
||||
fprintf(stderr, _("Loading layer mapping file failed.\n"));
|
||||
goto ret_destroy_layer_mapping;
|
||||
}
|
||||
|
||||
/* 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;
|
||||
|
||||
|
||||
@@ -180,7 +191,7 @@ int command_line_convert_gds(const char *gds_name,
|
||||
|
||||
first_lib = (struct gds_library *)libs->data;
|
||||
if (!first_lib) {
|
||||
fprintf(stderr, "No library in library list. This should not happen.\n");
|
||||
fprintf(stderr, _("No library in library list. This should not happen.\n"));
|
||||
/* This is safe. Library destruction can handle an empty list element */
|
||||
goto ret_destroy_library_list;
|
||||
}
|
||||
@@ -189,27 +200,27 @@ int command_line_convert_gds(const char *gds_name,
|
||||
toplevel_cell = find_gds_cell_in_lib(first_lib, cell_name);
|
||||
|
||||
if (!toplevel_cell) {
|
||||
printf("Couldn't find cell in first library!\n");
|
||||
printf(_("Couldn't find cell in first library!\n"));
|
||||
goto ret_destroy_library_list;
|
||||
}
|
||||
|
||||
/* Check if cell passes vital checks */
|
||||
res = gds_tree_check_reference_loops(toplevel_cell->parent_library);
|
||||
if (res < 0) {
|
||||
fprintf(stderr, "Checking library %s failed.\n", first_lib->name);
|
||||
fprintf(stderr, _("Checking library %s failed.\n"), first_lib->name);
|
||||
goto ret_destroy_library_list;
|
||||
} else if (res > 0) {
|
||||
fprintf(stderr, "%d reference loops found.\n", res);
|
||||
fprintf(stderr, _("%d reference loops found.\n"), res);
|
||||
|
||||
/* do further checking if the specified cell and/or its subcells are affected */
|
||||
if (toplevel_cell->checks.affected_by_reference_loop == 1) {
|
||||
fprintf(stderr, "Cell is affected by reference loop. Abort!\n");
|
||||
fprintf(stderr, _("Cell is affected by reference loop. Abort!\n"));
|
||||
goto ret_destroy_library_list;
|
||||
}
|
||||
}
|
||||
|
||||
if (toplevel_cell->checks.affected_by_reference_loop == GDS_CELL_CHECK_NOT_RUN)
|
||||
fprintf(stderr, "Cell was not checked. This should not happen. Please report this issue. Will continue either way.\n");
|
||||
fprintf(stderr, _("Cell was not checked. This should not happen. Please report this issue. Will continue either way.\n"));
|
||||
|
||||
/* Note: unresolved references are not an abort condition.
|
||||
* Deal with it.
|
||||
@@ -218,7 +229,9 @@ int command_line_convert_gds(const char *gds_name,
|
||||
/* Execute all rendererer instances */
|
||||
for (list_iter = renderer_list; list_iter; list_iter = list_iter->next) {
|
||||
current_renderer = GDS_RENDER_OUTPUT_RENDERER(list_iter->data);
|
||||
gds_output_renderer_render_output(current_renderer, toplevel_cell, scale);
|
||||
render_ret = gds_output_renderer_render_output(current_renderer, toplevel_cell, scale);
|
||||
if (render_ret)
|
||||
fprintf(stderr, "Rendering failed with error code: %d\n", render_ret);
|
||||
}
|
||||
|
||||
ret_destroy_library_list:
|
||||
@@ -228,6 +241,7 @@ ret_clear_renderers:
|
||||
g_object_unref(list_iter->data);
|
||||
ret_destroy_layer_mapping:
|
||||
g_object_unref(layer_sett);
|
||||
return_value:
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,10 +1,19 @@
|
||||
find_package(Doxygen)
|
||||
|
||||
if (DOXYGEN_FOUND)
|
||||
add_custom_target(doxygen
|
||||
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 need to be installed to generate the doxygen documentation")
|
||||
message("Doxygen needs to be installed to generate the doxygen documentation")
|
||||
endif (DOXYGEN_FOUND)
|
||||
|
||||
@@ -9,7 +9,19 @@
|
||||
* 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
|
||||
* @ref EXTERNAL_LIBRARY_FINALIZE_FUNCTION | int EXTERNAL_LIBRARY_FINALIZE_FUNCTION(void) | Called after rendering
|
||||
*
|
||||
*/
|
||||
|
||||
6
doxygen/plugins.dox
Normal file
6
doxygen/plugins.dox
Normal file
@@ -0,0 +1,6 @@
|
||||
/**
|
||||
* @defgroup plugins External Renderer Plugins
|
||||
*
|
||||
* These plugins can be loaded with the @ref ExternalRenderer
|
||||
*
|
||||
*/
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -29,6 +29,7 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <gtk/gtk.h>
|
||||
#include <glib/gi18n.h>
|
||||
|
||||
#include <gds-render/gds-render-gui.h>
|
||||
#include <gds-render/gds-utils/gds-parser.h>
|
||||
@@ -261,17 +262,17 @@ int gds_render_gui_setup_cell_selector(GdsRenderGui *self)
|
||||
render_cell = lib_cell_renderer_new();
|
||||
render_lib = lib_cell_renderer_new();
|
||||
|
||||
column = gtk_tree_view_column_new_with_attributes("Library", render_lib, "gds-lib", CELL_SEL_LIBRARY, NULL);
|
||||
column = gtk_tree_view_column_new_with_attributes(_("Library"), render_lib, "gds-lib", CELL_SEL_LIBRARY, NULL);
|
||||
gtk_tree_view_append_column(self->cell_tree_view, column);
|
||||
|
||||
column = gtk_tree_view_column_new_with_attributes("Cell", render_cell, "gds-cell", CELL_SEL_CELL,
|
||||
column = gtk_tree_view_column_new_with_attributes(_("Cell"), render_cell, "gds-cell", CELL_SEL_CELL,
|
||||
"error-level", CELL_SEL_CELL_ERROR_STATE, NULL);
|
||||
gtk_tree_view_append_column(self->cell_tree_view, column);
|
||||
|
||||
column = gtk_tree_view_column_new_with_attributes("Mod. Date", render_dates, "text", CELL_SEL_MODDATE, NULL);
|
||||
column = gtk_tree_view_column_new_with_attributes(_("Mod. Date"), render_dates, "text", CELL_SEL_MODDATE, NULL);
|
||||
gtk_tree_view_append_column(self->cell_tree_view, column);
|
||||
|
||||
column = gtk_tree_view_column_new_with_attributes("Acc. Date", render_dates, "text", CELL_SEL_ACCESSDATE, NULL);
|
||||
column = gtk_tree_view_column_new_with_attributes(_("Acc. Date"), render_dates, "text", CELL_SEL_ACCESSDATE, NULL);
|
||||
gtk_tree_view_append_column(self->cell_tree_view, column);
|
||||
|
||||
/* Callback for selection
|
||||
@@ -312,17 +313,17 @@ static void on_load_gds(gpointer button, gpointer user)
|
||||
if (!self)
|
||||
return;
|
||||
|
||||
open_dialog = gtk_file_chooser_dialog_new("Open GDSII File", self->main_window,
|
||||
open_dialog = gtk_file_chooser_dialog_new(_("Open GDSII File"), self->main_window,
|
||||
GTK_FILE_CHOOSER_ACTION_OPEN,
|
||||
"Cancel", GTK_RESPONSE_CANCEL,
|
||||
"Open GDSII", GTK_RESPONSE_ACCEPT,
|
||||
_("Cancel"), GTK_RESPONSE_CANCEL,
|
||||
_("Open GDSII"), GTK_RESPONSE_ACCEPT,
|
||||
NULL);
|
||||
file_chooser = GTK_FILE_CHOOSER(open_dialog);
|
||||
|
||||
/* Add GDS II Filter */
|
||||
filter = gtk_file_filter_new();
|
||||
gtk_file_filter_add_pattern(filter, "*.gds");
|
||||
gtk_file_filter_set_name(filter, "GDSII-Files");
|
||||
gtk_file_filter_set_name(filter, _("GDSII-Files"));
|
||||
gtk_file_chooser_add_filter(file_chooser, filter);
|
||||
|
||||
dialog_result = gtk_dialog_run(GTK_DIALOG(open_dialog));
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -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);
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
* @file cairo-renderer.h
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
#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 Function name expected to be found in external library for finalizing.
|
||||
*
|
||||
* @code
|
||||
* int EXTERNAL_LIBRARY_FINALIZE_FUNCTION(void);
|
||||
* @endcode
|
||||
*/
|
||||
#define EXTERNAL_LIBRARY_FINALIZE_FUNCTION exported_finalize
|
||||
|
||||
/**
|
||||
* @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__ */
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -106,13 +106,13 @@ static int color_palette_fill_with_resource(ColorPalette *palette, char *resourc
|
||||
char_array = (const char *)g_bytes_get_data(data, &byte_count);
|
||||
|
||||
if (!char_array || !byte_count)
|
||||
goto ret_unref;
|
||||
goto ret_unref_data;
|
||||
|
||||
/* Get maximum lenght of color palette, assuming all entries are valid */
|
||||
lines = count_non_empty_lines_in_array(char_array, byte_count);
|
||||
|
||||
if (lines <= 0)
|
||||
goto ret_unref;
|
||||
goto ret_unref_data;
|
||||
|
||||
palette->color_array = (GdkRGBA *)malloc(sizeof(GdkRGBA) * (unsigned int)lines);
|
||||
|
||||
@@ -128,18 +128,17 @@ static int color_palette_fill_with_resource(ColorPalette *palette, char *resourc
|
||||
color_idx = 0;
|
||||
|
||||
/* interate over lines and match */
|
||||
for (idx = 0 ; idx < byte_count; idx++) {
|
||||
for (idx = 0 ; (unsigned int)idx < byte_count; idx++) {
|
||||
/* Fillup line. */
|
||||
line[line_idx] = char_array[idx];
|
||||
|
||||
|
||||
/* If end of line/string is reached, process */
|
||||
if (line[line_idx] == '\n' || line[line_idx] == '\0') {
|
||||
line[line_idx] = '\0';
|
||||
|
||||
/* Match the line */
|
||||
g_regex_match(regex, line, 0, &mi);
|
||||
if (g_match_info_matches(mi) && color_idx < lines) {
|
||||
if (g_match_info_matches(mi) && color_idx < (unsigned int)lines) {
|
||||
match = g_match_info_fetch_named(mi, "red");
|
||||
palette->color_array[color_idx].red =
|
||||
(double)g_ascii_strtoll(match, NULL, 16) / 255.0;
|
||||
@@ -169,10 +168,10 @@ static int color_palette_fill_with_resource(ColorPalette *palette, char *resourc
|
||||
continue;
|
||||
}
|
||||
|
||||
/* increment line index. If end is reached write all bytes to the line end
|
||||
* line is longer than required for parsing. This ensures, that everything works as expected
|
||||
/* increment line index. If end is reached write all bytes to the line end.
|
||||
* Line is longer than required for parsing. This ensures, that everything works as expected
|
||||
*/
|
||||
line_idx += (line_idx < sizeof(line)-1 ? 1 : 0);
|
||||
line_idx += ((unsigned int)line_idx < sizeof(line)-1 ? 1 : 0);
|
||||
}
|
||||
|
||||
/* Data read; Shrink array in case of invalid lines */
|
||||
@@ -180,7 +179,7 @@ static int color_palette_fill_with_resource(ColorPalette *palette, char *resourc
|
||||
palette->color_array_length = color_idx;
|
||||
|
||||
g_regex_unref(regex);
|
||||
ret_unref:
|
||||
ret_unref_data:
|
||||
g_bytes_unref(data);
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -77,9 +77,9 @@ static void layer_settings_class_init(LayerSettingsClass *klass)
|
||||
* @brief Copy layer_info struct
|
||||
*
|
||||
* This function copies a layer info struct.
|
||||
* Be aware, that it does not only copy the pointer to the
|
||||
* layer name, but instead duplicates the string.
|
||||
*
|
||||
* @note Be aware, that it does not only copy the pointer to the
|
||||
* layer name, but instead duplicates the string.
|
||||
* @param info Info to copy
|
||||
* @return new layer_info struct
|
||||
*/
|
||||
|
||||
67
main.c
67
main.c
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -26,6 +26,8 @@
|
||||
#include <stdio.h>
|
||||
#include <gtk/gtk.h>
|
||||
#include <glib.h>
|
||||
#include <glib/gi18n.h>
|
||||
#include <locale.h>
|
||||
|
||||
#include <gds-render/gds-render-gui.h>
|
||||
#include <gds-render/command-line.h>
|
||||
@@ -91,8 +93,8 @@ static void app_about(GSimpleAction *action, GVariant *parameter, gpointer user_
|
||||
(void)parameter;
|
||||
GString *comment_text;
|
||||
|
||||
comment_text = g_string_new("gds-render is a free tool for rendering GDS2 layout files into vector graphics.");
|
||||
g_string_append_printf(comment_text, "\n\nFull git commit: %s", _app_git_commit);
|
||||
comment_text = g_string_new(_("gds-render is a free tool for rendering GDS2 layout files into vector graphics."));
|
||||
g_string_append_printf(comment_text, _("\n\nFull git commit: %s"), _app_git_commit);
|
||||
|
||||
builder = gtk_builder_new_from_resource("/gui/about.glade");
|
||||
dialog = GTK_DIALOG(gtk_builder_get_object(builder, "about-dialog"));
|
||||
@@ -111,7 +113,7 @@ static void app_about(GSimpleAction *action, GVariant *parameter, gpointer user_
|
||||
/* Pixbuf is now owned by about dialog. Unref */
|
||||
g_object_unref(logo_buf);
|
||||
} else if (error) {
|
||||
fprintf(stderr, "Logo could not be displayed: %s\n", error->message);
|
||||
fprintf(stderr, _("Logo could not be displayed: %s\n"), error->message);
|
||||
g_error_free(error);
|
||||
}
|
||||
|
||||
@@ -208,15 +210,15 @@ static int start_gui(int argc, char **argv)
|
||||
|
||||
if (g_application_get_is_remote(G_APPLICATION(gapp)) == TRUE) {
|
||||
g_application_activate(G_APPLICATION(gapp));
|
||||
printf("There is already an open instance. Will open second window in that instance.\n");
|
||||
printf(_("There is already an open instance. Will open second window in that instance.\n"));
|
||||
return 0;
|
||||
}
|
||||
|
||||
menu = g_menu_new();
|
||||
m_quit = g_menu_new();
|
||||
m_about = g_menu_new();
|
||||
g_menu_append(m_quit, "Quit", "app.quit");
|
||||
g_menu_append(m_about, "About", "app.about");
|
||||
g_menu_append(m_quit, _("Quit"), "app.quit");
|
||||
g_menu_append(m_about, _("About"), "app.about");
|
||||
g_menu_append_section(menu, NULL, G_MENU_MODEL(m_about));
|
||||
g_menu_append_section(menu, NULL, G_MENU_MODEL(m_quit));
|
||||
g_action_map_add_action_entries(G_ACTION_MAP(gapp), app_actions,
|
||||
@@ -240,7 +242,7 @@ static int start_gui(int argc, char **argv)
|
||||
*/
|
||||
static void print_version(void)
|
||||
{
|
||||
printf("This is gds-render, version: %s\n\nFor a list of supported commands execute with --help option.\n",
|
||||
printf(_("This is gds-render, version: %s\n\nFor a list of supported commands execute with --help option.\n"),
|
||||
_app_version_string);
|
||||
}
|
||||
|
||||
@@ -261,32 +263,41 @@ 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");
|
||||
textdomain(GETTEXT_PACKAGE);
|
||||
|
||||
GOptionEntry entries[] = {
|
||||
{"version", 'v', 0, G_OPTION_ARG_NONE, &version, "Print version", NULL},
|
||||
{"version", 'v', 0, G_OPTION_ARG_NONE, &version, _("Print version"), NULL},
|
||||
{"renderer", 'r', 0, G_OPTION_ARG_STRING_ARRAY, &renderer_args,
|
||||
"Renderer to use. Can be used multiple times.", "pdf|svg|tikz|ext"},
|
||||
{"scale", 's', 0, G_OPTION_ARG_INT, &scale, "Divide output coordinates by <SCALE>", "<SCALE>" },
|
||||
_("Renderer to use. Can be used multiple times."), "pdf|svg|tikz|ext"},
|
||||
{"scale", 's', 0, G_OPTION_ARG_INT, &scale, _("Divide output coordinates by <SCALE>"), "<SCALE>" },
|
||||
{"output-file", 'o', 0, G_OPTION_ARG_FILENAME_ARRAY, &output_paths,
|
||||
"Output file path. Can be used multiple times.", "PATH" },
|
||||
{"mapping", 'm', 0, G_OPTION_ARG_FILENAME, &mappingname, "Path for Layer Mapping File", "PATH" },
|
||||
{"cell", 'c', 0, G_OPTION_ARG_STRING, &cellname, "Cell to render", "NAME" },
|
||||
{"tex-standalone", 'a', 0, G_OPTION_ARG_NONE, &pdf_standalone, "Create standalone PDF", 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}
|
||||
_("Output file path. Can be used multiple times."), "PATH" },
|
||||
{"mapping", 'm', 0, G_OPTION_ARG_FILENAME, &mappingname, _("Path for Layer Mapping File"), "PATH" },
|
||||
{"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, &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");
|
||||
context = g_option_context_new(_(" FILE - Convert GDS file <FILE> to graphic"));
|
||||
g_option_context_add_main_entries(context, entries, NULL);
|
||||
g_option_context_add_group(context, gtk_get_option_group(TRUE));
|
||||
|
||||
if (!g_option_context_parse(context, &argc, &argv, &error)) {
|
||||
g_print("Option parsing failed: %s\n", error->message);
|
||||
g_print(_("Option parsing failed: %s\n"), error->message);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
@@ -299,7 +310,7 @@ int main(int argc, char **argv)
|
||||
|
||||
if (argc >= 2) {
|
||||
if (scale < 1) {
|
||||
printf("Scale < 1 not allowed. Setting to 1\n");
|
||||
printf(_("Scale < 1 not allowed. Setting to 1\n"));
|
||||
scale = 1;
|
||||
}
|
||||
|
||||
@@ -308,11 +319,11 @@ int main(int argc, char **argv)
|
||||
|
||||
/* Print out additional arguments as ignored */
|
||||
for (i = 2; i < argc; i++)
|
||||
printf("Ignored argument: %s", argv[i]);
|
||||
printf(_("Ignored argument: %s"), argv[i]);
|
||||
|
||||
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);
|
||||
@@ -331,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;
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
* @file cairo-renderer.c
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -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,21 @@ 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;
|
||||
int (*so_finalize_func)(void) = 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 +90,68 @@ 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) {
|
||||
if (error_msg) {
|
||||
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) {
|
||||
fprintf(stderr, "Rendering function not found in library:\n%s\n", error_msg);
|
||||
goto ret_close_so_handle;
|
||||
}
|
||||
|
||||
/* Load the finalize function */
|
||||
so_finalize_func = (int (*)(void))dlsym(so_handle, xstr(EXTERNAL_LIBRARY_FINALIZE_FUNCTION));
|
||||
error_msg = dlerror();
|
||||
if (error_msg) {
|
||||
fprintf(stderr, "Finalize 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);
|
||||
|
||||
/* Finalize the external renderer */
|
||||
ret |= so_finalize_func();
|
||||
|
||||
/* 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 +174,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 +192,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 +213,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 +226,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 +263,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 +283,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);
|
||||
}
|
||||
|
||||
/** @} */
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
4
plugins/CMakeLists.txt
Normal file
4
plugins/CMakeLists.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
add_subdirectory(plugin-example)
|
||||
add_subdirectory(python-renderer)
|
||||
|
||||
add_custom_target(plugins DEPENDS pluginexample pythonrenderer)
|
||||
11
plugins/plugin-example/CMakeLists.txt
Normal file
11
plugins/plugin-example/CMakeLists.txt
Normal file
@@ -0,0 +1,11 @@
|
||||
project(pluginexample)
|
||||
cmake_minimum_required(VERSION 2.8)
|
||||
find_package(PkgConfig REQUIRED)
|
||||
|
||||
aux_source_directory(src SOURCES)
|
||||
|
||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
|
||||
link_libraries(version)
|
||||
|
||||
add_library(${PROJECT_NAME} SHARED EXCLUDE_FROM_ALL ${SOURCES})
|
||||
add_dependencies(${PROJECT_NAME} version)
|
||||
53
plugins/plugin-example/src/plugin-main.c
Normal file
53
plugins/plugin-example/src/plugin-main.c
Normal file
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* GDSII-Converter example plugin
|
||||
* Copyright (C) 2019 Mario Hüttel <mario.huettel@gmx.net>
|
||||
*
|
||||
* This file is part of GDSII-Converter.
|
||||
*
|
||||
* GDSII-Converter is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* GDSII-Converter is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup example-plugin Example Plugin for External Renderer
|
||||
* @ingroup plugins
|
||||
* This is a template / example for an external renderer plugin
|
||||
* @addtogroup example-plugin
|
||||
* @{
|
||||
*/
|
||||
|
||||
#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;
|
||||
}
|
||||
|
||||
int FUNC_DECL(EXTERNAL_LIBRARY_FINALIZE_FUNCTION)(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** @} */
|
||||
34
plugins/python-renderer/CMakeLists.txt
Normal file
34
plugins/python-renderer/CMakeLists.txt
Normal file
@@ -0,0 +1,34 @@
|
||||
project(pythonrenderer)
|
||||
cmake_minimum_required(VERSION 2.8.8)
|
||||
find_package(PythonLibs)
|
||||
|
||||
if(NOT WIN32)
|
||||
string(ASCII 27 Esc)
|
||||
set(ColorReset "${Esc}[m")
|
||||
set(ColorBold "${Esc}[1m")
|
||||
set(Red "${Esc}[31m")
|
||||
set(Green "${Esc}[32m")
|
||||
set(Yellow "${Esc}[33m")
|
||||
set(Blue "${Esc}[34m")
|
||||
set(Magenta "${Esc}[35m")
|
||||
set(Cyan "${Esc}[36m")
|
||||
set(White "${Esc}[37m")
|
||||
set(BoldRed "${Esc}[1;31m")
|
||||
set(BoldGreen "${Esc}[1;32m")
|
||||
set(BoldYellow "${Esc}[1;33m")
|
||||
set(BoldBlue "${Esc}[1;34m")
|
||||
set(BoldMagenta "${Esc}[1;35m")
|
||||
set(BoldCyan "${Esc}[1;36m")
|
||||
set(BoldWhite "${Esc}[1;37m")
|
||||
endif()
|
||||
|
||||
aux_source_directory(src SOURCES)
|
||||
|
||||
include_directories(${PYTHON_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/include)
|
||||
link_libraries(${PYTHON_LIBRARIES} version)
|
||||
|
||||
message("${BoldCyan}Python version found: ${PYTHONLIBS_VERSION_STRING}${ColorReset}")
|
||||
|
||||
add_library(${PROJECT_NAME} SHARED EXCLUDE_FROM_ALL ${SOURCES})
|
||||
add_dependencies(${PROJECT_NAME} version)
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* GDSII-Converter Python Plugin
|
||||
* Copyright (C) 2019 Mario Hüttel <mario.huettel@gmx.net>
|
||||
*
|
||||
* This file is part of GDSII-Converter.
|
||||
*
|
||||
* GDSII-Converter is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* GDSII-Converter is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file gds-render-module.h
|
||||
* @brief Header file for the gds-render python module implementation
|
||||
* @author Mario Hüttel <mario.huettel@gmx.net>
|
||||
*/
|
||||
|
||||
#ifndef __GDS_RENDER_MODULE_H__
|
||||
#define __GDS_RENDER_MODULE_H__
|
||||
|
||||
/**
|
||||
* @addtogroup python-renderer
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include <Python.h>
|
||||
|
||||
/**
|
||||
* @brief The gds_render python module name as string
|
||||
*/
|
||||
#define GDS_RENDER_MOD_NAME "gds_render"
|
||||
|
||||
/**
|
||||
* @brief Set up the gds_render python module
|
||||
* @return New module reference
|
||||
*/
|
||||
PyObject *init_gds_render_module();
|
||||
|
||||
/** @} */
|
||||
|
||||
#endif /* __GDS_RENDER_MODULE_H__ */
|
||||
114
plugins/python-renderer/src/gds-render-module.c
Normal file
114
plugins/python-renderer/src/gds-render-module.c
Normal file
@@ -0,0 +1,114 @@
|
||||
/*
|
||||
* GDSII-Converter Python Plugin
|
||||
* Copyright (C) 2019 Mario Hüttel <mario.huettel@gmx.net>
|
||||
*
|
||||
* This file is part of GDSII-Converter.
|
||||
*
|
||||
* GDSII-Converter is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* GDSII-Converter is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file gds-render-module.c
|
||||
* @brief Gds-render python module implementation
|
||||
* @author Mario Hüttel <mario.huettel@gmx.net>
|
||||
*/
|
||||
|
||||
#include <python-renderer/gds-render-module.h>
|
||||
#include <gds-render/gds-utils/gds-types.h>
|
||||
|
||||
typedef struct {
|
||||
PyObject_HEAD
|
||||
/* TODO: Fill in type specific fields */
|
||||
} GdsPointObject;
|
||||
|
||||
static PyTypeObject GdsPointType = {
|
||||
PyVarObject_HEAD_INIT(NULL, 0)
|
||||
.tp_name = GDS_RENDER_MOD_NAME ".GdsPoint",
|
||||
.tp_doc = "2D Gds Database Point",
|
||||
.tp_basicsize = sizeof(GdsPointObject),
|
||||
.tp_itemsize = 0,
|
||||
.tp_flags = Py_TPFLAGS_DEFAULT,
|
||||
.tp_new = PyType_GenericNew,
|
||||
};
|
||||
|
||||
static PyObject *test(PyObject *self, PyObject *args)
|
||||
{
|
||||
long int i;
|
||||
|
||||
if(!PyArg_ParseTuple(args, "l:get_number", &i))
|
||||
return NULL;
|
||||
|
||||
i *= i;
|
||||
|
||||
return PyLong_FromLong(i);
|
||||
}
|
||||
|
||||
static PyMethodDef gds_render_methods[] = {
|
||||
{"get_number", test, METH_VARARGS, "Return the number of arguments received by the process."},
|
||||
{NULL, NULL, 0, NULL}
|
||||
};
|
||||
|
||||
static PyModuleDef gds_render_module_def = {
|
||||
PyModuleDef_HEAD_INIT,
|
||||
.m_name = GDS_RENDER_MOD_NAME,
|
||||
.m_doc = "GDS Render Base App Module",
|
||||
.m_size = -1,
|
||||
.m_methods = gds_render_methods,
|
||||
NULL, NULL, NULL, NULL
|
||||
};
|
||||
|
||||
static int gds_render_module_check_types_ready()
|
||||
{
|
||||
if (PyType_Ready(&GdsPointType) < 0)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int gds_render_module_add_types(PyObject *module)
|
||||
{
|
||||
int err;
|
||||
|
||||
Py_INCREF(&GdsPointType);
|
||||
err = PyModule_AddObject(module, "GdsPoint", (PyObject *)&GdsPointType);
|
||||
if (err < 0) {
|
||||
goto decref_gds_point;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
decref_gds_point:
|
||||
Py_DECREF(&GdsPointType);
|
||||
return -1;
|
||||
}
|
||||
|
||||
PyObject *init_gds_render_module(void)
|
||||
{
|
||||
int err;
|
||||
PyObject *gds_render_module;
|
||||
|
||||
if (gds_render_module_check_types_ready())
|
||||
return NULL;
|
||||
|
||||
gds_render_module = PyModule_Create(&gds_render_module_def);
|
||||
|
||||
err = gds_render_module_add_types(gds_render_module);
|
||||
if (err) {
|
||||
Py_DECREF(gds_render_module);
|
||||
gds_render_module = NULL;
|
||||
goto return_module;
|
||||
}
|
||||
|
||||
return_module:
|
||||
return gds_render_module;
|
||||
}
|
||||
173
plugins/python-renderer/src/plugin-main.c
Normal file
173
plugins/python-renderer/src/plugin-main.c
Normal file
@@ -0,0 +1,173 @@
|
||||
/*
|
||||
* GDSII-Converter Python Plugin
|
||||
* Copyright (C) 2019 Mario Hüttel <mario.huettel@gmx.net>
|
||||
*
|
||||
* This file is part of GDSII-Converter.
|
||||
*
|
||||
* GDSII-Converter is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* GDSII-Converter is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file python-renderer/plugin-main.c
|
||||
* @author Mario Hüttel <mario.huettel@gmx.net>
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup python-plugin Python Plugin for External Renderer
|
||||
* @ingroup plugins
|
||||
* This is a plugin for calling an external python script as renderer
|
||||
* @addtogroup python-plugin
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <libgen.h>
|
||||
#include <glib.h>
|
||||
#include <unistd.h>
|
||||
#include <Python.h>
|
||||
|
||||
#include <gds-render/gds-utils/gds-types.h>
|
||||
#include <gds-render/output-renderers/external-renderer-interfaces.h>
|
||||
|
||||
#include <python-renderer/gds-render-module.h>
|
||||
|
||||
/**
|
||||
* @brief Global variable for loaded module. This is not very nice.
|
||||
* @warning This has to be changed, if this api wants to be re-entrant.
|
||||
*/
|
||||
static PyObject *p_module = NULL;
|
||||
|
||||
int FUNC_DECL(EXTERNAL_LIBRARY_RENDER_FUNCTION)(struct gds_cell *toplevel, GList *layer_info_list, const char *output_file_name, double scale)
|
||||
{
|
||||
int ret = 0;
|
||||
PyObject *p_render_func;
|
||||
PyObject *p_return_value;
|
||||
|
||||
if (!toplevel)
|
||||
return -1000;
|
||||
if (!p_module)
|
||||
return -2000;
|
||||
|
||||
printf("Rendering %s\n", toplevel->name);
|
||||
|
||||
p_render_func = PyObject_GetAttrString(p_module, "test_func");
|
||||
if (!p_render_func && !PyCallable_Check(p_render_func)) {
|
||||
if (PyErr_Occurred())
|
||||
PyErr_Print();
|
||||
else
|
||||
fprintf(stderr, "Function not found in python module\n");
|
||||
|
||||
ret = -1;
|
||||
goto return_value;
|
||||
}
|
||||
|
||||
p_return_value = PyObject_CallObject(p_render_func, NULL);
|
||||
if (p_return_value) {
|
||||
printf("Result of call: %ld\n", PyLong_AsLong(p_return_value));
|
||||
Py_DECREF(p_return_value);
|
||||
}
|
||||
|
||||
Py_XDECREF(p_render_func);
|
||||
|
||||
return_value:
|
||||
return ret;
|
||||
}
|
||||
|
||||
int FUNC_DECL(EXTERNAL_LIBRARY_INIT_FUNCTION)(const char *params, const char *version)
|
||||
{
|
||||
int ret = 0;
|
||||
PyObject *p_name;
|
||||
PyObject *p_sys_path;
|
||||
PyObject *p_mod_dir_string;
|
||||
PyObject *gds_render_module;
|
||||
char file_path[PATH_MAX];
|
||||
char *file_path_for_dir;
|
||||
char *file_path_for_base;
|
||||
char *dir_name;
|
||||
char *base_name;
|
||||
|
||||
if (!params || !version)
|
||||
return -1000;
|
||||
|
||||
printf("Init with params: %s\ngds-render version: %s\n", params, version);
|
||||
|
||||
ret = PyImport_AppendInittab("gds_render", &init_gds_render_module);
|
||||
if (ret) {
|
||||
ret = -1;
|
||||
fprintf(stderr, "Registration of gds_render python module failed\n");
|
||||
goto return_value;
|
||||
}
|
||||
|
||||
Py_Initialize();
|
||||
|
||||
if (!realpath(params, file_path)) {
|
||||
ret = -2;
|
||||
fprintf(stderr, "Invalid file name.\n");
|
||||
goto return_value;
|
||||
}
|
||||
|
||||
file_path_for_dir = strdup(file_path);
|
||||
if (!file_path_for_dir) {
|
||||
ret = -3;
|
||||
goto return_value;
|
||||
}
|
||||
|
||||
file_path_for_base = strdup(file_path);
|
||||
if (!file_path_for_base) {
|
||||
ret = -3;
|
||||
free (file_path_for_dir);
|
||||
goto return_value;
|
||||
}
|
||||
|
||||
dir_name = dirname(file_path_for_dir);
|
||||
base_name = basename(file_path_for_base);
|
||||
|
||||
printf("Dir name : %s\n BAse name: %s\n", dir_name, base_name);
|
||||
|
||||
p_sys_path = PySys_GetObject("path");
|
||||
p_mod_dir_string = PyUnicode_FromString(dir_name);
|
||||
PyList_Append(p_sys_path, p_mod_dir_string);
|
||||
Py_DECREF(p_mod_dir_string);
|
||||
|
||||
p_name = PyUnicode_DecodeFSDefault(strtok(base_name, "."));
|
||||
p_module = PyImport_Import(p_name);
|
||||
Py_DECREF(p_name);
|
||||
|
||||
if (!p_module) {
|
||||
PyErr_Print();
|
||||
fprintf(stderr, "Failed to load %s\n", params);
|
||||
ret = -1;
|
||||
goto return_value;
|
||||
}
|
||||
|
||||
free(file_path_for_dir);
|
||||
free(file_path_for_base);
|
||||
|
||||
return_value:
|
||||
return ret;
|
||||
}
|
||||
|
||||
int FUNC_DECL(EXTERNAL_LIBRARY_FINALIZE_FUNCTION)(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
printf("Finalizing\n");
|
||||
|
||||
if (p_module)
|
||||
Py_DECREF(p_module);
|
||||
|
||||
ret = Py_FinalizeEx();
|
||||
return ret;
|
||||
}
|
||||
|
||||
/** @} */
|
||||
16
translations/CMakeLists.txt
Normal file
16
translations/CMakeLists.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
add_custom_target(translations
|
||||
DEPENDS
|
||||
"${PROJECT_BINARY_DIR}/translations/output/"
|
||||
)
|
||||
|
||||
add_custom_command(DEPENDS
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/pot/po/*"
|
||||
OUTPUT
|
||||
"${PROJECT_BINARY_DIR}/translations/output/"
|
||||
COMMAND
|
||||
COMMAND ./generate-mo.sh "${PROJECT_BINARY_DIR}/translations/output"
|
||||
WORKING_DIRECTORY
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
COMMENT
|
||||
"Generating translation locales"
|
||||
)
|
||||
24
translations/generate-mo.sh
Executable file
24
translations/generate-mo.sh
Executable file
@@ -0,0 +1,24 @@
|
||||
#!/bin/bash
|
||||
|
||||
SOURCE="${BASH_SOURCE[0]}"
|
||||
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
|
||||
DIR="$( cd -P "$( dirname "$SOURCE" )" >/dev/null && pwd )"
|
||||
SOURCE="$(readlink "$SOURCE")"
|
||||
[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
|
||||
done
|
||||
DIR="$( cd -P "$( dirname "$SOURCE" )" >/dev/null && pwd )"
|
||||
cd "$DIR"
|
||||
|
||||
if [ -z $1 ]; then
|
||||
echo "Must supply an output name"
|
||||
exit -2
|
||||
fi
|
||||
|
||||
for langdir in `find ./pot/po -mindepth 1 -maxdepth 1 -type d`; do
|
||||
lang=`basename "$langdir"`
|
||||
dest="$1/locale/$lang/LC_MESSAGES"
|
||||
mkdir -p "$dest"
|
||||
pofiles=`find "$langdir" -name "*.po" | tr '\n' ' '`
|
||||
comb=`msgcat $pofiles`
|
||||
echo "$comb" | msgfmt --output-file="$dest/gds-render.mo" -
|
||||
done
|
||||
19
translations/generate_templates.sh
Executable file
19
translations/generate_templates.sh
Executable file
@@ -0,0 +1,19 @@
|
||||
#!/bin/bash
|
||||
|
||||
SOURCE="${BASH_SOURCE[0]}"
|
||||
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
|
||||
DIR="$( cd -P "$( dirname "$SOURCE" )" >/dev/null && pwd )"
|
||||
SOURCE="$(readlink "$SOURCE")"
|
||||
[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
|
||||
done
|
||||
DIR="$( cd -P "$( dirname "$SOURCE" )" >/dev/null && pwd )"
|
||||
cd "$DIR"
|
||||
|
||||
files=`find ../ -name "*.c"`
|
||||
mkdir -p "pot"
|
||||
|
||||
for file in $files; do
|
||||
pot="pot/"$(echo "${file#*/}" | sed -e "s/\//_/g")
|
||||
pot="${pot%.c}.pot"
|
||||
xgettext --keyword=_ --language=C --add-comments --sort-output -o "$pot" "$file"
|
||||
done
|
||||
72
translations/pot/command-line.pot
Normal file
72
translations/pot/command-line.pot
Normal file
@@ -0,0 +1,72 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \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"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: ../command-line.c:203
|
||||
#, c-format
|
||||
msgid "%d reference loops found.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../command-line.c:207
|
||||
#, c-format
|
||||
msgid "Cell is affected by reference loop. Abort!\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../command-line.c:213
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Cell was not checked. This should not happen. Please report this issue. Will "
|
||||
"continue either way.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../command-line.c:200
|
||||
#, c-format
|
||||
msgid "Checking library %s failed.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../command-line.c:193
|
||||
#, c-format
|
||||
msgid "Couldn't find cell in first library!\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../command-line.c:81
|
||||
#, c-format
|
||||
msgid "Count of renderers %d does not match count of output file names %d\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../command-line.c:184
|
||||
#, c-format
|
||||
msgid "No library in library list. This should not happen.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../command-line.c:74
|
||||
#, c-format
|
||||
msgid "Please specify renderers and file names\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../command-line.c:104
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Please specify shared object for external renderer. Will ignore this "
|
||||
"renderer.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../command-line.c:158
|
||||
#, c-format
|
||||
msgid "Probably missing argument. Check --help option\n"
|
||||
msgstr ""
|
||||
50
translations/pot/gds-render-gui.pot
Normal file
50
translations/pot/gds-render-gui.pot
Normal file
@@ -0,0 +1,50 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \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"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: ../gds-render-gui.c:275
|
||||
msgid "Acc. Date"
|
||||
msgstr ""
|
||||
|
||||
#: ../gds-render-gui.c:318
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: ../gds-render-gui.c:268
|
||||
msgid "Cell"
|
||||
msgstr ""
|
||||
|
||||
#: ../gds-render-gui.c:326
|
||||
msgid "GDSII-Files"
|
||||
msgstr ""
|
||||
|
||||
#: ../gds-render-gui.c:265
|
||||
msgid "Library"
|
||||
msgstr ""
|
||||
|
||||
#: ../gds-render-gui.c:272
|
||||
msgid "Mod. Date"
|
||||
msgstr ""
|
||||
|
||||
#: ../gds-render-gui.c:319
|
||||
msgid "Open GDSII"
|
||||
msgstr ""
|
||||
|
||||
#: ../gds-render-gui.c:316
|
||||
msgid "Open GDSII File"
|
||||
msgstr ""
|
||||
121
translations/pot/main.pot
Normal file
121
translations/pot/main.pot
Normal file
@@ -0,0 +1,121 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \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"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: ../main.c:97
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\n"
|
||||
"\n"
|
||||
"Full git commit: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../main.c:293
|
||||
msgid " FILE - Convert GDS file <FILE> to graphic"
|
||||
msgstr ""
|
||||
|
||||
#: ../main.c:221
|
||||
msgid "About"
|
||||
msgstr ""
|
||||
|
||||
#: ../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 ""
|
||||
|
||||
#: ../main.c:279
|
||||
msgid "Divide output coordinates by <SCALE>"
|
||||
msgstr ""
|
||||
|
||||
#: ../main.c:320
|
||||
#, c-format
|
||||
msgid "Ignored argument: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../main.c:116
|
||||
#, c-format
|
||||
msgid "Logo could not be displayed: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../main.c:298
|
||||
#, c-format
|
||||
msgid "Option parsing failed: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../main.c:281
|
||||
msgid "Output file path. Can be used multiple times."
|
||||
msgstr ""
|
||||
|
||||
#: ../main.c:282
|
||||
msgid "Path for Layer Mapping File"
|
||||
msgstr ""
|
||||
|
||||
#: ../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:220
|
||||
msgid "Quit"
|
||||
msgstr ""
|
||||
|
||||
#: ../main.c:278
|
||||
msgid "Renderer to use. Can be used multiple times."
|
||||
msgstr ""
|
||||
|
||||
#: ../main.c:311
|
||||
#, c-format
|
||||
msgid "Scale < 1 not allowed. Setting to 1\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../main.c:213
|
||||
#, c-format
|
||||
msgid ""
|
||||
"There is already an open instance. Will open second window in that "
|
||||
"instance.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../main.c:245
|
||||
#, c-format
|
||||
msgid ""
|
||||
"This is gds-render, version: %s\n"
|
||||
"\n"
|
||||
"For a list of supported commands execute with --help option.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../main.c:96
|
||||
msgid ""
|
||||
"gds-render is a free tool for rendering GDS2 layout files into vector "
|
||||
"graphics."
|
||||
msgstr ""
|
||||
1
translations/pot/po/de/.gitignore
vendored
Normal file
1
translations/pot/po/de/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
*.po~
|
||||
73
translations/pot/po/de/command-line.po
Normal file
73
translations/pot/po/de/command-line.po
Normal file
@@ -0,0 +1,73 @@
|
||||
# German translations for gds-render package.
|
||||
# Copyright (C) 2019 THE gds-render's COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# Mario Hüttel <mario.huettel@gmx.net>, 2019.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-10-22 23:02+0200\n"
|
||||
"PO-Revision-Date: 2019-10-22 23:02+0200\n"
|
||||
"Last-Translator: <mario.huettel@gmx.net>\n"
|
||||
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
|
||||
"Language: de\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ../command-line.c:203
|
||||
#, c-format
|
||||
msgid "%d reference loops found.\n"
|
||||
msgstr "%d Referenzschleifen gefunden.\n"
|
||||
|
||||
#: ../command-line.c:207
|
||||
#, c-format
|
||||
msgid "Cell is affected by reference loop. Abort!\n"
|
||||
msgstr "Zelle von Referenzschleife betroffen. Abbruch!\n"
|
||||
|
||||
#: ../command-line.c:213
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Cell was not checked. This should not happen. Please report this issue. Will "
|
||||
"continue either way.\n"
|
||||
msgstr "Zelle wurde nicht überprüft. Das sollte nicht passieren. Bitte melden Sie dieses Fehlverhalten. Es wird "
|
||||
"dennoch fortgefahren.\n"
|
||||
|
||||
#: ../command-line.c:200
|
||||
#, c-format
|
||||
msgid "Checking library %s failed.\n"
|
||||
msgstr "Überprüfen der Bibliothek %s fehlgeschlagen.\n"
|
||||
|
||||
#: ../command-line.c:193
|
||||
#, c-format
|
||||
msgid "Couldn't find cell in first library!\n"
|
||||
msgstr "Konnte Zelle nicht in der ersten Bibliothek finden!\n"
|
||||
|
||||
#: ../command-line.c:81
|
||||
#, c-format
|
||||
msgid "Count of renderers %d does not match count of output file names %d\n"
|
||||
msgstr "Anzahl der Renderer %d entspricht nicht der Anzahl der angegebenen Ausgabepfade %s\n"
|
||||
|
||||
#: ../command-line.c:184
|
||||
#, c-format
|
||||
msgid "No library in library list. This should not happen.\n"
|
||||
msgstr "Keine Bilbiothek in Bibliotheksliste vorhanden. Dies sollte nicht passieren.\n"
|
||||
|
||||
#: ../command-line.c:74
|
||||
#, c-format
|
||||
msgid "Please specify renderers and file names\n"
|
||||
msgstr "Bitte geben Sie Renderer und Dateinamen an\n"
|
||||
|
||||
#: ../command-line.c:104
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Please specify shared object for external renderer. Will ignore this "
|
||||
"renderer.\n"
|
||||
msgstr "Bitte geben Sie ein 'shared object' für den externen Renderer an. Renderer wird ignoriert.\n"
|
||||
|
||||
#: ../command-line.c:158
|
||||
#, c-format
|
||||
msgid "Probably missing argument. Check --help option\n"
|
||||
msgstr "Vermutlich fehlendes Argument. Siehe --help Option für Hilfe\n"
|
||||
50
translations/pot/po/de/gds-render-gui.po
Normal file
50
translations/pot/po/de/gds-render-gui.po
Normal file
@@ -0,0 +1,50 @@
|
||||
# German translations for PACKAGE package.
|
||||
# Copyright (C) 2019 THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# Mario Hüttel <mario.huettel@gmx.net>, 2019.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gds-render VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \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"
|
||||
"Language: de\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ../gds-render-gui.c:275
|
||||
msgid "Acc. Date"
|
||||
msgstr "Zugr. Datum"
|
||||
|
||||
#: ../gds-render-gui.c:318
|
||||
msgid "Cancel"
|
||||
msgstr "Abbruch"
|
||||
|
||||
#: ../gds-render-gui.c:268
|
||||
msgid "Cell"
|
||||
msgstr "Zelle"
|
||||
|
||||
#: ../gds-render-gui.c:326
|
||||
msgid "GDSII-Files"
|
||||
msgstr "GDSII-Dateiem"
|
||||
|
||||
#: ../gds-render-gui.c:265
|
||||
msgid "Library"
|
||||
msgstr "Bibliothek"
|
||||
|
||||
#: ../gds-render-gui.c:272
|
||||
msgid "Mod. Date"
|
||||
msgstr "Mod. Datum"
|
||||
|
||||
#: ../gds-render-gui.c:319
|
||||
msgid "Open GDSII"
|
||||
msgstr "GDSII öffnen"
|
||||
|
||||
#: ../gds-render-gui.c:316
|
||||
msgid "Open GDSII File"
|
||||
msgstr "GDSII Datei öffnen"
|
||||
133
translations/pot/po/de/main.po
Normal file
133
translations/pot/po/de/main.po
Normal file
@@ -0,0 +1,133 @@
|
||||
# German translations for gds-render package.
|
||||
# Copyright (C) 2019 THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the gds-render package.
|
||||
# Mario Hüttel <mario.huettel@gmx.net>, 2019.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gds-render VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \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"
|
||||
"Language: de\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ../main.c:97
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\n"
|
||||
"\n"
|
||||
"Full git commit: %s"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"\n"
|
||||
"Vollständige git Commit-ID %s"
|
||||
|
||||
#: ../main.c:293
|
||||
msgid " FILE - Convert GDS file <FILE> to graphic"
|
||||
msgstr "Datei -- Konvertiere GDS Datei <Datei> zu Vektorgrafik"
|
||||
|
||||
#: ../main.c:221
|
||||
msgid "About"
|
||||
msgstr "Über"
|
||||
|
||||
#: ../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:285
|
||||
msgid "Create PDF Layers (OCG)"
|
||||
msgstr "Generiere PDF Layer (OCG)"
|
||||
|
||||
#: ../main.c:284
|
||||
msgid "Create standalone TeX"
|
||||
msgstr "Generiere alleinstehendes TeX"
|
||||
|
||||
#: ../main.c:279
|
||||
msgid "Divide output coordinates by <SCALE>"
|
||||
msgstr "Skaliere Ausgabekoordinaten um Faktor <SCALE> herab"
|
||||
|
||||
#: ../main.c:320
|
||||
#, c-format
|
||||
msgid "Ignored argument: %s"
|
||||
msgstr "Ignoriertes Argument: %s"
|
||||
|
||||
#: ../main.c:116
|
||||
#, c-format
|
||||
msgid "Logo could not be displayed: %s\n"
|
||||
msgstr "Logo konnte nicht angezeigt werden: %s\n"
|
||||
|
||||
#: ../main.c:298
|
||||
#, c-format
|
||||
msgid "Option parsing failed: %s\n"
|
||||
msgstr "Übergabeparameterkonvertierung fehlgeschlagen: %s\n"
|
||||
|
||||
#: ../main.c:281
|
||||
msgid "Output file path. Can be used multiple times."
|
||||
msgstr "Ausgabedatei. Kann mehrfach angegeben werden."
|
||||
|
||||
#: ../main.c:282
|
||||
msgid "Path for Layer Mapping File"
|
||||
msgstr "Pfad zur \"Layer Mapping\"-Datei"
|
||||
|
||||
#: ../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:220
|
||||
msgid "Quit"
|
||||
msgstr "Beenden"
|
||||
|
||||
#: ../main.c:278
|
||||
msgid "Renderer to use. Can be used multiple times."
|
||||
msgstr "Gewünschter Renderer. Kann mehrfach angegeben werden."
|
||||
|
||||
#: ../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:213
|
||||
#, c-format
|
||||
msgid ""
|
||||
"There is already an open instance. Will open second window in that "
|
||||
"instance.\n"
|
||||
msgstr ""
|
||||
"Es is bereits eine Instanz dieses Programms geöffnet. Ein weiteres Fenster "
|
||||
"in dieser wird geöffnet.\n"
|
||||
|
||||
#: ../main.c:245
|
||||
#, c-format
|
||||
msgid ""
|
||||
"This is gds-render, version: %s\n"
|
||||
"\n"
|
||||
"For a list of supported commands execute with --help option.\n"
|
||||
msgstr ""
|
||||
"gds-render, Version %s\n"
|
||||
"\n"
|
||||
"Um eine Liste der unterstützten Befehle zu erhalten, bitte mit der Option --"
|
||||
"help ausführen.\n"
|
||||
|
||||
#: ../main.c:96
|
||||
msgid ""
|
||||
"gds-render is a free tool for rendering GDS2 layout files into vector "
|
||||
"graphics."
|
||||
msgstr ""
|
||||
"gds-render is ein freies Werkzeug zum Wandeln von GDS2 Layouts in "
|
||||
"Vektorgrafiken."
|
||||
26
translations/pot/po/de/widgets_activity-bar.po
Normal file
26
translations/pot/po/de/widgets_activity-bar.po
Normal file
@@ -0,0 +1,26 @@
|
||||
# German translations for gds-render package.
|
||||
# Copyright (C) 2019 THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# Mario Hüttel <mario.huettel@gmx.net>, 2019.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-10-25 20:27+0200\n"
|
||||
"PO-Revision-Date: 2019-10-25 20:27+0200\n"
|
||||
"Last-Translator: <mario.huettel@gmx.net>\n"
|
||||
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
|
||||
"Language: de\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ../widgets/activity-bar.c:105
|
||||
msgid "Ready"
|
||||
msgstr "Bereit"
|
||||
|
||||
#: ../widgets/activity-bar.c:111
|
||||
msgid "Working..."
|
||||
msgstr "Berechnung aktiv..."
|
||||
34
translations/pot/prepare_language.sh
Executable file
34
translations/pot/prepare_language.sh
Executable file
@@ -0,0 +1,34 @@
|
||||
#!/bin/bash
|
||||
|
||||
SOURCE="${BASH_SOURCE[0]}"
|
||||
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
|
||||
DIR="$( cd -P "$( dirname "$SOURCE" )" >/dev/null && pwd )"
|
||||
SOURCE="$(readlink "$SOURCE")"
|
||||
[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
|
||||
done
|
||||
DIR="$( cd -P "$( dirname "$SOURCE" )" >/dev/null && pwd )"
|
||||
cd "$DIR"
|
||||
|
||||
if [ -z $1 ]; then
|
||||
echo "Please specify language code to generate/update"
|
||||
exit -1
|
||||
fi
|
||||
|
||||
locale="$1"
|
||||
podir="./po/$locale"
|
||||
echo "Selected locale: $locale"
|
||||
mkdir -p "$podir"
|
||||
pots=`find . -name '*.pot'`
|
||||
for pot in $pots; do
|
||||
po=`echo "$podir/${pot%.pot}.po" | sed -e "s/\/.\//\//g"`
|
||||
echo -n "$po: "
|
||||
|
||||
if [ -f "$po" ]; then
|
||||
echo "update"
|
||||
msgmerge --update "$po" "$pot"
|
||||
else
|
||||
echo "generate"
|
||||
msginit --input="$pot" --locale="$locale" --output="$po"
|
||||
fi
|
||||
|
||||
done
|
||||
26
translations/pot/widgets_activity-bar.pot
Normal file
26
translations/pot/widgets_activity-bar.pot
Normal file
@@ -0,0 +1,26 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \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"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: ../widgets/activity-bar.c:105
|
||||
msgid "Ready"
|
||||
msgstr ""
|
||||
|
||||
#: ../widgets/activity-bar.c:111
|
||||
msgid "Working..."
|
||||
msgstr ""
|
||||
@@ -1,4 +1,25 @@
|
||||
project(libversion)
|
||||
|
||||
if(NOT WIN32)
|
||||
string(ASCII 27 Esc)
|
||||
set(ColorReset "${Esc}[m")
|
||||
set(ColorBold "${Esc}[1m")
|
||||
set(Red "${Esc}[31m")
|
||||
set(Green "${Esc}[32m")
|
||||
set(Yellow "${Esc}[33m")
|
||||
set(Blue "${Esc}[34m")
|
||||
set(Magenta "${Esc}[35m")
|
||||
set(Cyan "${Esc}[36m")
|
||||
set(White "${Esc}[37m")
|
||||
set(BoldRed "${Esc}[1;31m")
|
||||
set(BoldGreen "${Esc}[1;32m")
|
||||
set(BoldYellow "${Esc}[1;33m")
|
||||
set(BoldBlue "${Esc}[1;34m")
|
||||
set(BoldMagenta "${Esc}[1;35m")
|
||||
set(BoldCyan "${Esc}[1;36m")
|
||||
set(BoldWhite "${Esc}[1;37m")
|
||||
endif()
|
||||
|
||||
add_library(version STATIC "version.c")
|
||||
execute_process(COMMAND bash ./generate-version-string.sh
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
@@ -6,6 +27,10 @@ execute_process(COMMAND bash ./generate-version-string.sh
|
||||
execute_process(COMMAND bash ./generate-git-commit-string.sh
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
OUTPUT_VARIABLE GIT_COMMIT)
|
||||
message("Commit: ${GIT_COMMIT}")
|
||||
message("Version: ${GIT_VER}")
|
||||
message("${BoldGreen}Commit: ${GIT_COMMIT}")
|
||||
message("Version: ${GIT_VER}${ColorReset}")
|
||||
|
||||
IF(GIT_VER MATCHES "-dirty")
|
||||
message("${BoldRed}Build is dirty! Commit your changes before releasing this version!${ColorReset}")
|
||||
ENDIF(GIT_VER MATCHES "-dirty")
|
||||
target_compile_definitions(version PRIVATE PROJECT_GIT_VERSION=${GIT_VER} PROJECT_GIT_COMMIT=${GIT_COMMIT})
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -37,6 +37,7 @@
|
||||
*/
|
||||
|
||||
#include <gds-render/widgets/activity-bar.h>
|
||||
#include <glib/gi18n.h>
|
||||
|
||||
/** @brief Opaque ActivityBar object. Not viewable outside this source file. */
|
||||
struct _ActivityBar {
|
||||
@@ -101,13 +102,13 @@ ActivityBar *activity_bar_new()
|
||||
/* TODO: Complete this once the task list is fully implemented */
|
||||
void activity_bar_set_ready(ActivityBar *bar)
|
||||
{
|
||||
gtk_label_set_text(GTK_LABEL(bar->label), "Ready");
|
||||
gtk_label_set_text(GTK_LABEL(bar->label), _("Ready"));
|
||||
gtk_spinner_stop(GTK_SPINNER(bar->spinner));
|
||||
}
|
||||
|
||||
void activity_bar_set_busy(ActivityBar *bar, const char *text)
|
||||
{
|
||||
gtk_label_set_text(GTK_LABEL(bar->label), (text ? text : "Working..."));
|
||||
gtk_label_set_text(GTK_LABEL(bar->label), (text ? text : _("Working...")));
|
||||
gtk_spinner_start(GTK_SPINNER(bar->spinner));
|
||||
}
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user