94 Commits

Author SHA1 Message Date
b959f8282a Add Glist wrapper to python renderer 2020-07-04 00:44:46 +02:00
22efe4f8ca Merge branch 'dev' into python-renderer 2020-07-04 00:00:16 +02:00
f135b42d8a make clear we're not getting a return value from vector_2d_copy 2020-06-29 20:03:38 +02:00
058564326b Update library and compiler versions in doxygen 2020-04-24 01:17:20 +02:00
fd1eac7fda Merge branch 'master' into dev 2020-04-24 01:07:50 +02:00
391789b812 Merge branch 'master' into python-renderer 2020-04-24 01:07:25 +02:00
98483da759 Merge branch 'dev' into python-renderer 2020-04-24 01:06:23 +02:00
2c91956b32 Doxygen: Update calculate_cell_bounding_box()
* Fix typo
* Extend description
2020-04-24 01:05:37 +02:00
aafcb162b7 Merge branch 'dev' into python-renderer 2020-04-24 01:03:05 +02:00
232d025211 Doxygen: Update calculate_cell_bounding_box()
* Add note about problematic behaviour
* Fix typos
2020-04-24 01:02:10 +02:00
1fac7d7721 Merge branch 'dev' into python-renderer 2020-04-19 03:00:22 +02:00
ceeb67355d Fix #38: Make parser store the datatype record of a graphics object 2020-04-19 02:58:34 +02:00
ba51a437a4 Fix definition of datatype in GDS graphics type 2020-04-19 02:57:15 +02:00
e461b0be1d Merge branch 'dev' 2020-04-19 00:52:42 +02:00
b30aaa4c4e Merge branch 'dev' into python-renderer 2020-04-19 00:52:22 +02:00
42f1636860 Make unit test reporting compact 2020-04-19 00:50:30 +02:00
fb6e3a29af Merge branch 'dev' into python-renderer 2020-04-19 00:41:08 +02:00
d29109e516 Add unittests for calculation functions for vectors 2020-04-19 00:40:17 +02:00
b784f28d4c Change unit test output to include successful tests as well 2020-04-19 00:40:03 +02:00
f03dd0ab19 Add log message to finalize function of example renderer 2020-04-18 03:30:44 +02:00
94851570e9 Add preliminary working principle of unit tests 2020-04-18 03:23:15 +02:00
f4fa1bd4e5 Make tests link against libraries 2020-04-18 02:45:23 +02:00
2e7bb03c17 Add testing folder to doxygen's exclude list 2020-04-18 02:38:40 +02:00
39ff0dec1a Add test target to cmake 2020-04-18 02:32:11 +02:00
74f9663bde Add catch framework for testing 2020-04-18 02:21:23 +02:00
b6a2f29a2f Merge branch 'dev' into python-renderer 2020-04-16 22:48:05 +02:00
330285cc2f Merge branch 'master' into dev 2020-04-16 22:47:38 +02:00
24ae5e4d5b Fix #37: Introduce new versioning scheme for AUR PKGBUILD 2020-04-16 22:43:29 +02:00
f7d15c7267 Fix comment style from // to /**/ 2020-04-07 15:39:38 +02:00
921b55b962 Merge branch 'master' into python-renderer 2020-04-03 20:55:46 +02:00
00d02b8291 Issue #36: Fix possible memory leak of async status message, if rendering finishes, before message could be displayed 2020-04-03 20:53:32 +02:00
75e01b80c8 Issue #36: Fix memory leaks in set-property function of lib-cell-renderer 2020-04-03 20:32:05 +02:00
4d3f0ccb94 Merge branch 'master' into python-renderer 2020-04-02 00:48:15 +02:00
89f9a638c6 Add license header to file 2020-04-02 00:47:43 +02:00
7526597251 Merge branch 'master' into python-renderer 2020-02-10 23:06:40 +01:00
7b1722661c Fix typo in documentation 2020-01-16 23:38:20 +01:00
5a43a8a4bf Rename functions of bounding box to be more consistent 2020-01-14 19:03:26 +01:00
f11e11e6a7 Doxygen: Add brief description for conv_generic_to_vector_2d_t 2020-01-14 19:02:50 +01:00
0c5dd3c8e7 Doxygen: Document union bounding_box 2020-01-14 18:52:03 +01:00
77a3a0da5a Doxygen: Fix typo 2020-01-14 18:52:03 +01:00
f8b0b63937 Doxygen: Remove warning from uncommented code printf and place it in doxygen @warning tag instead 2020-01-14 18:51:55 +01:00
2d389342fd cairo-renderer: Update coding style and add comment explaining how to use the inter process communication to update the GUI with rendering status updates 2020-01-14 14:09:24 +01:00
1ca04aaa71 Doxygen: Update image of Gui and its description. Fix #31 2019-12-16 22:09:14 +01:00
b8fc904af5 Fix typos 2019-12-16 22:00:59 +01:00
fdfa478fed Add full German translation 2019-12-16 21:58:18 +01:00
c0182220f1 Translations: Generate only one PO template file for all input files. Include glade files into translation, delete previous German Translation 2019-12-16 18:29:28 +01:00
798262383e Update the POT files 2019-12-12 21:39:08 +01:00
0bfe8df92f Update POT files 2019-12-12 21:24:19 +01:00
de9066f181 Add translation markers to all messages except for the gds parser's messages 2019-12-12 21:22:14 +01:00
1278af202a Merge branch 'dev' into python-renderer 2019-12-12 20:56:00 +01:00
87bc60bed0 Fix style issue in version.c 2019-12-12 20:36:17 +01:00
20d72a5edb Remove outdated TODO from source file 2019-12-12 20:34:41 +01:00
9e8d0b4611 include/gds-utils/gds-types.h: Fix typo in comment 2019-12-11 08:25:24 +01:00
b63da7bf09 Merge branch 'dev' into python-renderer 2019-12-07 19:08:05 +01:00
4550815901 Fix code style 2019-12-07 19:07:52 +01:00
23ba7c0136 Fix typo 2019-11-28 18:24:26 +01:00
7721a40912 Merge branch 'dev' into python-renderer 2019-11-28 17:59:22 +01:00
e3b6ee66ef Fix typo in comment 2019-11-28 17:59:06 +01:00
7297800a99 Merge branch 'dev' into python-renderer 2019-11-25 20:57:17 +01:00
f3786cf282 Gui: Add library name to all cells in cell selector 2019-11-25 20:48:09 +01:00
c085a62036 GUI: Remove access and modification date from cell selector
Fix #28
2019-11-25 20:45:57 +01:00
943007685c Merge branch 'dev' into python-renderer 2019-11-19 01:34:12 +01:00
55799b2266 Merge branch 'master' into dev 2019-11-19 01:33:56 +01:00
4970585cee Remove call to g_task_set(). It is not available under debian 2019-11-19 01:33:44 +01:00
7d6faf8db7 Merge branch 'dev' into python-renderer 2019-11-18 22:31:06 +01:00
c6483dbebd Merge branch 'master' into dev 2019-11-18 22:30:51 +01:00
86342da2a2 Remove unneeded comments 2019-11-18 22:30:05 +01:00
9eed1ac33d Add header for foced fork variable. Don't know what it is good for yet. But why not... 2019-11-18 22:20:18 +01:00
246695610c plugins: python renderer: Fix broken code due to merge. Functions of plugins now have to be exported explicitly. 2019-11-18 22:07:58 +01:00
bd4d91807b Merge branch 'dev' into python-renderer 2019-11-18 22:00:45 +01:00
ce8386799b external renderer: Rename FUNC_DECL to EXPORTED_FUNC_DECL to show that it also exports a function 2019-11-18 21:59:42 +01:00
374e3b54c0 plugins: example plugin: Make all functions invisible except for the explicitly exported ones
* Add target parameters to compile all symbols invisible to the outside by default.
* Edit FUNC_DECL() macro to set attribute that exports the function
2019-11-18 21:56:22 +01:00
2aa1fffa8e plugins: python renderer: Add fork request to python renderer library, so it wont destory the base application 2019-11-18 21:43:49 +01:00
447d583103 plugins: python renderer: Add color output to cmake 2019-11-18 21:29:42 +01:00
394efb79cf Merge branch 'python-renderer' of git.shimatta.de:mhu/gds-render into python-renderer 2019-11-18 20:29:01 +01:00
2420b80c9e plugins: python renderer: Add GdsPoint object type definition to gds_render module. This is still playing around as I don't really know what I'm doing at the moment. 2019-11-18 20:28:43 +01:00
02f221b926 Merge branch 'master' into python-renderer 2019-11-17 22:32:01 +01:00
3651296c3a Merge branch 'master' into dev 2019-11-17 22:31:47 +01:00
5fe21f1d73 bounding box: Fix doxygen documentation typo 2019-11-17 22:31:31 +01:00
dd2f21c5cd Fix remaining licence headers 2019-11-17 17:30:08 +01:00
b27676e0a4 plugins: python renderer: Make python scripts work from all directories 2019-11-17 17:12:15 +01:00
b610b1593a Fix author in doxygen tag 2019-11-17 16:25:03 +01:00
95f6b31e4b python renderer: Try out function parameters 2019-11-17 16:18:03 +01:00
a4d84cff43 Fix license header 2019-11-17 15:52:28 +01:00
aa7f5b4745 plugins: python-renderer: Implement first gds_render built-in module with a get_number function 2019-11-17 15:42:17 +01:00
71b500e030 Merge branch 'dev' into python-renderer 2019-11-17 14:49:13 +01:00
2d7103abbb Fix doxygen 2019-11-17 14:49:00 +01:00
d69d4f3f7e plugins: python-renderer: Add gds-render-module 2019-11-17 14:44:21 +01:00
a60fe6543e plugins: python-renderer: Remove unneeded file exists function 2019-11-17 14:15:35 +01:00
dc32499ad7 plugins: python-renderer: Fix missing closing bracket in doxygen group 2019-11-17 14:13:43 +01:00
322439145e plugins: python-renderer: Add license and doxygen 2019-11-17 14:13:06 +01:00
231248e404 Remove empty line 2019-11-17 14:11:16 +01:00
88d912f59d Merge branch 'dev' into python-renderer 2019-11-17 14:10:55 +01:00
392d7e1b3c plugins: Add license header and doxygen file 2019-11-17 14:09:53 +01:00
75 changed files with 19585 additions and 816 deletions

View File

@@ -1,7 +1,7 @@
# Maintainer: Mario Hüttel <mario (dot) huettel (!) gmx (dot) net>
pkgname=gds-render
pkgver=20191020.403.448de30
pkgver=v1.2_10_g00d02b8
pkgrel=1
pkgdesc="Conversion tool for converting GDS layout files into TikZ Code and PDF"
arch=('i686' 'x86_64')
@@ -15,8 +15,8 @@ sha1sums=('SKIP')
pkgver () {
_date=`date +"%Y%m%d"`
cd "${srcdir}/${pkgname}-git"
echo "$_date.$(git rev-list --count master).$(git rev-parse --short master)"
cd "${srcdir}/${pkgname}-git/version"
echo "$(echo "$(sh ./generate-version-string.sh)" | sed 's/-/_/g')"
}
build () {

View File

@@ -33,8 +33,6 @@ pkg_check_modules(CAIRO REQUIRED cairo)
include_directories(${GLIB_INCLUDE_DIRS} ${GTK3_INCLUDE_DIRS} ${CAIRO_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/include)
add_subdirectory(plugins)
add_compile_options(-Wall -Wextra -Wold-style-declaration -Wuninitialized -Wmaybe-uninitialized -Wunused-parameter)
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\")
@@ -44,13 +42,7 @@ else(CMAKE_BUILD_TYPE STREQUAL "Debug")
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)
link_directories(${GLIB_LINK_DIRS} ${GTK3_LINK_DIRS} ${CAIRO_LINK_DIRS})
add_definitions(${GLIB2_CFLAGS_OTHER})
aux_source_directory("widgets" LAYER_SOURCES)
aux_source_directory("cell-selector" CELL_SELECTOR_SOURCES)
@@ -74,15 +66,29 @@ set(SOURCE_GENERATED
${CMAKE_CURRENT_BINARY_DIR}/resources/resources.c
)
link_directories(${GLIB_LINK_DIRS} ${GTK3_LINK_DIRS} ${CAIRO_LINK_DIRS})
SET_SOURCE_FILES_PROPERTIES(${SOURCE_GENERATED} PROPERTIES GENERATED 1)
add_subdirectory(test)
add_compile_options(-Wall -Wextra -Wold-style-declaration -Wuninitialized -Wmaybe-uninitialized -Wunused-parameter)
add_subdirectory(resources)
add_subdirectory(doxygen)
add_subdirectory(translations)
add_subdirectory(version)
link_directories(${GLIB_LINK_DIRS} ${GTK3_LINK_DIRS} ${CAIRO_LINK_DIRS})
add_definitions(${GLIB2_CFLAGS_OTHER})
add_executable(${PROJECT_NAME} ${SOURCE} ${SOURCE_GENERATED})
add_dependencies(${PROJECT_NAME} glib-resources)
add_dependencies(${PROJECT_NAME} version)
add_dependencies(${PROJECT_NAME} translations)
target_link_libraries(${PROJECT_NAME} ${GLIB_LDFLAGS} ${GTK3_LDFLAGS} ${CAIRO_LDFLAGS} m version ${CMAKE_DL_LIBS})
install (TARGETS ${PROJECT_NAME}
RUNTIME
DESTINATION bin
)
target_link_libraries(${PROJECT_NAME} ${GLIB_LDFLAGS} ${GTK3_LDFLAGS} ${CAIRO_LDFLAGS} m version ${CMAKE_DL_LIBS})

View File

@@ -88,11 +88,13 @@ static void lib_cell_renderer_set_property(GObject *object,
g_value_init(&val, G_TYPE_STRING);
g_value_set_string(&val, ((struct gds_library *)g_value_get_pointer(value))->name);
g_object_set_property(object, "text", &val);
g_value_unset(&val);
break;
case PROP_CELL:
g_value_init(&val, G_TYPE_STRING);
g_value_set_string(&val, ((struct gds_cell *)g_value_get_pointer(value))->name);
g_object_set_property(object, "text", &val);
g_value_unset(&val);
break;
case PROP_ERROR_LEVEL:
/* Set cell color according to error level */
@@ -100,6 +102,7 @@ static void lib_cell_renderer_set_property(GObject *object,
convert_error_level_to_color(&color, g_value_get_uint(value));
g_value_set_boxed(&val, &color);
g_object_set_property(object, "foreground-rgba", &val);
g_value_unset(&val);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, param_id, pspec);

View File

@@ -1,4 +1,4 @@
# Doxyfile 1.8.16
# Doxyfile 1.8.17
# This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for a project.
@@ -309,7 +309,7 @@ OPTIMIZE_OUTPUT_SLICE = NO
# parses. With this tag you can assign which parser to use for a given
# extension. Doxygen has a built-in mapping, but you can override or extend it
# using this tag. The format is ext=language, where ext is a file extension, and
# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
# language is one of the parsers supported by doxygen: IDL, Java, JavaScript,
# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice,
# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran:
# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser
@@ -535,8 +535,8 @@ HIDE_UNDOC_MEMBERS = NO
HIDE_UNDOC_CLASSES = NO
# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
# (class|struct|union) declarations. If set to NO, these declarations will be
# included in the documentation.
# declarations. If set to NO, these declarations will be included in the
# documentation.
# The default value is: NO.
HIDE_FRIEND_COMPOUNDS = NO
@@ -851,8 +851,10 @@ INPUT_ENCODING = UTF-8
# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08,
# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice.
# *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment),
# *.doc (to be provided as doxygen C comment), *.txt (to be provided as doxygen
# C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f, *.for, *.tcl, *.vhd,
# *.vhdl, *.ucf, *.qsf and *.ice.
FILE_PATTERNS = *.c \
*.cc \
@@ -928,7 +930,7 @@ EXCLUDE_SYMLINKS = NO
# Note that the wildcards are matched against the file with absolute path, so to
# exclude all test directories for example use the pattern */test/*
EXCLUDE_PATTERNS =
EXCLUDE_PATTERNS = */test/*
# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
# (namespaces, classes, functions, etc.) that should be excluded from the
@@ -1265,9 +1267,9 @@ HTML_TIMESTAMP = NO
# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML
# documentation will contain a main index with vertical navigation menus that
# are dynamically created via Javascript. If disabled, the navigation index will
# are dynamically created via JavaScript. If disabled, the navigation index will
# consists of multiple levels of tabs that are statically embedded in every HTML
# page. Disable this option to support browsers that do not have Javascript,
# page. Disable this option to support browsers that do not have JavaScript,
# like the Qt help browser.
# The default value is: YES.
# This tag requires that the tag GENERATE_HTML is set to YES.
@@ -1555,8 +1557,14 @@ FORMULA_FONTSIZE = 10
FORMULA_TRANSPARENT = YES
# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands
# to create new LaTeX commands to be used in formulas as building blocks. See
# the section "Including formulas" for details.
FORMULA_MACROFILE =
# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
# https://www.mathjax.org) which uses client side Javascript for the rendering
# https://www.mathjax.org) which uses client side JavaScript for the rendering
# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
# installed or if you want to formulas look prettier in the HTML output. When
# enabled you may also need to install MathJax separately and configure the path
@@ -1626,7 +1634,7 @@ MATHJAX_CODEFILE =
SEARCHENGINE = YES
# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
# implemented using a web server instead of a web client using Javascript. There
# implemented using a web server instead of a web client using JavaScript. There
# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
# setting. When disabled, doxygen will generate a PHP script for searching and
# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing

View File

@@ -30,7 +30,7 @@ Development is done with the following library versions:
| Cairographics | GLib2 | GTK3 |
| ------------- | ---------- | --------- |
| 1.17.3 | 2.60.6-1 | 3.24.10-1 |
| 1.17.2 | 2.64.2 | 3.24.18 |
@section comp-instr Compilation Instructions
@subsection linux-build General Linux Build Instruction
@@ -59,7 +59,7 @@ The subfolder 'AUR' contains a PKGBUILD file to build an Archlinux/Pacman packag
@subsection comp-warnings Compiler Warnings
The compiler will throw the following warnings. Compiled with GCC 8.2.1.
The compiler will throw the following warnings. Compiled with GCC 9.3.0.
| Warning | Assessment |
| ------- | ---------- |

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 33 KiB

6
doxygen/plugins.dox Normal file
View File

@@ -0,0 +1,6 @@
/**
* @defgroup plugins External Renderer Plugins
*
* These plugins can be loaded with the @ref ExternalRenderer
*
*/

View File

@@ -35,6 +35,6 @@ It is possible to export the layer configurations so they can be used later on.
The cell selector on the left shows the GDS Libraries and Cells. The cells are marked green if all references inside the cell could be found. If not all references could be found, the cell is marked orange. This doens't show if child cells have missing childs. Only one level of the hierarchy is checked in order to make it easier to spot an errorneous cell. Cells with missing child cells are still renderable but `--` obviously `--` faulty. If a cell or any sub-cell contains a reference loop, the cell is marked red. In this case it can't be selected for rendering.
In the above image the cell is green; so everything is okay.
In the above image one cell is green; so everything is okay. And the other one is red, which indicates a reference loop. This cell cannot be selected for rendering!
*/

View File

@@ -5,7 +5,7 @@
The version number of this application consists of a given version in the format of 'v1.0'.
Where the first number indicates a major release and the second number indicates minor changes.
Versions, including release candidates and path-levels, are tagged in git.
Versions, including release candidates and patch-levels, are tagged in git.
@subsection rc Release Candidates
Release candidates are software versions that seem stable and functional to become a new version but testing is not fully finished. These versions are marked with an '-rcX', where X is the number of the release candidate.

View File

@@ -48,8 +48,6 @@ enum cell_store_columns {
CELL_SEL_LIBRARY = 0,
CELL_SEL_CELL,
CELL_SEL_CELL_ERROR_STATE, /**< Used for cell color and selectability */
CELL_SEL_MODDATE,
CELL_SEL_ACCESSDATE,
CELL_SEL_COLUMN_COUNT /**< @brief Not a column. Used to determine count of columns */
};
@@ -116,25 +114,6 @@ static gboolean on_window_close(gpointer window, GdkEvent *event, gpointer user)
return TRUE;
}
/**
* @brief generate string from gds_time_field
* @param date Date to convert
* @return String with date
*/
static GString *generate_string_from_date(struct gds_time_field *date)
{
GString *str;
str = g_string_new_len(NULL, 50);
g_string_printf(str, "%02u.%02u.%u - %02u:%02u",
(unsigned int)date->day,
(unsigned int)date->month,
(unsigned int)date->year,
(unsigned int)date->hour,
(unsigned int)date->minute);
return str;
}
/**
* @brief This function only allows valid cells to be selected
* @param selection
@@ -237,14 +216,12 @@ exit_filter:
*/
int gds_render_gui_setup_cell_selector(GdsRenderGui *self)
{
GtkCellRenderer *render_dates;
GtkCellRenderer *render_cell;
GtkCellRenderer *render_lib;
GtkTreeViewColumn *column;
self->cell_tree_store = gtk_tree_store_new(CELL_SEL_COLUMN_COUNT, G_TYPE_POINTER,
G_TYPE_POINTER, G_TYPE_UINT,
G_TYPE_STRING, G_TYPE_STRING);
G_TYPE_POINTER, G_TYPE_UINT);
/* Searching */
self->cell_filter = GTK_TREE_MODEL_FILTER(
@@ -258,7 +235,6 @@ int gds_render_gui_setup_cell_selector(GdsRenderGui *self)
gtk_tree_view_set_model(self->cell_tree_view, GTK_TREE_MODEL(self->cell_filter));
render_dates = gtk_cell_renderer_text_new();
render_cell = lib_cell_renderer_new();
render_lib = lib_cell_renderer_new();
@@ -269,12 +245,6 @@ int gds_render_gui_setup_cell_selector(GdsRenderGui *self)
"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);
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);
gtk_tree_view_append_column(self->cell_tree_view, column);
/* Callback for selection
* This prevents selecting a library
*/
@@ -305,8 +275,6 @@ static void on_load_gds(gpointer button, gpointer user)
gint dialog_result;
int gds_result;
char *filename;
GString *mod_date;
GString *acc_date;
unsigned int cell_error_level;
self = RENDERER_GUI(user);
@@ -354,30 +322,17 @@ static void on_load_gds(gpointer button, gpointer user)
/* Create top level iter */
gtk_tree_store_append(self->cell_tree_store, &libiter, NULL);
/* Convert dates to String */
mod_date = generate_string_from_date(&gds_lib->mod_time);
acc_date = generate_string_from_date(&gds_lib->access_time);
gtk_tree_store_set(self->cell_tree_store, &libiter,
CELL_SEL_LIBRARY, gds_lib,
CELL_SEL_MODDATE, mod_date->str,
CELL_SEL_ACCESSDATE, acc_date->str,
-1);
/* Check this library. This might take a while */
(void)gds_tree_check_cell_references(gds_lib);
(void)gds_tree_check_reference_loops(gds_lib);
/* Delete GStrings including string data. */
/* Cell store copies String type data items */
g_string_free(mod_date, TRUE);
g_string_free(acc_date, TRUE);
for (cell = gds_lib->cells; cell != NULL; cell = cell->next) {
gds_c = (struct gds_cell *)cell->data;
gtk_tree_store_append(self->cell_tree_store, &celliter, &libiter);
/* Convert dates to String */
mod_date = generate_string_from_date(&gds_c->mod_time);
acc_date = generate_string_from_date(&gds_c->access_time);
/* Get the checking results for this cell */
cell_error_level = 0;
@@ -391,15 +346,9 @@ static void on_load_gds(gpointer button, gpointer user)
/* Add cell to tree store model */
gtk_tree_store_set(self->cell_tree_store, &celliter,
CELL_SEL_CELL, gds_c,
CELL_SEL_MODDATE, mod_date->str,
CELL_SEL_ACCESSDATE, acc_date->str,
CELL_SEL_CELL_ERROR_STATE, cell_error_level,
CELL_SEL_LIBRARY, gds_c->parent_library,
-1);
/* Delete GStrings including string data. */
/* Cell store copies String type data items */
g_string_free(mod_date, TRUE);
g_string_free(acc_date, TRUE);
} /* for cells */
} /* for libraries */
@@ -602,21 +551,13 @@ static void on_convert_clicked(gpointer button, gpointer user)
g_signal_connect(render_engine, "async-finished", G_CALLBACK(async_rendering_finished_callback),
self);
activity_bar_set_busy(self->activity_status_bar, "Rendering cell...");
/* TODO: Replace this with asynchronous rendering. However, this fixes issue #19 */
activity_bar_set_busy(self->activity_status_bar, _("Rendering cell..."));
g_signal_connect(render_engine, "progress-changed",
G_CALLBACK(async_rendering_status_update_callback), self);
gds_output_renderer_render_output_async(render_engine, cell_to_render, sett->scale);
//self->button_state_data.rendering_active = FALSE;
//g_object_unref(render_engine);
}
g_free(file_name);
} else {
gtk_widget_destroy(dialog);
}

View File

@@ -40,6 +40,7 @@
#include <stdbool.h>
#include <math.h>
#include <cairo.h>
#include <glib/gi18n.h>
#include <gds-render/gds-utils/gds-parser.h>
@@ -79,6 +80,7 @@ enum gds_record {
STRANS = 0x1A01,
BOX = 0x2D00,
LAYER = 0x0D02,
DATATYPE = 0x0E02,
WIDTH = 0x0F03,
PATHTYPE = 0x2102,
COLROW = 0x1302,
@@ -597,7 +599,7 @@ static void convert_aref_to_sref(struct gds_cell_array_instance *aref, struct gd
/* Iterate over columns and rows */
for (col = 0; col < aref->columns; col++) {
for (row = 0; row < aref->rows; row++) {
/* Create new instance for this row/column and aconfigure data */
/* Create new instance for this row/column and configure data */
container_cell->child_cells = append_cell_ref(container_cell->child_cells, &sref_inst);
if (!sref_inst) {
GDS_ERROR("Appending cell ref failed!");
@@ -866,6 +868,7 @@ int parse_gds_from_file(const char *filename, GList **library_list)
case LIBNAME:
case SNAME:
case LAYER:
case DATATYPE:
case STRNAME:
break;
default:
@@ -1002,6 +1005,16 @@ int parse_gds_from_file(const char *filename, GList **library_list)
}
GDS_INF("\t\tAdded layer %d\n", (int)current_graphics->layer);
break;
case DATATYPE:
if (!current_graphics) {
GDS_WARN("Datatype has to be defined inside graphics object. Probably unknown object. Implement it yourself!");
break;
}
current_graphics->datatype = gds_convert_signed_int16(workbuff);
if (current_graphics->datatype < 0)
GDS_WARN("Datatype negative!");
GDS_INF("\t\tAdded datatype %d\n", (int)current_graphics->datatype);
break;
case MAG:
if (rec_data_length != 8) {
GDS_WARN("Magnification is not an 8 byte real. Results may be wrong");

View File

@@ -34,7 +34,7 @@
*/
#include <stdio.h>
#include <glib/gi18n.h>
#include <gds-render/gds-utils/gds-tree-checker.h>
int gds_tree_check_cell_references(struct gds_library *lib)
@@ -54,7 +54,7 @@ int gds_tree_check_cell_references(struct gds_library *lib)
/* Check if this list element is broken. This should never happen */
if (!cell) {
fprintf(stderr, "Broken cell list item found. Will continue.\n");
fprintf(stderr, _("Broken cell list item found. Will continue.\n"));
continue;
}
@@ -68,7 +68,7 @@ int gds_tree_check_cell_references(struct gds_library *lib)
/* Check if broken. This should not happen */
if (!cell_inst) {
fprintf(stderr, "Broken cell list item found in cell %s. Will continue.\n",
fprintf(stderr, _("Broken cell list item found in cell %s. Will continue.\n"),
cell->name);
continue;
}
@@ -185,7 +185,7 @@ int gds_tree_check_reference_loops(struct gds_library *lib)
*/
if (res == 0)
fprintf(stderr,
"Visited cell list should be empty. This is a bug. Please report this.\n");
_("Visited cell list should be empty. This is a bug. Please report this.\n"));
g_list_free(visited_cells);
visited_cells = NULL;
}

View File

@@ -37,7 +37,7 @@
#define MAX(a, b) (((a) > (b)) ? (a) : (b)) /**< @brief Return bigger number */
#define ABS_DBL(a) ((a) < 0 ? -(a) : (a))
void bounding_box_calculate_polygon(GList *vertices, conv_generic_to_vector_2d_t conv_func, union bounding_box *box)
void bounding_box_calculate_from_polygon(GList *vertices, conv_generic_to_vector_2d_t conv_func, union bounding_box *box)
{
double xmin = DBL_MAX, xmax = -DBL_MAX, ymin = DBL_MAX, ymax = -DBL_MAX;
struct vector_2d temp_vec;
@@ -68,7 +68,7 @@ void bounding_box_calculate_polygon(GList *vertices, conv_generic_to_vector_2d_t
box->vectors.upper_right.y = ymax;
}
void bounding_box_update_box(union bounding_box *destination, union bounding_box *update)
void bounding_box_update_with_box(union bounding_box *destination, union bounding_box *update)
{
if (!destination || !update)
return;
@@ -151,8 +151,6 @@ void bounding_box_update_with_path(GList *vertices, double thickness,
GList *vertex_iterator;
struct vector_2d pt;
/* printf("Warning! Function %s not yet implemented correctly!\n", __func__); */
if (!vertices || !box)
return;
@@ -173,7 +171,7 @@ void bounding_box_update_with_path(GList *vertices, double thickness,
}
}
void bounding_box_update_point(union bounding_box *destination, conv_generic_to_vector_2d_t conv_func, void *pt)
void bounding_box_update_with_point(union bounding_box *destination, conv_generic_to_vector_2d_t conv_func, void *pt)
{
struct vector_2d point;
@@ -224,7 +222,7 @@ void bounding_box_apply_transform(double scale, double rotation_deg, bool flip_a
vector_2d_rotate(&input_points[i], rotation_deg * M_PI / 180.0);
vector_2d_scale(&input_points[i], scale);
bounding_box_update_point(box, NULL, &input_points[i]);
bounding_box_update_with_point(box, NULL, &input_points[i]);
}
}

View File

@@ -53,7 +53,7 @@ static void update_box_with_gfx(union bounding_box *box, struct gds_graphics *gf
case GRAPHIC_BOX:
/* Expected fallthrough */
case GRAPHIC_POLYGON:
bounding_box_calculate_polygon(gfx->vertices,
bounding_box_calculate_from_polygon(gfx->vertices,
(conv_generic_to_vector_2d_t)&convert_gds_point_to_2d_vector,
&current_box);
break;
@@ -74,7 +74,7 @@ static void update_box_with_gfx(union bounding_box *box, struct gds_graphics *gf
}
/* Update box with results */
bounding_box_update_box(box, &current_box);
bounding_box_update_with_box(box, &current_box);
}
void calculate_cell_bounding_box(union bounding_box *box, struct gds_cell *cell)
@@ -113,7 +113,7 @@ void calculate_cell_bounding_box(union bounding_box *box, struct gds_cell *cell)
temp_box.vectors.upper_right.y += sub_cell->origin.y;
/* update the parent's box */
bounding_box_update_box(box, &temp_box);
bounding_box_update_with_box(box, &temp_box);
}
}

View File

@@ -65,7 +65,7 @@ void vector_2d_rotate(struct vector_2d *vec, double angle)
sin_val = sin(angle);
cos_val = cos(angle);
vector_2d_copy(&temp, vec);
(void)vector_2d_copy(&temp, vec);
/* Apply rotation matrix */
vec->x = (cos_val * temp.x) - (sin_val * temp.y);

View File

@@ -58,7 +58,7 @@ enum graphics_type
enum path_type {PATH_FLUSH = 0, PATH_ROUNDED = 1, PATH_SQUARED = 2}; /**< Path line caps */
/**
* @brief A point in the 2D plane. Sometimes reffered to as vertex
* @brief A point in the 2D plane. Sometimes referred to as vertex
*/
struct gds_point {
int x;
@@ -101,7 +101,7 @@ struct gds_graphics {
enum path_type path_render_type; /**< @brief Line cap */
int width_absolute; /**< @brief Width. Not used for objects other than paths */
int16_t layer; /**< @brief Layer the graphic object is on */
uint16_t datatype;
int16_t datatype; /**< @brief Data type of graphic object */
};
/**

View File

@@ -35,15 +35,44 @@
#include <gds-render/geometric/vector-operations.h>
#include <stdbool.h>
/**
* @brief Union describing a bounding box
*
* Two ways of accessing a bounding box are possible.
*
* Either, use the "named" vectors struct to specifically access the points
* @code
* lower_left = box.vectors.lower_left;
* upper right = box.vectors.upper_right;
* @endcode
*
* or use the iterable vector array:
* @code
* for (i = 0; i < 2; i++)
* box.vector_array[i] = points[i];
* @endcode
*/
union bounding_box {
/** Coordinate System is (y up | x right) */
/**
* @brief Location vectors of upper right and lower left bounding box points
* @note Coordinate System is (y up | x right)
*/
struct _vectors {
/** @brief Lower left point of the bounding box */
struct vector_2d lower_left;
/** @brief Upper right point of the bounding box */
struct vector_2d upper_right;
} vectors;
/**
* @brief Array of vectors representing a bounding box
* @note This is more convenient for iterating
*/
struct vector_2d vector_array[2];
};
/*
* @brief Pointer to a function that takes any pointer and converts this object to a vector_2d struct
*/
typedef void (*conv_generic_to_vector_2d_t)(void *, struct vector_2d *);
/**
@@ -52,14 +81,14 @@ typedef void (*conv_generic_to_vector_2d_t)(void *, struct vector_2d *);
* @param conv_func Conversion function to convert vertices to vector_2d structs.
* @param box Box to write to. This box is not updated! All previous data is discarded
*/
void bounding_box_calculate_polygon(GList *vertices, conv_generic_to_vector_2d_t conv_func, union bounding_box *box);
void bounding_box_calculate_from_polygon(GList *vertices, conv_generic_to_vector_2d_t conv_func, union bounding_box *box);
/**
* @brief Update an exisitng bounding box with another one.
* @param destination Target box to update
* @param update Box to update the target with
*/
void bounding_box_update_box(union bounding_box *destination, union bounding_box *update);
void bounding_box_update_with_box(union bounding_box *destination, union bounding_box *update);
/**
* @brief Prepare an empty bounding box.
@@ -76,7 +105,7 @@ void bounding_box_prepare_empty(union bounding_box *box);
* @param conv_func Conversion function to convert \p pt to a vector_2d. May be NULL
* @param pt Point to update bounding box with
*/
void bounding_box_update_point(union bounding_box *destination, conv_generic_to_vector_2d_t conv_func, void *pt);
void bounding_box_update_with_point(union bounding_box *destination, conv_generic_to_vector_2d_t conv_func, void *pt);
/**
* @brief Return all four corner points of a bounding box
@@ -88,7 +117,7 @@ void bounding_box_get_all_points(struct vector_2d *points, union bounding_box *b
/**
* @brief Apply transformations onto bounding box.
*
* All corner points of the bounding \f$ \vec{P_i} \f$ box are transformed to output points \f$ \vec{P_o} \f$ by:
* All corner points \f$ \vec{P_i} \f$ of the bounding box are transformed to output points \f$ \vec{P_o} \f$ by:
*
* \f$ \vec{P_o} = s \cdot \begin{pmatrix}\cos\left(\phi\right) & -\sin\left(\phi\right)\\ \sin\left(\phi\right) & \cos\left(\phi\right)\end{pmatrix} \cdot \begin{pmatrix} 1 & 0 \\ 0 & -1^{m} \end{pmatrix} \cdot \vec{P_i} \f$, with:
*
@@ -102,7 +131,7 @@ void bounding_box_get_all_points(struct vector_2d *points, union bounding_box *b
* @param rotation_deg Rotation of bounding box around the origin in degrees (counterclockwise)
* @param flip_at_x Flip the boundig box on the x axis before rotating.
* @param box Bounding box the operations should be applied to.
* @note Keep in mind, that this bounding boxy is actually the bounding box of the rotated boundig box and not the object itself.
* @note Keep in mind, that this bounding box is actually the bounding box of the rotated boundig box and not the object itself.
* It might be too big.
*/
void bounding_box_apply_transform(double scale, double rotation_deg, bool flip_at_x, union bounding_box *box);
@@ -113,6 +142,9 @@ void bounding_box_apply_transform(double scale, double rotation_deg, bool flip_a
* @param thickness Thisckness of the path
* @param conv_func Conversion function for vertices to vector_2d structs
* @param box Bounding box to write results in.
* @warning This function is not yet implemented correctly. Miter points of paths are not taken into account.
* If a path is the outmost object of your cell _and_ it is not parallel to one of the coordinate axes,
* the calculated bounding box size might be off. In other cases it should be reasonable close to the real bounding box.
*/
void bounding_box_update_with_path(GList *vertices, double thickness, conv_generic_to_vector_2d_t conv_func, union bounding_box *box);

View File

@@ -35,10 +35,17 @@
#include <gds-render/gds-utils/gds-types.h>
/**
* @brief calculate_cell_bounding_box Calculate bounding box of gds cell
* @param box Resulting boundig box. Will be uüdated and not overwritten
* @brief Calculate bounding box of a gds cell.
*
* This function updates a given bounding box with the dimensions of a
* gds_cell. Please note that the handling of path miter points is not complete yet.
* If a path object is the outmost object of your cell at any edge,
* the resulting bounding box might be the wrong size. The devistion from the real size
* is guaranteed to be within the width of the path object.
*
* @param box Resulting boundig box. Will be updated and not overwritten
* @param cell Toplevel cell
* @warning Path handling not yet implemented correctly.
* @warning Handling of Path graphic objects not yet implemented correctly.
*/
void calculate_cell_bounding_box(union bounding_box *box, struct gds_cell *cell);

View File

@@ -41,7 +41,7 @@ struct layer_info
{
int layer; /**< @brief Layer number */
char *name; /**< @brief Layer name. */
int stacked_position; ///< @brief Position of layer in output @warning This parameter is not used by any renderer so far @note Lower is bottom, higher is top
int stacked_position; /**< @brief Position of layer in output @warning This parameter is not used by any renderer so far @note Lower is bottom, higher is top */
GdkRGBA color; /**< @brief RGBA color used to render this layer */
int render; /**< @brief true: Render to output */
};

View File

@@ -1,3 +1,22 @@
/*
* GDSII-Converter
* Copyright (C) 2018 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/>.
*/
#ifndef __EXTERNAL_RENDERER_INTERFACES_H__
#define __EXTERNAL_RENDERER_INTERFACES_H__
@@ -13,6 +32,16 @@
* @{
*/
/**
* @brief This define is used to export a function from a shared object
*/
#define EXPORT_FUNC __attribute__((visibility("default")))
/**
* @brief This define is used to export a variable symbol from a shared object
*/
#define EXPORT_VAR EXPORT_FUNC
/**
* @brief Function name expected to be found in external library for rendering.
*
@@ -46,12 +75,32 @@
*
* 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
* @brief Define for declaring the exported functions.
*
* This not only helps with the declaration but also makes the symbols visible, so they can be called from outside the library
*/
#define EXPORTED_FUNC_DECL(FUNC) EXPORT_FUNC FUNC
/**
* @brief Define for declaring exported variables
*
* This not only helps with the declaration but also makes the symbols visible, so they can be accessed from outside the library
*/
#define EXPORTED_VAR_DECL(VAR) EXPORT_VAR VAR
/**
* @brief Define for declaring variables based on a define expansion
* @note If you want to declare an exported variable use @ref EXPORTED_VAR_DECL
*/
#define VAR_DECL(VAR) VAR
/**
* @brief Define for declaring functions based on a define expansion
* @note If you want to declare an exported function use @ref EXPORTED_FUNC_DECL
*/
#define FUNC_DECL(FUNC) FUNC

View File

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

1
main.c
View File

@@ -158,7 +158,6 @@ static void gapp_activate(GApplication *app, gpointer user_data)
{
GtkWindow *main_window;
GdsRenderGui *gui;
struct application_data * const appdata = (struct application_data *)user_data;
gui = gds_render_gui_new();

View File

@@ -31,6 +31,7 @@
#include <cairo.h>
#include <cairo-pdf.h>
#include <cairo-svg.h>
#include <glib/gi18n.h>
#include <gds-render/output-renderers/cairo-renderer.h>
#include <sys/wait.h>
@@ -267,18 +268,26 @@ static int cairo_renderer_render_cell_to_vector_file(GdsOutputRenderer *renderer
//process_id = -1;
if (process_id < 0) {
/* This should not happen */
fprintf(stderr, "Fatal error: Cairo Renderer: Could not spawn child process!");
fprintf(stderr, _("Fatal error: Cairo Renderer: Could not spawn child process!"));
exit(-2);
} else if (process_id > 0) {
/* Woohoo... Successfully dumped the shitty code to an unknowing victim */
goto ret_parent;
}
/* Close stdin and (stdout and stderr may live on) */
close(0);
//close(1);
close(comm_pipe[0]);
/* We are now in a separate process just for rendering the output image.
* You may print a log message to the activity bar of the gui by writing a line
* teminated with '\n' to comm_pipe[1]. This will be handled by the parent process.
* Directly calling the update function
* gds_output_renderer_update_async_progress()
* does not have any effect because this is a separate process.
*/
/*
* Close stdin and (stdout and stderr may live on)
*/
close(0);
close(comm_pipe[0]);
layers = (struct cairo_layer *)calloc(MAX_LAYERS, sizeof(struct cairo_layer));
@@ -317,7 +326,7 @@ static int cairo_renderer_render_cell_to_vector_file(GdsOutputRenderer *renderer
linfo = (struct layer_info *)info_list->data;
if (linfo->layer >= MAX_LAYERS) {
printf("Layer outside of Spec.\n");
printf(_("Layer number too high / outside of spec.\n"));
continue;
}
@@ -327,7 +336,7 @@ static int cairo_renderer_render_cell_to_vector_file(GdsOutputRenderer *renderer
/* Print size */
cairo_recording_surface_ink_extents(layers[linfo->layer].rec, &rec_x0, &rec_y0,
&rec_width, &rec_height);
dprintf(comm_pipe[1], "Size of layer %d%s%s%s: <%lf x %lf> @ (%lf | %lf)\n",
dprintf(comm_pipe[1], _("Size of layer %d%s%s%s: <%lf x %lf> @ (%lf | %lf)\n"),
linfo->layer,
(linfo->name && linfo->name[0] ? " (" : ""),
(linfo->name && linfo->name[0] ? linfo->name : ""),
@@ -362,10 +371,10 @@ static int cairo_renderer_render_cell_to_vector_file(GdsOutputRenderer *renderer
for (info_list = layer_infos; info_list != NULL; info_list = g_list_next(info_list)) {
linfo = (struct layer_info *)info_list->data;
dprintf(comm_pipe[1], "Exporting layer %d to file\n", linfo->layer);
dprintf(comm_pipe[1], _("Exporting layer %d to file\n"), linfo->layer);
if (linfo->layer >= MAX_LAYERS) {
printf("Layer outside of Spec.\n");
printf(_("Layer outside of spec.\n"));
continue;
}
@@ -405,7 +414,7 @@ ret_clear_layers:
}
free(layers);
printf("Cairo export finished. It might still be buggy!\n");
printf(_("Cairo export finished. It might still be buggy!\n"));
/* Suspend child process */
exit(0);
@@ -463,7 +472,7 @@ static int cairo_renderer_render_output(GdsOutputRenderer *renderer,
else
pdf_file = output_file;
gds_output_renderer_update_async_progress(renderer, "Rendering Cairo Output...");
gds_output_renderer_update_async_progress(renderer, _("Rendering Cairo Output..."));
ret = cairo_renderer_render_cell_to_vector_file(renderer, cell, layer_infos, pdf_file, svg_file, scale);
if (settings)

View File

@@ -31,6 +31,7 @@
#include <dlfcn.h>
#include <stdio.h>
#include <sys/wait.h>
#include <glib/gi18n.h>
#include <gds-render/output-renderers/external-renderer.h>
#include <gds-render/version.h>
@@ -75,7 +76,7 @@ static int external_renderer_render_cell(struct gds_cell *toplevel_cell, GList *
int forked_status;
if (!so_path) {
fprintf(stderr, "Path to shared object not set!\n");
fprintf(stderr, _("Path to shared object not set!\n"));
return -3000;
}
@@ -86,7 +87,7 @@ static int external_renderer_render_cell(struct gds_cell *toplevel_cell, GList *
/* Load shared object */
so_handle = dlopen(so_path, RTLD_LAZY);
if (!so_handle) {
fprintf(stderr, "Could not load external library '%s'\nDetailed error is:\n%s\n", so_path, dlerror());
fprintf(stderr, _("Could not load external library '%s'\nDetailed error is:\n%s\n"), so_path, dlerror());
return -2000;
}
@@ -95,7 +96,7 @@ static int external_renderer_render_cell(struct gds_cell *toplevel_cell, GList *
dlsym(so_handle, xstr(EXTERNAL_LIBRARY_RENDER_FUNCTION));
error_msg = dlerror();
if (error_msg) {
fprintf(stderr, "Rendering function not found in library:\n%s\n", error_msg);
fprintf(stderr, _("Rendering function not found in library:\n%s\n"), error_msg);
goto ret_close_so_handle;
}
@@ -103,7 +104,7 @@ static int external_renderer_render_cell(struct gds_cell *toplevel_cell, GList *
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);
fprintf(stderr, _("Rendering function not found in library:\n%s\n"), error_msg);
goto ret_close_so_handle;
}
@@ -125,7 +126,7 @@ static int external_renderer_render_cell(struct gds_cell *toplevel_cell, GList *
/* Execute */
g_message("Calling external renderer.");
g_message(_("Calling external renderer."));
if (forking_req)
fork_pid = fork();
@@ -150,7 +151,7 @@ end_forked:
ret = WEXITSTATUS(forked_status);
}
g_message("External renderer finished.");
g_message(_("External renderer finished."));
ret_close_so_handle:
dlclose(so_handle);
@@ -258,15 +259,15 @@ static void external_renderer_class_init(ExternalRendererClass *klass)
/* Setup properties */
external_renderer_properties[PROP_SO_PATH] =
g_param_spec_string("shared-object-path",
"Shared object file path",
"Path to the shared object to search rendering function in.",
g_param_spec_string(N_("shared-object-path"),
N_("Shared object file path"),
N_("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",
g_param_spec_string(N_("param-string"),
N_("Shared object renderer parameter string"),
N_("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);
@@ -285,8 +286,8 @@ ExternalRenderer *external_renderer_new()
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,
"param-string", param_string,NULL);
return g_object_new(GDS_RENDER_TYPE_EXTERNAL_RENDERER, N_("shared-object-path"), so_path,
N_("param-string"), param_string, NULL);
}
/** @} */

View File

@@ -28,6 +28,7 @@
*/
#include <gds-render/output-renderers/gds-output-renderer.h>
#include <glib/gi18n.h>
struct renderer_params {
struct gds_cell *cell;
@@ -70,7 +71,7 @@ static int gds_output_renderer_render_dummy(GdsOutputRenderer *renderer,
(void)cell;
(void)scale;
g_warning("Output renderer does not define a render_output function!");
g_warning(_("Output renderer does not define a render_output function!"));
return 0;
}
@@ -99,6 +100,11 @@ static void gds_output_renderer_dispose(GObject *self_obj)
if (priv->output_file)
g_free(priv->output_file);
if (priv->idle_function_parameters.status_message) {
g_free(priv->idle_function_parameters.status_message);
priv->idle_function_parameters.status_message = NULL;
}
g_clear_object(&priv->layer_settings);
/* Chain up to parent class */
@@ -168,17 +174,17 @@ static void gds_output_renderer_class_init(GdsOutputRendererClass *klass)
/* Setup properties */
gds_output_renderer_properties[PROP_OUTPUT_FILE] =
g_param_spec_string("output-file", "output file", "Output file for renderer",
g_param_spec_string(N_("output-file"), N_("output file"), N_("Output file for renderer"),
NULL, G_PARAM_READWRITE);
gds_output_renderer_properties[PROP_LAYER_SETTINGS] =
g_param_spec_object("layer-settings", "Layer Settings object",
"Object containing the layer rendering information",
g_param_spec_object(N_("layer-settings"), N_("Layer Settings object"),
N_("Object containing the layer rendering information"),
GDS_RENDER_TYPE_LAYER_SETTINGS, G_PARAM_READWRITE);
g_object_class_install_properties(oclass, N_PROPERTIES, gds_output_renderer_properties);
/* Setup output signals */
gds_output_renderer_signals[ASYNC_FINISHED] =
g_signal_newv("async-finished", GDS_RENDER_TYPE_OUTPUT_RENDERER,
g_signal_newv(N_("async-finished"), GDS_RENDER_TYPE_OUTPUT_RENDERER,
G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE,
NULL,
NULL,
@@ -188,7 +194,7 @@ static void gds_output_renderer_class_init(GdsOutputRendererClass *klass)
0,
NULL);
gds_output_renderer_signals[ASYNC_PROGRESS_CHANGED] =
g_signal_newv("progress-changed", GDS_RENDER_TYPE_OUTPUT_RENDERER,
g_signal_newv(N_("progress-changed"), GDS_RENDER_TYPE_OUTPUT_RENDERER,
G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE,
NULL,
NULL,
@@ -223,8 +229,8 @@ GdsOutputRenderer *gds_output_renderer_new()
GdsOutputRenderer *gds_output_renderer_new_with_props(const char *output_file, LayerSettings *layer_settings)
{
return GDS_RENDER_OUTPUT_RENDERER(g_object_new(GDS_RENDER_TYPE_OUTPUT_RENDERER,
"layer-settings", layer_settings,
"output-file", output_file,
N_("layer-settings"), layer_settings,
N_("output-file"), output_file,
NULL));
}
@@ -235,14 +241,14 @@ void gds_output_renderer_set_output_file(GdsOutputRenderer *renderer, const gcha
/* Check if the filename is actually filled */
if (!file_name || !file_name[0])
return;
g_object_set(renderer, "output-file", file_name, NULL);
g_object_set(renderer, N_("output-file"), file_name, NULL);
}
const char *gds_output_renderer_get_output_file(GdsOutputRenderer *renderer)
{
const char *file = NULL;
g_object_get(renderer, "output-file", &file, NULL);
g_object_get(renderer, N_("output-file"), &file, NULL);
return file;
}
@@ -257,7 +263,7 @@ LayerSettings *gds_output_renderer_get_and_ref_layer_settings(GdsOutputRenderer
g_mutex_lock(&priv->settings_lock);
/* This function seems to already reference the LayerSettings object */
g_object_get(renderer, "layer-settings", &ret, NULL);
g_object_get(renderer, N_("layer-settings"), &ret, NULL);
/* It is now safe to clear the lock */
g_mutex_unlock(&priv->settings_lock);
@@ -269,7 +275,7 @@ void gds_output_renderer_set_layer_settings(GdsOutputRenderer *renderer, LayerSe
{
g_return_if_fail(GDS_RENDER_IS_LAYER_SETTINGS(settings));
g_object_set(renderer, "layer-settings", settings, NULL);
g_object_set(renderer, N_("layer-settings"), settings, NULL);
}
int gds_output_renderer_render_output(GdsOutputRenderer *renderer, struct gds_cell *cell, double scale)
@@ -279,28 +285,28 @@ int gds_output_renderer_render_output(GdsOutputRenderer *renderer, struct gds_ce
GdsOutputRendererPrivate *priv = gds_output_renderer_get_instance_private(renderer);
if (GDS_RENDER_IS_OUTPUT_RENDERER(renderer) == FALSE) {
g_error("Output Renderer not valid.");
g_error(_("Output Renderer not valid."));
return GDS_OUTPUT_RENDERER_GEN_ERR;
}
if (!priv->output_file || !priv->output_file[0]) {
g_error("No/invalid output file set.");
g_error(_("No/invalid output file set."));
return GDS_OUTPUT_RENDERER_GEN_ERR;
}
if (!priv->layer_settings) {
g_error("No layer specification supplied.");
g_error(_("No layer specification supplied."));
return GDS_OUTPUT_RENDERER_GEN_ERR;
}
if (!cell) {
g_error("Output renderer called without cell to render.");
g_error(_("Output renderer called without cell to render."));
return GDS_OUTPUT_RENDERER_PARAM_ERR;
}
klass = GDS_RENDER_OUTPUT_RENDERER_GET_CLASS(renderer);
if (klass->render_output == NULL) {
g_critical("Output Renderer: Rendering function broken. This is a bug.");
g_critical(_("Output Renderer: Rendering function broken. This is a bug."));
return GDS_OUTPUT_RENDERER_GEN_ERR;
}
@@ -361,12 +367,14 @@ int gds_output_renderer_render_output_async(GdsOutputRenderer *renderer, struct
priv = gds_output_renderer_get_instance_private(renderer);
if (priv->task) {
g_warning("renderer already started asynchronously");
g_warning(_("Renderer already started asynchronously"));
return -2000;
}
priv->task = g_task_new(renderer, NULL, gds_output_renderer_async_finished, NULL);
g_task_set_name(priv->task, "Rendering Thread");
/* This function is not available on current debian distros. */
/* g_task_set_name(priv->task, "Rendering Thread"); */
g_mutex_lock(&priv->settings_lock);
priv->async_params.cell = cell;

View File

@@ -27,6 +27,8 @@
#include <stdio.h>
#include <gds-render/output-renderers/latex-renderer.h>
#include <gdk/gdk.h>
#include <glib/gi18n.h>
/**
* @addtogroup LaTeX-Renderer
* @{
@@ -248,7 +250,7 @@ static void render_cell(struct gds_cell *cell, GList *layer_infos, FILE *tex_fil
struct gds_cell_instance *inst;
status = g_string_new(NULL);
g_string_printf(status, "Generating cell %s", cell->name);
g_string_printf(status, _("Generating cell %s"), cell->name);
gds_output_renderer_update_async_progress(renderer, status->str);
g_string_free(status, TRUE);
@@ -368,7 +370,7 @@ static int latex_renderer_render_output(GdsOutputRenderer *renderer,
l_renderer->pdf_layers, l_renderer->tex_standalone, renderer);
fclose(tex_file);
} else {
g_error("Could not open LaTeX output file");
g_error(_("Could not open LaTeX output file"));
}
if (settings)
@@ -433,14 +435,14 @@ static void latex_renderer_class_init(LatexRendererClass *klass)
latex_renderer_properties[PROP_STANDALONE] =
g_param_spec_boolean("standalone",
"Standalone TeX file",
"Generate a standalone LaTeX file.",
N_("Standalone TeX file"),
N_("Generate a standalone LaTeX file."),
FALSE,
G_PARAM_READWRITE);
latex_renderer_properties[PROP_PDF_LAYERS] =
g_param_spec_boolean("pdf-layers",
"PDF OCR layers",
"Generate OCR layers",
N_("PDF OCR layers"),
N_("Generate OCR layers"),
FALSE,
G_PARAM_READWRITE);

View File

@@ -9,3 +9,5 @@ link_libraries(version)
add_library(${PROJECT_NAME} SHARED EXCLUDE_FROM_ALL ${SOURCES})
add_dependencies(${PROJECT_NAME} version)
set_target_properties(${PROJECT_NAME} PROPERTIES C_VISIBILITY_PRESET hidden)
set_target_properties(${PROJECT_NAME} PROPERTIES CXX_VISIBILITY_PRESET hidden)

View File

@@ -1,9 +1,36 @@
/*
* 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)
int EXPORTED_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;
@@ -12,13 +39,16 @@ int FUNC_DECL(EXTERNAL_LIBRARY_RENDER_FUNCTION)(struct gds_cell *toplevel, GList
return 0;
}
int FUNC_DECL(EXTERNAL_LIBRARY_INIT_FUNCTION)(const char *params, const char *version)
int EXPORTED_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)
int EXPORTED_FUNC_DECL(EXTERNAL_LIBRARY_FINALIZE_FUNCTION)(void)
{
printf("Finalize function called.\n");
return 0;
}
/** @} */

View File

@@ -2,14 +2,32 @@ 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("Python version found: ${PYTHONLIBS_VERSION_STRING}")
message(${PYTHON_LIBRARIES})
message(${PYTHON_INCLUDE_DIRS})
message("${BoldCyan}Python version found: ${PYTHONLIBS_VERSION_STRING}${ColorReset}")
add_library(${PROJECT_NAME} SHARED EXCLUDE_FROM_ALL ${SOURCES})
add_dependencies(${PROJECT_NAME} version)

View File

@@ -0,0 +1,43 @@
/*
* 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 force-fork.h
* @brief Header file force fork variabel definition.
*
* This file makes the force fork variable accessible.
* Actually this is kind of useless. However, here it is :)
* @author Mario Hüttel <mario.huettel@gmx.net>
*/
#ifndef __PYTHON_PLUGIN_FORCE_FORK_H__
#define __PYTHON_PLUGIN_FORCE_FORK_H__
/**
* @addtogroup python-plugin
* @{
*/
#include <gds-render/output-renderers/external-renderer-interfaces.h>
extern const int VAR_DECL(EXTERNAL_LIBRARY_FORK_REQUEST);
/** @} */
#endif /* __PYTHON_PLUGIN_FORCE_FORK_H__ */

View File

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

View File

@@ -0,0 +1,50 @@
/*
* GDSII-Converter Python Plugin
* Copyright (C) 2020 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/glist.c
* @author Mario Hüttel <mario.huettel@gmx.net>
*/
/**
* @defgroup python-plugin-glist GList wrapper for python
* @ingroup python-plugin
* This is a wrapping class for GLists
* @addtogroup python-plugin-glist
* @{
*/
#ifndef __GLIST_H__
#define __GLIST_H__
#ifndef PY_SSIZE_T_CLEAN
#define PY_SSIZE_T_CLEAN
#endif
#include <Python.h>
#include <glib.h>
extern PyTypeObject GListType;
typedef struct _GListObject GListObject;
void glist_set_head_ptr(GListObject *self, GList *head);
#endif /* __GLIST_H__ */
/** @} */

View File

@@ -0,0 +1,37 @@
/*
* 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/force-fork.c
* @author Mario Hüttel <mario.huettel@gmx.net>
*/
#include <python-renderer/force-fork.h>
/**
* @addtogroup python-plugin
* @{
*/
/* The precense of this variable tells the gds-render application to execute this plugin in a separate process
* The variable's value is don't care
*/
const int EXPORTED_VAR_DECL(EXTERNAL_LIBRARY_FORK_REQUEST) = 1;
/** @} */

View File

@@ -0,0 +1,100 @@
/*
* 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>
#include <python-renderer/glist.h>
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(&GListType))
return -1;
return 0;
}
static int gds_render_module_add_types(PyObject *module)
{
int err;
Py_INCREF(&GListType);
err = PyModule_AddObject(module, "GdsPoint", (PyObject *)&GListType);
if (err < 0) {
goto decref_glist;
}
return 0;
decref_glist:
Py_DECREF(&GListType);
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;
}

View File

@@ -0,0 +1,72 @@
/*
* GDSII-Converter Python Plugin
* Copyright (C) 2020 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/glist.c
* @author Mario Hüttel <mario.huettel@gmx.net>
*/
/**
* @defgroup python-plugin-glist GList wrapper for python
* @ingroup python-plugin
* This is a wrapping class for GLists
* This wrpper acts as a read only access to the lists
*
* @addtogroup python-plugin-glist
* @{
*/
#include <python-renderer/glist.h>
struct _GListObject {
PyObject_HEAD
GList *head;
size_t len;
};
static PyObject *glist_to_list(GListObject *self, PyObject *Py_UNUSED(ignored))
{
return Py_BuildValue("");
}
static PyMethodDef glist_methods[] = {
{"tolist", (PyCFunction)glist_to_list, METH_NOARGS, "Convert GList to editable list"}
};
void glist_set_head_ptr(GListObject *self, GList *head)
{
if (!self || !head)
return;
self->head = head;
self->len = g_list_length(self->head);
}
PyTypeObject GListType = {
PyVarObject_HEAD_INIT(NULL, 0)
.tp_name = "gds_render.GList",
.tp_doc = "Read only GList",
.tp_basicsize = sizeof(GListObject),
.tp_itemsize = 0,
.tp_flags = Py_TPFLAGS_DEFAULT,
.tp_new = PyType_GenericNew,
.tp_methods = glist_methods
};
/** @} */

View File

@@ -1,4 +1,37 @@
/*
* 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>
@@ -6,27 +39,15 @@
#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;
static int check_file_exists(const char *path)
{
FILE *file;
int ret = -1;
file = fopen(path, "rb");
if (file) {
fclose(file);
ret = 0;
}
return ret;
}
int FUNC_DECL(EXTERNAL_LIBRARY_RENDER_FUNCTION)(struct gds_cell *toplevel, GList *layer_info_list, const char *output_file_name, double scale)
int EXPORTED_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;
@@ -62,35 +83,63 @@ return_value:
return ret;
}
int FUNC_DECL(EXTERNAL_LIBRARY_INIT_FUNCTION)(const char *params, const char *version)
int EXPORTED_FUNC_DECL(EXTERNAL_LIBRARY_INIT_FUNCTION)(const char *params, const char *version)
{
int ret = 0;
PyObject *p_name;
PyObject *p_sys_path;
PyObject *p_cwd_string;
char cwd[256];
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);
Py_Initialize();
if (!getcwd(cwd, sizeof(cwd))) {
return -2;
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_cwd_string = PyUnicode_FromString(cwd);
PyList_Append(p_sys_path, p_cwd_string);
Py_DECREF(p_cwd_string);
p_mod_dir_string = PyUnicode_FromString(dir_name);
PyList_Append(p_sys_path, p_mod_dir_string);
Py_DECREF(p_mod_dir_string);
/* This renderer has only one parameter: The name of the file */
/*if (check_file_exists(params))
return -1001;
*/
p_name = PyUnicode_DecodeFSDefault(params);
p_name = PyUnicode_DecodeFSDefault(strtok(base_name, "."));
p_module = PyImport_Import(p_name);
Py_DECREF(p_name);
@@ -101,11 +150,14 @@ int FUNC_DECL(EXTERNAL_LIBRARY_INIT_FUNCTION)(const char *params, const char *ve
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 EXPORTED_FUNC_DECL(EXTERNAL_LIBRARY_FINALIZE_FUNCTION)(void)
{
int ret;
@@ -117,3 +169,5 @@ int FUNC_DECL(EXTERNAL_LIBRARY_FINALIZE_FUNCTION)(void)
ret = Py_FinalizeEx();
return ret;
}
/** @} */

41
test/CMakeLists.txt Normal file
View File

@@ -0,0 +1,41 @@
project(gds-render-test)
add_custom_target(test "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}" "-r compact" "-s" DEPENDS ${PROJECT_NAME})
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)
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/catch-framework")
aux_source_directory("geometric" GEOMETRIC_TEST_SOURCES)
set(TEST_SOURCES
${GEOMETRIC_TEST_SOURCES}
)
set(DUT_SOURCES
"../geometric/vector-operations.c"
)
add_executable(${PROJECT_NAME} EXCLUDE_FROM_ALL "test-main.cpp" ${TEST_SOURCES} ${DUT_SOURCES})
target_link_libraries(${PROJECT_NAME} ${GLIB_LDFLAGS} ${GTK3_LDFLAGS} ${CAIRO_LDFLAGS} m version ${CMAKE_DL_LIBS})

17618
test/catch-framework/catch.hpp Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,160 @@
#include <catch.hpp>
#include <limits>
extern "C" {
#include <gds-render/geometric/vector-operations.h>
}
TEST_CASE("geometric/vector-operations/vector_2d_add", "[GEOMETRIC]")
{
struct vector_2d res;
struct vector_2d a;
struct vector_2d b;
a.x = 1;
a.y = 2;
b.x = 2;
b.y = 6;
vector_2d_add(&res, &a, &b);
REQUIRE(res.x == Approx(a.x + b.x));
REQUIRE(res.y == Approx(a.y + b.y));
}
TEST_CASE("geometric/vector-operations/vector_2d_calculate_angle_between", "[GEOMETRIC]")
{
double angle;
struct vector_2d a;
struct vector_2d b;
a.x = 1;
a.y = 0;
b.x = 0;
b.y = 1;
angle = vector_2d_calculate_angle_between(&a, &a);
REQUIRE(angle == Approx(0.0));
angle = vector_2d_calculate_angle_between(&a, &b);
REQUIRE(angle == Approx(90.0 / 180.0 * M_PI));
}
TEST_CASE("geometric/vector-operations/vector_2d_subtract", "[GEOMETRIC]")
{
struct vector_2d res;
struct vector_2d a;
struct vector_2d b;
a.x = 1;
a.y = 2;
b.x = 2;
b.y = 6;
vector_2d_subtract(&res, &a, &b);
REQUIRE(res.x == Approx(a.x - b.x));
REQUIRE(res.y == Approx(a.y - b.y));
}
TEST_CASE("geometric/vector-operations/vector_2d_abs", "[GEOMETRIC]")
{
struct vector_2d c;
struct vector_2d a;
struct vector_2d b;
double a_len, b_len, c_len;
a.x = 1;
a.y = 0;
b.x = 0;
b.y = 2;
c.x = 3;
c.y = 4;
a_len = vector_2d_abs(&a);
b_len = vector_2d_abs(&b);
c_len = vector_2d_abs(&c);
REQUIRE(a_len == Approx(1.0));
REQUIRE(b_len == Approx(2.0));
REQUIRE(c_len == Approx(5.0));
}
TEST_CASE("geometric/vector-operations/vector_2d_scalar_multipy", "[GEOMETRIC]")
{
struct vector_2d c;
struct vector_2d a;
struct vector_2d b;
double mult;
a.x = 1;
a.y = 0;
b.x = 0;
b.y = 2;
mult = vector_2d_scalar_multipy(&a, &b);
REQUIRE(mult == Approx(0.0));
a.x = 1;
a.y = 1;
b.x = 1;
b.y = 1;
mult = vector_2d_scalar_multipy(&a, &b);
REQUIRE(mult == Approx(2.0));
}
TEST_CASE("geometric/vector-operations/vector_2d_normalize", "[GEOMETRIC]")
{
struct vector_2d a;
a.x = 1;
a.y = 0;
vector_2d_normalize(&a);
REQUIRE(a.x == Approx(1.0));
REQUIRE(a.y == Approx(0.0));
a.x = 1;
a.y = -1;
vector_2d_normalize(&a);
REQUIRE(a.x == Approx(1.0/sqrt(2)));
REQUIRE(a.y == Approx(-1.0/sqrt(2)));
}
TEST_CASE("geometric/vector-operations/vector_2d_rotate", "[GEOMETRIC]")
{
struct vector_2d a;
a.x = 1;
a.y = 0;
vector_2d_rotate(&a, M_PI/2);
REQUIRE(a.x == Approx(0.0).scale(0.001));
REQUIRE(a.y == Approx(1.0));
a.x = 0;
a.y = 1;
vector_2d_rotate(&a, -M_PI/2);
vector_2d_rotate(&a, M_PI);
REQUIRE(a.x == Approx(-1.0));
REQUIRE(a.y == Approx(0.0).scale(0.001));
}
TEST_CASE("geometric/vector-operations/vector_2d_scale", "[GEOMETRIC]")
{
struct vector_2d a;
a.x = 1;
a.y = 0;
vector_2d_scale(&a, 2.0);
REQUIRE(a.x == Approx(2.0));
REQUIRE(a.y == Approx(0.0));
a.x = 1;
a.y = -3;
vector_2d_scale(&a, 0.5);
REQUIRE(a.x == Approx(0.5));
REQUIRE(a.y == Approx(-1.5));
}

2
test/test-main.cpp Normal file
View File

@@ -0,0 +1,2 @@
#define CATCH_CONFIG_MAIN
#include "catch-framework/catch.hpp"

View File

@@ -12,8 +12,28 @@ cd "$DIR"
files=`find ../ -name "*.c"`
mkdir -p "pot"
# C Files
pot="pot/gds-render.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"
echo "Parsing C file $file"
# pot="pot/"$(echo "${file#*/}" | sed -e "s/\//_/g")
# pot="${pot%.c}.pot"
if [[ -f "$pot" ]]; then
xgettext --package-name="gds-render" --join-existing --keyword=_ --language=C --add-comments --sort-output -o "$pot" "$file"
else
xgettext --package-name="gds-render" --keyword=_ --language=C --add-comments --sort-output -o "$pot" "$file"
fi
done
# Glade files
glade_files=`find ../resources/ -name "*.glade"`
for glade in $glade_files; do
echo "Parsing Glade file $glade"
if [[ -f "$pot" ]]; then
xgettext --package-name="gds-render" --join-existing --keyword=_ -L Glade --sort-output -o "$pot" "$glade"
else
xgettext --package-name="gds-render" --keyword=_ -L Glade --sort-output -o "$pot" "$glade"
fi
done

View File

@@ -1,72 +0,0 @@
# 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 ""

View File

@@ -1,50 +0,0 @@
# 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 ""

View File

@@ -0,0 +1,456 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the gds-render package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: gds-render\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-12-16 18:27+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=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../main.c:97
#, c-format
msgid ""
"\n"
"\n"
"Full git commit: %s"
msgstr ""
#: ../main.c:294
msgid " FILE - Convert GDS file <FILE> to graphic"
msgstr ""
#: ../resources/about.glade:10
msgid "!! Replaced during runtime !!"
msgstr ""
#: ../command-line.c:205
#, c-format
msgid "%d reference loops found.\n"
msgstr ""
#: ../main.c:220
msgid "About"
msgstr ""
#: ../main.c:290
msgid "Argument string passed to render lib"
msgstr ""
#: ../resources/main.glade:225
msgid "Automatically color layers"
msgstr ""
#: ../resources/main.glade:255
msgid "Automatically name layers"
msgstr ""
#: ../gds-utils/gds-tree-checker.c:71
#, c-format
msgid "Broken cell list item found in cell %s. Will continue.\n"
msgstr ""
#: ../gds-utils/gds-tree-checker.c:57
#, c-format
msgid "Broken cell list item found. Will continue.\n"
msgstr ""
#: ../output-renderers/cairo-renderer.c:409
#, c-format
msgid "Cairo export finished. It might still be buggy!\n"
msgstr ""
#. Execute
#: ../output-renderers/external-renderer.c:120
msgid "Calling external renderer."
msgstr ""
#: ../gds-render-gui.c:286 ../widgets/conv-settings-dialog.c:291
msgid "Cancel"
msgstr ""
#: ../gds-render-gui.c:244
msgid "Cell"
msgstr ""
#: ../command-line.c:209
#, c-format
msgid "Cell is affected by reference loop. Abort!\n"
msgstr ""
#: ../main.c:284
msgid "Cell to render"
msgstr ""
#: ../command-line.c:215
#, c-format
msgid ""
"Cell was not checked. This should not happen. Please report this issue. Will "
"continue either way.\n"
msgstr ""
#: ../command-line.c:202
#, c-format
msgid "Checking library %s failed.\n"
msgstr ""
#: ../resources/dialog.glade:79
msgid "Configure LaTeX as standalone document"
msgstr ""
#: ../resources/main.glade:109
msgid "Convert selected cell"
msgstr ""
#: ../output-renderers/external-renderer.c:89
#, c-format
msgid ""
"Could not load external library '%s'\n"
"Detailed error is:\n"
"%s\n"
msgstr ""
#: ../output-renderers/latex-renderer.c:373
msgid "Could not open LaTeX output file"
msgstr ""
#: ../command-line.c:195
#, 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 ""
#: ../main.c:286
msgid "Create PDF Layers (OCG)"
msgstr ""
#: ../main.c:285
msgid "Create standalone TeX"
msgstr ""
#: ../main.c:280
msgid "Divide output coordinates by <SCALE>"
msgstr ""
#: ../resources/layer-widget.glade:62
msgid "Export Layer"
msgstr ""
#: ../output-renderers/cairo-renderer.c:366
#, c-format
msgid "Exporting layer %d to file\n"
msgstr ""
#: ../output-renderers/external-renderer.c:142
msgid "External renderer finished."
msgstr ""
#. This should not happen
#: ../output-renderers/cairo-renderer.c:271
#, c-format
msgid "Fatal error: Cairo Renderer: Could not spawn child process!"
msgstr ""
#: ../resources/main.glade:50
msgid "GDS-Render"
msgstr ""
#: ../gds-render-gui.c:294
msgid "GDSII-Files"
msgstr ""
#: ../resources/dialog.glade:18
msgid "Generate LaTeX/TikZ output"
msgstr ""
#: ../resources/dialog.glade:93
msgid "Generate PDF Layers"
msgstr ""
#: ../output-renderers/latex-renderer.c:253
#, c-format
msgid "Generating cell %s"
msgstr ""
#: ../resources/about.glade:12
msgid "Git Repository"
msgstr ""
#: ../widgets/conv-settings-dialog.c:246
#, c-format
msgid "Height: %.3lf %sm"
msgstr ""
#: ../main.c:321
#, c-format
msgid "Ignored argument: %s"
msgstr ""
#: ../output-renderers/external-renderer.c:106
#, c-format
msgid ""
"Init function not found in library:\n"
"%s\n"
msgstr ""
#: ../output-renderers/cairo-renderer.c:321
#, c-format
msgid "Layer number too high / outside of spec.\n"
msgstr ""
#: ../output-renderers/cairo-renderer.c:369
#, c-format
msgid "Layer outside of spec.\n"
msgstr ""
#: ../widgets/layer-element.c:102
#, c-format
msgid "Layer: %d"
msgstr ""
#: ../gds-render-gui.c:241
msgid "Library"
msgstr ""
#: ../resources/main.glade:68
msgid "Load Mapping"
msgstr ""
#: ../resources/main.glade:73
msgid "Load the current layer configuration from CSV"
msgstr ""
#: ../main.c:116
#, c-format
msgid "Logo could not be displayed: %s\n"
msgstr ""
#: ../output-renderers/gds-output-renderer.c:293
msgid "No layer specification supplied."
msgstr ""
#: ../command-line.c:186
#, c-format
msgid "No library in library list. This should not happen.\n"
msgstr ""
#: ../output-renderers/gds-output-renderer.c:288
msgid "No/invalid output file set."
msgstr ""
#: ../widgets/conv-settings-dialog.c:291
msgid "OK"
msgstr ""
#: ../resources/main.glade:58
msgid "Open GDS2 Database"
msgstr ""
#: ../gds-render-gui.c:287
msgid "Open GDSII"
msgstr ""
#: ../gds-render-gui.c:284
msgid "Open GDSII File"
msgstr ""
#: ../main.c:299
#, c-format
msgid "Option parsing failed: %s\n"
msgstr ""
#: ../widgets/conv-settings-dialog.c:255
#, c-format
msgid "Output Height: %u px"
msgstr ""
#: ../output-renderers/gds-output-renderer.c:283
msgid "Output Renderer not valid."
msgstr ""
#: ../output-renderers/gds-output-renderer.c:304
msgid "Output Renderer: Rendering function broken. This is a bug."
msgstr ""
#. Set the pixel sizes
#: ../widgets/conv-settings-dialog.c:252
#, c-format
msgid "Output Width: %u px"
msgstr ""
#: ../main.c:282
msgid "Output file path. Can be used multiple times."
msgstr ""
#: ../output-renderers/gds-output-renderer.c:298
msgid "Output renderer called without cell to render."
msgstr ""
#: ../output-renderers/gds-output-renderer.c:74
msgid "Output renderer does not define a render_output function!"
msgstr ""
#: ../main.c:283
msgid "Path for Layer Mapping File"
msgstr ""
#: ../main.c:288
msgid ""
"Path to a custom shared object, that implements the necessary rendering "
"functions"
msgstr ""
#: ../output-renderers/external-renderer.c:78
#, c-format
msgid "Path to shared object not set!\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 ""
#: ../main.c:277
msgid "Print version"
msgstr ""
#: ../command-line.c:160
#, c-format
msgid "Probably missing argument. Check --help option\n"
msgstr ""
#: ../main.c:219
msgid "Quit"
msgstr ""
#: ../widgets/activity-bar.c:104
msgid "Ready"
msgstr ""
#: ../resources/dialog.glade:33
msgid "Render PDF using Cairographics"
msgstr ""
#: ../resources/dialog.glade:48
msgid "Render SVG using Cairographics (too buggy at the moment)"
msgstr ""
#: ../widgets/conv-settings-dialog.c:293
msgid "Renderer Settings"
msgstr ""
#: ../output-renderers/gds-output-renderer.c:365
msgid "Renderer already started asynchronously"
msgstr ""
#: ../main.c:279
msgid "Renderer to use. Can be used multiple times."
msgstr ""
#: ../output-renderers/cairo-renderer.c:467
msgid "Rendering Cairo Output..."
msgstr ""
#: ../gds-render-gui.c:554
msgid "Rendering cell..."
msgstr ""
#: ../output-renderers/external-renderer.c:98
#, c-format
msgid ""
"Rendering function not found in library:\n"
"%s\n"
msgstr ""
#: ../resources/main.glade:86
msgid "Save Mapping"
msgstr ""
#: ../resources/main.glade:23
msgid "Save the current layer configuration to CSV"
msgstr ""
#: ../main.c:312
#, c-format
msgid "Scale < 1 not allowed. Setting to 1\n"
msgstr ""
#: ../resources/layer-widget.glade:51
msgid "Select Layer Color and Opacity"
msgstr ""
#: ../resources/main.glade:240
msgid "Select all layers for export"
msgstr ""
#: ../output-renderers/cairo-renderer.c:331
#, c-format
msgid "Size of layer %d%s%s%s: <%lf x %lf> @ (%lf | %lf)\n"
msgstr ""
#: ../resources/main.glade:195
msgid "Sort layers ascending"
msgstr ""
#: ../resources/main.glade:210
msgid "Sort layers descending"
msgstr ""
#: ../main.c:212
#, c-format
msgid ""
"There is already an open instance. Will open second window in that "
"instance.\n"
msgstr ""
#: ../main.c:244
#, c-format
msgid ""
"This is gds-render, version: %s\n"
"\n"
"For a list of supported commands execute with --help option.\n"
msgstr ""
#: ../gds-utils/gds-tree-checker.c:188
#, c-format
msgid "Visited cell list should be empty. This is a bug. Please report this.\n"
msgstr ""
#: ../widgets/conv-settings-dialog.c:244
#, c-format
msgid "Width: %.3lf %sm"
msgstr ""
#: ../widgets/activity-bar.c:110
msgid "Working..."
msgstr ""
#: ../main.c:96
msgid ""
"gds-render is a free tool for rendering GDS2 layout files into vector "
"graphics."
msgstr ""
#: ../resources/layer-widget.glade:37
msgid "label"
msgstr ""

View File

@@ -1,121 +0,0 @@
# 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 ""

View File

@@ -1 +0,0 @@
*.po~

View File

@@ -1,73 +0,0 @@
# 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"

View File

@@ -1,50 +0,0 @@
# 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"

View File

@@ -0,0 +1,487 @@
# 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 gds-render package.
# マリオ <mario.huettel@gmx.net>, 2019.
#
msgid ""
msgstr ""
"Project-Id-Version: gds-render\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-12-16 18:27+0100\n"
"PO-Revision-Date: 2019-12-16 22:00+0100\n"
"Last-Translator: Mario Hüttel <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"
"X-Generator: Poedit 2.2.4\n"
#: ../main.c:97
#, c-format
msgid ""
"\n"
"\n"
"Full git commit: %s"
msgstr ""
"\n"
"\n"
"Vollständiger git-Commit: %s"
#: ../main.c:294
msgid " FILE - Convert GDS file <FILE> to graphic"
msgstr " DATEI - Konvertiere GDS-Datei <DATEI> in Grafik"
#: ../resources/about.glade:10
msgid "!! Replaced during runtime !!"
msgstr "!! Ersetzt zur Laufzeit !!"
#: ../command-line.c:205
#, c-format
msgid "%d reference loops found.\n"
msgstr "%d Referenzschleifen gefunden.\n"
#: ../main.c:220
msgid "About"
msgstr "Info"
#: ../main.c:290
msgid "Argument string passed to render lib"
msgstr "An Render-Bibliothek übergebener Argument-String"
#: ../resources/main.glade:225
msgid "Automatically color layers"
msgstr "Färbe Layer automatisch"
#: ../resources/main.glade:255
msgid "Automatically name layers"
msgstr "Bename Layer automatisch"
#: ../gds-utils/gds-tree-checker.c:71
#, c-format
msgid "Broken cell list item found in cell %s. Will continue.\n"
msgstr "Defektes Listenelement in Zelle %s. Ignoriere.\n"
#: ../gds-utils/gds-tree-checker.c:57
#, c-format
msgid "Broken cell list item found. Will continue.\n"
msgstr "Defektes Zellenelement in Liste gefunden. Ignoriere.\n"
#: ../output-renderers/cairo-renderer.c:409
#, c-format
msgid "Cairo export finished. It might still be buggy!\n"
msgstr "Cairo-Export abgeschlossen. Möglicherweise fehlerhaft!\n"
#. Execute
#: ../output-renderers/external-renderer.c:120
msgid "Calling external renderer."
msgstr "Rufe externen Renderer auf."
#: ../gds-render-gui.c:286 ../widgets/conv-settings-dialog.c:291
msgid "Cancel"
msgstr "Abbruch"
#: ../gds-render-gui.c:244
msgid "Cell"
msgstr "Zelle"
#: ../command-line.c:209
#, c-format
msgid "Cell is affected by reference loop. Abort!\n"
msgstr "Zelle ist von referenzschleife betroffen. Abbruch!\n"
#: ../main.c:284
msgid "Cell to render"
msgstr "Zu rendernde Zelle"
#: ../command-line.c:215
#, 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 Problem. Es wird dennoch fortgefahren.\n"
#: ../command-line.c:202
#, c-format
msgid "Checking library %s failed.\n"
msgstr "Überprüfung von Bibliothek %s fehlgeschlagen.\n"
#: ../resources/dialog.glade:79
msgid "Configure LaTeX as standalone document"
msgstr "Konfiguriere LaTeX als eigenständiges Dokument"
#: ../resources/main.glade:109
msgid "Convert selected cell"
msgstr "Konvertiere ausgewählte Zelle"
#: ../output-renderers/external-renderer.c:89
#, c-format
msgid ""
"Could not load external library '%s'\n"
"Detailed error is:\n"
"%s\n"
msgstr ""
"Externe Bibliothek '%s' konnte nicht geladen werden.\n"
"Detailierter Fehler:\n"
"%s\n"
#: ../output-renderers/latex-renderer.c:373
msgid "Could not open LaTeX output file"
msgstr "LaTeX-Ausgabedatei konnte nicht geöffnet werden"
#: ../command-line.c:195
#, c-format
msgid "Couldn't find cell in first library!\n"
msgstr "Zelle nicht in erster Bibliothek gefunden!\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 stimmt nicht mit der Anzahl der angegebenen "
"Ausgabedateinamen %d überein\n"
#: ../main.c:286
msgid "Create PDF Layers (OCG)"
msgstr "Generiere PDF-Layer (OCG)"
#: ../main.c:285
msgid "Create standalone TeX"
msgstr "Generiere eingenständiges TeX"
#: ../main.c:280
msgid "Divide output coordinates by <SCALE>"
msgstr "Dividiere Ausgabekoordinaten durch <SCALE>"
#: ../resources/layer-widget.glade:62
msgid "Export Layer"
msgstr "Exportiere Layer"
#: ../output-renderers/cairo-renderer.c:366
#, c-format
msgid "Exporting layer %d to file\n"
msgstr "Exportiere Layer %d in Datei\n"
#: ../output-renderers/external-renderer.c:142
msgid "External renderer finished."
msgstr "Externer Renderer beendet."
#. This should not happen
#: ../output-renderers/cairo-renderer.c:271
#, c-format
msgid "Fatal error: Cairo Renderer: Could not spawn child process!"
msgstr ""
"Fataler Fehler: Cairo Renderer: Sub-Prozess konnte nicht gestartet werden!"
#: ../resources/main.glade:50
msgid "GDS-Render"
msgstr "GDS-Render"
#: ../gds-render-gui.c:294
msgid "GDSII-Files"
msgstr "GDSII-Dateien"
#: ../resources/dialog.glade:18
msgid "Generate LaTeX/TikZ output"
msgstr "Generiere LaTeX/TikZ Ausgabe"
#: ../resources/dialog.glade:93
msgid "Generate PDF Layers"
msgstr "Generiere PDF Layers"
#: ../output-renderers/latex-renderer.c:253
#, c-format
msgid "Generating cell %s"
msgstr "Generiere Zelle %s"
#: ../resources/about.glade:12
msgid "Git Repository"
msgstr "Git Repository"
#: ../widgets/conv-settings-dialog.c:246
#, c-format
msgid "Height: %.3lf %sm"
msgstr "Höhe: %.3lf %sm"
#: ../main.c:321
#, c-format
msgid "Ignored argument: %s"
msgstr "Ignoriertes Argument: %s"
#: ../output-renderers/external-renderer.c:106
#, c-format
msgid ""
"Init function not found in library:\n"
"%s\n"
msgstr ""
"Init-Funktion nicht in Bibliothek gefunden:\n"
"%s\n"
#: ../output-renderers/cairo-renderer.c:321
#, c-format
msgid "Layer number too high / outside of spec.\n"
msgstr "Layer-Nummer zu hoch / Außerhalb der Spezifikation.\n"
#: ../output-renderers/cairo-renderer.c:369
#, c-format
msgid "Layer outside of spec.\n"
msgstr "Layer außerhalb der Spezifikation\n"
#: ../widgets/layer-element.c:102
#, c-format
msgid "Layer: %d"
msgstr "Layer: %d"
#: ../gds-render-gui.c:241
msgid "Library"
msgstr "Bibliothek"
#: ../resources/main.glade:68
msgid "Load Mapping"
msgstr "Zuordnung laden"
#: ../resources/main.glade:73
msgid "Load the current layer configuration from CSV"
msgstr "Lade die aktuelle Layer-Zuordnung aus einer CSV-Datei"
#: ../main.c:116
#, c-format
msgid "Logo could not be displayed: %s\n"
msgstr "Logo konnte nicht angezeigt werden: %s\n"
#: ../output-renderers/gds-output-renderer.c:293
msgid "No layer specification supplied."
msgstr "Keine Layer-Spezifikation angegeben."
#: ../command-line.c:186
#, c-format
msgid "No library in library list. This should not happen.\n"
msgstr "Keine Bibliothek in Bibliotheksliste. Das sollte nicht passieren.\n"
#: ../output-renderers/gds-output-renderer.c:288
msgid "No/invalid output file set."
msgstr "Keine oder invalide Ausgabedatei angegeben."
#: ../widgets/conv-settings-dialog.c:291
msgid "OK"
msgstr "OK"
#: ../resources/main.glade:58
msgid "Open GDS2 Database"
msgstr "Öffne GDS2 Datenbank"
#: ../gds-render-gui.c:287
msgid "Open GDSII"
msgstr "Öffne GDSII"
#: ../gds-render-gui.c:284
msgid "Open GDSII File"
msgstr "Öffne GDSII-Datei"
#: ../main.c:299
#, c-format
msgid "Option parsing failed: %s\n"
msgstr "Optionsverarbeitung fehlgeschlagen: %s\n"
#: ../widgets/conv-settings-dialog.c:255
#, c-format
msgid "Output Height: %u px"
msgstr "Ausgabehöhe: %u px"
#: ../output-renderers/gds-output-renderer.c:283
msgid "Output Renderer not valid."
msgstr "Ausgaberenderer invalide."
#: ../output-renderers/gds-output-renderer.c:304
msgid "Output Renderer: Rendering function broken. This is a bug."
msgstr ""
"Ausgaberenderer: Render-Funktion defekt. Dies ist ein interner "
"Programmfehler."
#. Set the pixel sizes
#: ../widgets/conv-settings-dialog.c:252
#, c-format
msgid "Output Width: %u px"
msgstr "Ausgabebreite: %u px"
#: ../main.c:282
msgid "Output file path. Can be used multiple times."
msgstr "Ausgabepfad. Kann mehrfach angegeben werden."
#: ../output-renderers/gds-output-renderer.c:298
msgid "Output renderer called without cell to render."
msgstr "Ausgaberenderer ohne zu rendernde Zelle aufgerufen."
#: ../output-renderers/gds-output-renderer.c:74
msgid "Output renderer does not define a render_output function!"
msgstr "Ausgaberenderer definiert keine render_output Funktion!"
#: ../main.c:283
msgid "Path for Layer Mapping File"
msgstr "Pfad zur Lagenzuordnungsdatei"
#: ../main.c:288
msgid ""
"Path to a custom shared object, that implements the necessary rendering "
"functions"
msgstr ""
"Pfad zu einem benutzerdefiniertem Shared-Object, welches die notwendigen "
"Funktionen implementiert"
#: ../output-renderers/external-renderer.c:78
#, c-format
msgid "Path to shared object not set!\n"
msgstr "Kein Pfad zu einem Shared-Object gesetzt!\n"
#: ../command-line.c:74
#, c-format
msgid "Please specify renderers and file names\n"
msgstr "Bitte Renderer und Dateinamen angeben.\n"
#: ../command-line.c:104
#, c-format
msgid ""
"Please specify shared object for external renderer. Will ignore this "
"renderer.\n"
msgstr ""
"Bitte Shares-Object für externen Renderer angeben. Dieser Renderer wird "
"ignoriert.\n"
#: ../main.c:277
msgid "Print version"
msgstr "Zeige Versionsnummer"
#: ../command-line.c:160
#, c-format
msgid "Probably missing argument. Check --help option\n"
msgstr "Vermutlich ein fehlendes Argument. Bitte --help überprüfen\n"
#: ../main.c:219
msgid "Quit"
msgstr "Beenden"
#: ../widgets/activity-bar.c:104
msgid "Ready"
msgstr "Bereit"
#: ../resources/dialog.glade:33
msgid "Render PDF using Cairographics"
msgstr "Rendere PDF mit Cairographics"
#: ../resources/dialog.glade:48
msgid "Render SVG using Cairographics (too buggy at the moment)"
msgstr "Rendere SVG mit Cairographics (Experimentell)"
#: ../widgets/conv-settings-dialog.c:293
msgid "Renderer Settings"
msgstr "Renderer Einstellungen"
#: ../output-renderers/gds-output-renderer.c:365
msgid "Renderer already started asynchronously"
msgstr "Renderer wird bereits asynchron ausgeführt"
#: ../main.c:279
msgid "Renderer to use. Can be used multiple times."
msgstr "Zu nutzender Renderer. Kann mehrfach angegeben werden."
#: ../output-renderers/cairo-renderer.c:467
msgid "Rendering Cairo Output..."
msgstr "Rendere Cairo-Ausgabe..."
#: ../gds-render-gui.c:554
msgid "Rendering cell..."
msgstr "Renderere Zelle..."
#: ../output-renderers/external-renderer.c:98
#, c-format
msgid ""
"Rendering function not found in library:\n"
"%s\n"
msgstr ""
"Render Funktion nicht in Bibliothek gefunden:\n"
"%s\n"
#: ../resources/main.glade:86
msgid "Save Mapping"
msgstr "Zuordnung speichern"
#: ../resources/main.glade:23
msgid "Save the current layer configuration to CSV"
msgstr "Die aktuelle Lagenkonfiguration als CSV-Datei speichern"
#: ../main.c:312
#, c-format
msgid "Scale < 1 not allowed. Setting to 1\n"
msgstr "Skaliereung < 1 nicht erlaubt. Setze auf 1\n"
#: ../resources/layer-widget.glade:51
msgid "Select Layer Color and Opacity"
msgstr "Wähle Layer-Farbe und Transparenz"
#: ../resources/main.glade:240
msgid "Select all layers for export"
msgstr "Wähle alle Layer zum Exporieren"
#: ../output-renderers/cairo-renderer.c:331
#, c-format
msgid "Size of layer %d%s%s%s: <%lf x %lf> @ (%lf | %lf)\n"
msgstr "Größe von Layer %d%s%s%s: <%lf x %lf> @ (%lf | %lf)\n"
#: ../resources/main.glade:195
msgid "Sort layers ascending"
msgstr "Sortiere Layer aufsteigend"
#: ../resources/main.glade:210
msgid "Sort layers descending"
msgstr "Sortiere Layer absteigend"
#: ../main.c:212
#, c-format
msgid ""
"There is already an open instance. Will open second window in that "
"instance.\n"
msgstr ""
"Es ist bereits eine Instanz dieses Programms geöffnet. Es wird ein zweites "
"Fenster in jener Instanz geöffnet.\n"
#: ../main.c:244
#, c-format
msgid ""
"This is gds-render, version: %s\n"
"\n"
"For a list of supported commands execute with --help option.\n"
msgstr ""
"Dies ist gds-render, Version: %s\n"
"\n"
"Für eine Liste der unterstützten Kommandos mit der Option --help ausführen.\n"
#: ../gds-utils/gds-tree-checker.c:188
#, c-format
msgid "Visited cell list should be empty. This is a bug. Please report this.\n"
msgstr ""
"Liste markierter Zellen sollte leer sein. Dies ist ein Fehler. Bitte "
"melden.\n"
#: ../widgets/conv-settings-dialog.c:244
#, c-format
msgid "Width: %.3lf %sm"
msgstr "Breite: %.3lf %sm"
#: ../widgets/activity-bar.c:110
msgid "Working..."
msgstr "Arbeite..."
#: ../main.c:96
msgid ""
"gds-render is a free tool for rendering GDS2 layout files into vector "
"graphics."
msgstr ""
"gds-render ist ein freies Programm, um GDS2-Layouts in Vektorgrafiken zu "
"konvertieren."
#: ../resources/layer-widget.glade:37
msgid "label"
msgstr "label"

View File

@@ -1,133 +0,0 @@
# 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."

View File

@@ -1,26 +0,0 @@
# 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..."

View File

@@ -1,26 +0,0 @@
# 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 ""

View File

@@ -17,7 +17,6 @@
* along with GDSII-Converter. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @defgroup version Version Number
* See @ref git-version-num

View File

@@ -99,7 +99,6 @@ ActivityBar *activity_bar_new()
return bar;
}
/* 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"));

View File

@@ -30,6 +30,7 @@
*/
#include <gds-render/widgets/conv-settings-dialog.h>
#include <glib/gi18n.h>
struct _RendererSettingsDialog {
GtkDialog parent;
@@ -102,9 +103,9 @@ static void renderer_settings_dialog_class_init(RendererSettingsDialogClass *kla
oclass->set_property = renderer_settings_dialog_set_property;
oclass->get_property = renderer_settings_dialog_get_property;
properties[PROP_CELL_NAME] = g_param_spec_string("cell-name",
"cell-name",
"Cell name to be displayed in header bar",
properties[PROP_CELL_NAME] = g_param_spec_string(N_("cell-name"),
N_("cell-name"),
N_("Cell name to be displayed in header bar"),
"",
G_PARAM_READWRITE);
g_object_class_install_properties(oclass, PROP_COUNT, properties);
@@ -240,18 +241,18 @@ static void renderer_settings_dialog_update_labels(RendererSettingsDialog *self)
width_engineering = convert_number_to_engineering(width_meters, &width_prefix);
height_engineering = convert_number_to_engineering(height_meters, &height_prefix);
snprintf(default_buff, sizeof(default_buff), "Width: %.3lf %sm", width_engineering, width_prefix);
snprintf(default_buff, sizeof(default_buff), _("Width: %.3lf %sm"), width_engineering, width_prefix);
gtk_label_set_text(self->x_label, default_buff);
snprintf(default_buff, sizeof(default_buff), "Height: %.3lf %sm", height_engineering, height_prefix);
snprintf(default_buff, sizeof(default_buff), _("Height: %.3lf %sm"), height_engineering, height_prefix);
gtk_label_set_text(self->y_label, default_buff);
scale = gtk_range_get_value(GTK_RANGE(self->scale));
/* Set the pixel sizes */
snprintf(default_buff, sizeof(default_buff), "Output Width: %u px",
snprintf(default_buff, sizeof(default_buff), _("Output Width: %u px"),
(unsigned int)((double)self->cell_width / scale));
gtk_label_set_text(self->x_output_label, default_buff);
snprintf(default_buff, sizeof(default_buff), "Output Height: %u px",
snprintf(default_buff, sizeof(default_buff), _("Output Height: %u px"),
(unsigned int)((double)self->cell_height / scale));
gtk_label_set_text(self->y_output_label, default_buff);
}
@@ -287,9 +288,9 @@ static void renderer_settings_dialog_init(RendererSettingsDialog *self)
self->x_output_label = GTK_LABEL(gtk_builder_get_object(builder, "x-output-label"));
self->y_output_label = GTK_LABEL(gtk_builder_get_object(builder, "y-output-label"));
gtk_dialog_add_buttons(dialog, "Cancel", GTK_RESPONSE_CANCEL, "OK", GTK_RESPONSE_OK, NULL);
gtk_dialog_add_buttons(dialog, _("Cancel"), GTK_RESPONSE_CANCEL, _("OK"), GTK_RESPONSE_OK, NULL);
gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(dialog)), box);
gtk_window_set_title(GTK_WINDOW(self), "Renderer Settings");
gtk_window_set_title(GTK_WINDOW(self), _("Renderer Settings"));
g_signal_connect(self->radio_latex, "toggled", G_CALLBACK(latex_render_callback), (gpointer)self);
g_signal_connect(G_OBJECT(self->shape_drawing),

View File

@@ -37,6 +37,7 @@
*/
#include <gds-render/widgets/layer-element.h>
#include <glib/gi18n.h>
G_DEFINE_TYPE(LayerElement, layer_element, GTK_TYPE_LIST_BOX_ROW)
@@ -98,7 +99,7 @@ void layer_element_set_layer(LayerElement *elem, int layer)
GString *string;
string = g_string_new_len(NULL, 100);
g_string_printf(string, "Layer: %d", layer);
g_string_printf(string, _("Layer: %d"), layer);
gtk_label_set_text(elem->priv.layer, (const gchar *)string->str);
elem->priv.layer_num = layer;
g_string_free(string, TRUE);