12 Commits

16 changed files with 660 additions and 332 deletions

View File

@@ -155,10 +155,6 @@ int command_line_convert_gds(const char *gds_name,
LayerSettings *layer_sett; LayerSettings *layer_sett;
GdsOutputRenderer *current_renderer; GdsOutputRenderer *current_renderer;
const struct gds_library_parsing_opts gds_parsing_options = {
.simplified_polygons = 1,
};
/* Check if parameters are valid */ /* Check if parameters are valid */
if (!gds_name || !cell_name || !output_file_names || !layer_file || !renderers) { if (!gds_name || !cell_name || !output_file_names || !layer_file || !renderers) {
printf(_("Probably missing argument. Check --help option\n")); printf(_("Probably missing argument. Check --help option\n"));
@@ -177,7 +173,7 @@ int command_line_convert_gds(const char *gds_name,
/* Load GDS */ /* Load GDS */
clear_lib_list(&libs); clear_lib_list(&libs);
res = parse_gds_from_file(gds_name, &libs, &gds_parsing_options); res = parse_gds_from_file(gds_name, &libs);
if (res) if (res)
goto ret_destroy_library_list; goto ret_destroy_library_list;

View File

@@ -2,8 +2,8 @@
@page versioning Version Number @page versioning Version Number
@section main-version Main Versioning Scheme @section main-version Main Versioning Scheme
The version number of this application consists of a given version in the format of 'v1.0'. The version number of this application consists of a given version in the format of 'v1.0.0' (formely only 2 digits).
Where the first number indicates a major release and the second number indicates minor changes. Where the first number indicates a major release and the second and third numbers indicate minor changes.
Versions, including release candidates and patch-levels, are tagged in git. Versions, including release candidates and patch-levels, are tagged in git.
@@ -13,7 +13,7 @@ The 3rd release candidate of version 4.2 would be '*v4.2-rc3*'.
Release candidates are in a frozen state. Only bugfixes that are necessary for functionality are applied to these versions before releasing the final version. Release candidates are in a frozen state. Only bugfixes that are necessary for functionality are applied to these versions before releasing the final version.
@subsection patch-level Patch Levels @subsection patch-level Patch Levels
If an already released version contains bugs that need to be fixed, the version number is not incremented. Insted a new version number with a patch-level is created. The patch-level is appended with a dash directly after the version number. The fist patch-level of version 3.5 would be: 'v3.5-1'. If an already released version contains bugs that need to be fixed, the version number is not incremented. Insted a new version number with a patch-level is created. The patch-level is appended with a dash directly after the version number. The fist patch-level of version 3.5.2 would be: 'v3.5.2-1'.
@section git-version-num Git Based Version Number @section git-version-num Git Based Version Number

View File

@@ -278,10 +278,6 @@ static void on_load_gds(gpointer button, gpointer user)
char *filename; char *filename;
unsigned int cell_error_level; unsigned int cell_error_level;
const struct gds_library_parsing_opts gds_parsing_options = {
.simplified_polygons = 1,
};
self = RENDERER_GUI(user); self = RENDERER_GUI(user);
if (!self) if (!self)
return; return;
@@ -311,7 +307,7 @@ static void on_load_gds(gpointer button, gpointer user)
clear_lib_list(&self->gds_libraries); clear_lib_list(&self->gds_libraries);
/* Parse new GDSII file */ /* Parse new GDSII file */
gds_result = parse_gds_from_file(filename, &self->gds_libraries, &gds_parsing_options); gds_result = parse_gds_from_file(filename, &self->gds_libraries);
/* Delete file name afterwards */ /* Delete file name afterwards */
g_free(filename); g_free(filename);
@@ -695,13 +691,19 @@ static void on_select_all_layers_clicked(GtkWidget *button, gpointer user_data)
layer_selector_select_all_layers(gui->layer_selector, TRUE); layer_selector_select_all_layers(gui->layer_selector, TRUE);
} }
static gboolean auto_naming_ask_for_override(GdsRenderGui *gui) static void auto_naming_clicked(GtkWidget *button, gpointer user_data)
{ {
GdsRenderGui *gui;
GtkDialog *dialog; GtkDialog *dialog;
gint dialog_result; gboolean overwrite;
gboolean overwrite = FALSE; int dialog_result;
(void)button;
g_return_val_if_fail(RENDERER_IS_GUI(gui), FALSE); gui = RENDERER_GUI(user_data);
/* Don't do anything if the selector is empty. */
if (!layer_selector_contains_elements(gui->layer_selector))
return;
/* Ask for overwrite */ /* Ask for overwrite */
dialog = GTK_DIALOG(gtk_message_dialog_new(gui->main_window, GTK_DIALOG_USE_HEADER_BAR, GTK_MESSAGE_QUESTION, dialog = GTK_DIALOG(gtk_message_dialog_new(gui->main_window, GTK_DIALOG_USE_HEADER_BAR, GTK_MESSAGE_QUESTION,
@@ -718,25 +720,6 @@ static gboolean auto_naming_ask_for_override(GdsRenderGui *gui)
} }
gtk_widget_destroy(GTK_WIDGET(dialog)); gtk_widget_destroy(GTK_WIDGET(dialog));
return overwrite;
}
static void auto_naming_clicked(GtkWidget *button, gpointer user_data)
{
GdsRenderGui *gui;
gboolean overwrite = FALSE;
(void)button;
gui = RENDERER_GUI(user_data);
/* Don't do anything if the selector is empty. */
if (!layer_selector_contains_elements(gui->layer_selector))
return;
/* Ask, if names shall be overwritten, if they are not empty */
if (layer_selector_num_of_named_elements(gui->layer_selector) > 0)
overwrite = auto_naming_ask_for_override(gui);
layer_selector_auto_name_layers(gui->layer_selector, overwrite); layer_selector_auto_name_layers(gui->layer_selector, overwrite);
} }

View File

@@ -266,8 +266,7 @@ static uint16_t gds_convert_unsigned_int16(const char *data)
* @param library_ptr Return of newly created library. * @param library_ptr Return of newly created library.
* @return Newly created list pointer * @return Newly created list pointer
*/ */
static GList *append_library(GList *curr_list, const struct gds_library_parsing_opts *opts, static GList *append_library(GList *curr_list, struct gds_library **library_ptr)
struct gds_library **library_ptr)
{ {
struct gds_library *lib; struct gds_library *lib;
@@ -277,8 +276,6 @@ static GList *append_library(GList *curr_list, const struct gds_library_parsing_
lib->name[0] = 0; lib->name[0] = 0;
lib->unit_in_meters = GDS_DEFAULT_UNITS; // Default. Will be overwritten lib->unit_in_meters = GDS_DEFAULT_UNITS; // Default. Will be overwritten
lib->cell_names = NULL; lib->cell_names = NULL;
/* Copy the settings into the library */
memcpy(&lib->parsing_opts, opts, sizeof(struct gds_library_parsing_opts));
} else } else
return NULL; return NULL;
if (library_ptr) if (library_ptr)
@@ -491,102 +488,20 @@ static void parse_reference_list(gpointer gcell_ref, gpointer glibrary)
} }
/** /**
* @brief Simplify graphics objects * @brief Scans cell references inside cell
* @param graphics gfx struct This function searches all the references in \p gcell and updates the gds_cell_instance::cell_ref field in each instance
* @param user_data GDS library
*/
static void simplify_graphics(gpointer graphics, gpointer user_data)
{
struct gds_graphics *gfx;
const struct gds_point *first_vertex = NULL;
const struct gds_point *prev_vertex = NULL;
const struct gds_point *current_vertex;
GList *vertex_iter;
GList *next_iter;
(void)user_data;
size_t processed_count = 0U;
size_t removed_count = 0U;
gfx = (struct gds_graphics *)graphics;
if (gfx->gfx_type == GRAPHIC_POLYGON) {
GDS_INF("\t\t\tPolygon found\n");
/* Loop over all vertices */
for (vertex_iter = gfx->vertices; vertex_iter;) {
current_vertex = (const struct gds_point *)vertex_iter->data;
next_iter = g_list_next(vertex_iter);
processed_count++;
if (vertex_iter == gfx->vertices) {
/* This is the first vertex */
first_vertex = current_vertex;
prev_vertex = NULL;
}
if (prev_vertex) {
if (current_vertex->x == prev_vertex->x && current_vertex->y == prev_vertex->y) {
/* Vertex is the same as the previous one */
GDS_INF("\t\t\t\tDuplicate vertex (%d,%d). Removing...\n",
current_vertex->x, current_vertex->y);
/* Delete the current one from the list */
gfx->vertices = g_list_remove_link(gfx->vertices, vertex_iter);
/* Free the data */
if (vertex_iter->data)
free(vertex_iter->data);
vertex_iter->data = NULL;
g_list_free_1(vertex_iter);
removed_count++;
} else if (!g_list_next(vertex_iter)) {
/* This is the last element in the list */
if (current_vertex->x == first_vertex->x &&
current_vertex->y == first_vertex->y) {
GDS_INF("\t\t\t\tLast vertex is identical to first vertex (%d,%d). Removing\n",
current_vertex->x, current_vertex->y);
gfx->vertices = g_list_remove_link(gfx->vertices, vertex_iter);
if (vertex_iter->data)
free(vertex_iter->data);
g_list_free_1(vertex_iter);
removed_count++;
} else {
GDS_WARN("First vertex is not coincident with first vertex, although the GDS file format specifies this. However, this is not a problem.");
}
}
}
vertex_iter = next_iter;
prev_vertex = current_vertex;
}
GDS_INF("\t\t\tProcessed %zu vertices. %zu removed.\n", processed_count, removed_count);
}
}
/**
* @brief Scans cell and resolves references and simplifies polygons
* This function searches all the references in \p gcell and updates the gds_cell_instance::cell_ref field in each instance
*
* @param gcell pointer cast of #gds_cell * * @param gcell pointer cast of #gds_cell *
* @param library Library where the cell references are searched in * @param library Library where the cell references are searched in
*/ */
static void scan_cell_references_and_polygons(gpointer gcell, gpointer library) static void scan_cell_reference_dependencies(gpointer gcell, gpointer library)
{ {
struct gds_cell *cell = (struct gds_cell *)gcell; struct gds_cell *cell = (struct gds_cell *)gcell;
struct gds_library *my_lib = (struct gds_library *)library;
int simplify_polygons;
simplify_polygons = my_lib->parsing_opts.simplified_polygons;
GDS_INF("\tScanning cell: %s\n", cell->name); GDS_INF("\tScanning cell: %s\n", cell->name);
GDS_INF("\t\tCell references\n");
/* Scan all library references */ /* Scan all library references */
g_list_foreach(cell->child_cells, parse_reference_list, library); g_list_foreach(cell->child_cells, parse_reference_list, library);
GDS_INF("\t\tSimplifying Polygons%s\n", simplify_polygons ? "" : ": skipped");
if (simplify_polygons) {
g_list_foreach(cell->graphic_objs, simplify_graphics, library);
}
} }
/** /**
@@ -602,7 +517,7 @@ static void scan_library_references(gpointer library_list_item, gpointer user)
(void)user; (void)user;
GDS_INF("Scanning Library: %s\n", lib->name); GDS_INF("Scanning Library: %s\n", lib->name);
g_list_foreach(lib->cells, scan_cell_references_and_polygons, lib); g_list_foreach(lib->cells, scan_cell_reference_dependencies, lib);
} }
/** /**
@@ -702,8 +617,7 @@ static void convert_aref_to_sref(struct gds_cell_array_instance *aref, struct gd
GDS_INF("Converted AREF to SREFs\n"); GDS_INF("Converted AREF to SREFs\n");
} }
int parse_gds_from_file(const char *filename, GList **library_list, int parse_gds_from_file(const char *filename, GList **library_list)
const struct gds_library_parsing_opts *parsing_options)
{ {
char *workbuff; char *workbuff;
int read; int read;
@@ -783,7 +697,7 @@ int parse_gds_from_file(const char *filename, GList **library_list,
/* if begin: Allocate structures */ /* if begin: Allocate structures */
switch (rec_type) { switch (rec_type) {
case BGNLIB: case BGNLIB:
lib_list = append_library(lib_list, parsing_options, &current_lib); lib_list = append_library(lib_list, &current_lib);
if (lib_list == NULL) { if (lib_list == NULL) {
GDS_ERROR("Allocating memory failed"); GDS_ERROR("Allocating memory failed");
run = -3; run = -3;
@@ -857,7 +771,7 @@ int parse_gds_from_file(const char *filename, GList **library_list,
run = -4; run = -4;
break; break;
} }
GDS_INF("\tEntering boundary of type %s\n", rec_type==BOUNDARY ? "polygon" : "box"); GDS_INF("\tEntering boundary/Box\n");
break; break;
case SREF: case SREF:
if (current_cell == NULL) { if (current_cell == NULL) {
@@ -892,9 +806,7 @@ int parse_gds_from_file(const char *filename, GList **library_list,
break; break;
case ENDEL: case ENDEL:
if (current_graphics != NULL) { if (current_graphics != NULL) {
GDS_INF("\tLeaving %s\n", (current_graphics->gfx_type == GRAPHIC_POLYGON ? "boundary" GDS_INF("\tLeaving %s\n", (current_graphics->gfx_type == GRAPHIC_POLYGON ? "boundary" : "path"));
: (current_graphics->gfx_type == GRAPHIC_PATH ? "path"
: "box")));
current_graphics = NULL; current_graphics = NULL;
} }
if (current_s_reference != NULL) { if (current_s_reference != NULL) {
@@ -913,11 +825,11 @@ int parse_gds_from_file(const char *filename, GList **library_list,
} else if (current_s_reference) { } else if (current_s_reference) {
if (rec_data_length != 8) { if (rec_data_length != 8) {
GDS_WARN("Instance has weird coordinates. Rendered output might be wrong!"); GDS_WARN("Instance has weird coordinates. Rendered output might be screwed!");
} }
} else if (current_a_reference) { } else if (current_a_reference) {
if (rec_data_length != (3*(4+4))) if (rec_data_length != (3*(4+4)))
GDS_WARN("Array instance has weird coordinates. Rendered output might be wrong!"); GDS_WARN("Array instance has weird coordinates. Rendered output might be screwed!");
} }
break; break;
case AREF: case AREF:

View File

@@ -48,11 +48,9 @@
* *
* @param[in] filename Path to the GDS file * @param[in] filename Path to the GDS file
* @param[in,out] library_array GList Pointer. * @param[in,out] library_array GList Pointer.
* @param[in] parsing_options Parsing options.
* @return 0 if successful * @return 0 if successful
*/ */
int parse_gds_from_file(const char *filename, GList **library_array, int parse_gds_from_file(const char *filename, GList **library_array);
const struct gds_library_parsing_opts *parsing_options);
/** /**
* @brief Deletes all libraries including cells, references etc. * @brief Deletes all libraries including cells, references etc.

View File

@@ -129,13 +129,6 @@ struct gds_cell {
struct gds_cell_checks checks; /**< @brief Checking results */ struct gds_cell_checks checks; /**< @brief Checking results */
}; };
/**
* @brief Options, hwo this liobrary was parsed.
*/
struct gds_library_parsing_opts {
int simplified_polygons; /**< @brief Polygons have been simplified. Coincident end point removed. */
};
/** /**
* @brief GDS Toplevel library * @brief GDS Toplevel library
*/ */
@@ -143,7 +136,6 @@ struct gds_library {
char name[CELL_NAME_MAX]; char name[CELL_NAME_MAX];
struct gds_time_field mod_time; struct gds_time_field mod_time;
struct gds_time_field access_time; struct gds_time_field access_time;
struct gds_library_parsing_opts parsing_opts;
double unit_in_meters; /**< Length of a database unit in meters */ double unit_in_meters; /**< Length of a database unit in meters */
GList *cells; /**< List of #gds_cell that contains all cells in this library*/ GList *cells; /**< List of #gds_cell that contains all cells in this library*/
GList *cell_names /**< List of strings that contains all cell names */; GList *cell_names /**< List of strings that contains all cell names */;

View File

@@ -130,13 +130,6 @@ void layer_selector_auto_name_layers(LayerSelector *layer_selector, gboolean ove
*/ */
gboolean layer_selector_contains_elements(LayerSelector *layer_selector); gboolean layer_selector_contains_elements(LayerSelector *layer_selector);
/**
* @brief Get number of layer elements that are named
* @param[in] layer_selector Layer selector
* @return Number of layers with a name != NULL or != ""
*/
size_t layer_selector_num_of_named_elements(LayerSelector *layer_selector);
G_END_DECLS G_END_DECLS
#endif /* __LAYER_SELECTOR_H__ */ #endif /* __LAYER_SELECTOR_H__ */

View File

@@ -38,7 +38,7 @@ G_DECLARE_FINAL_TYPE(CairoRenderer, cairo_renderer, GDS_RENDER, CAIRO_RENDERER,
#define GDS_RENDER_TYPE_CAIRO_RENDERER (cairo_renderer_get_type()) #define GDS_RENDER_TYPE_CAIRO_RENDERER (cairo_renderer_get_type())
#define MAX_LAYERS (5000) /**< \brief Maximum layer count the output renderer can process. Typically GDS only specifies up to 255 layers.*/ #define MAX_LAYERS (300) /**< \brief Maximum layer count the output renderer can process. Typically GDS only specifies up to 255 layers.*/
/** /**
* @brief Create new CairoRenderer for SVG output * @brief Create new CairoRenderer for SVG output

View File

@@ -822,10 +822,12 @@ void layer_selector_auto_color_layers(LayerSelector *layer_selector, ColorPalett
unsigned int color_count; unsigned int color_count;
GdkRGBA color; GdkRGBA color;
g_return_if_fail(GDS_RENDER_IS_COLOR_PALETTE(palette)); if (GDS_RENDER_IS_COLOR_PALETTE(palette) == FALSE || LAYER_IS_SELECTOR(layer_selector) == FALSE)
g_return_if_fail(LAYER_IS_SELECTOR(layer_selector)); return;
g_return_if_fail(global_alpha > 0); if (global_alpha <= 0)
g_return_if_fail(GTK_IS_LIST_BOX(layer_selector->list_box)); return;
if (GTK_IS_LIST_BOX(layer_selector->list_box) == FALSE)
return;
le_list = gtk_container_get_children(GTK_CONTAINER(layer_selector->list_box)); le_list = gtk_container_get_children(GTK_CONTAINER(layer_selector->list_box));
@@ -896,31 +898,4 @@ gboolean layer_selector_contains_elements(LayerSelector *layer_selector)
return (layer_element_list ? TRUE : FALSE); return (layer_element_list ? TRUE : FALSE);
} }
size_t layer_selector_num_of_named_elements(LayerSelector *layer_selector)
{
GList *le_list;
GList *le_list_ptr;
LayerElement *le;
const char *layer_name;
size_t count = 0U;
g_return_val_if_fail(LAYER_IS_SELECTOR(layer_selector), 0U);
le_list = gtk_container_get_children(GTK_CONTAINER(layer_selector->list_box));
for (le_list_ptr = le_list; le_list_ptr != NULL; le_list_ptr = g_list_next(le_list_ptr)) {
le = LAYER_ELEMENT(le_list_ptr->data);
if (!le)
continue;
layer_name = layer_element_get_name(le);
if (layer_name && *layer_name) {
/* Layer name is not empty. Count it */
count++;
}
}
return count;
}
/** @} */ /** @} */

View File

@@ -371,6 +371,8 @@ 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)) { for (info_list = layer_infos; info_list != NULL; info_list = g_list_next(info_list)) {
linfo = (struct layer_info *)info_list->data; linfo = (struct layer_info *)info_list->data;
dprintf(comm_pipe[1], _("Exporting layer %d to file\n"), linfo->layer);
if (linfo->layer >= MAX_LAYERS) { if (linfo->layer >= MAX_LAYERS) {
printf(_("Layer outside of spec.\n")); printf(_("Layer outside of spec.\n"));
continue; continue;
@@ -379,8 +381,6 @@ static int cairo_renderer_render_cell_to_vector_file(GdsOutputRenderer *renderer
if (!linfo->render) if (!linfo->render)
continue; continue;
dprintf(comm_pipe[1], _("Exporting layer %d to file\n"), linfo->layer);
if (pdf_file && pdf_cr) { if (pdf_file && pdf_cr) {
cairo_set_source_surface(pdf_cr, layers[linfo->layer].rec, -xmin, -ymin); cairo_set_source_surface(pdf_cr, layers[linfo->layer].rec, -xmin, -ymin);
cairo_paint_with_alpha(pdf_cr, linfo->color.alpha); cairo_paint_with_alpha(pdf_cr, linfo->color.alpha);

View File

@@ -370,7 +370,7 @@ static int latex_renderer_render_output(GdsOutputRenderer *renderer,
l_renderer->pdf_layers, l_renderer->tex_standalone, renderer); l_renderer->pdf_layers, l_renderer->tex_standalone, renderer);
fclose(tex_file); fclose(tex_file);
} else { } else {
g_warning(_("Could not open LaTeX output file")); g_error(_("Could not open LaTeX output file"));
} }
if (settings) if (settings)

View File

@@ -1,26 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 --> <!-- Generated with glade 3.22.1 -->
<interface> <interface>
<requires lib="gtk+" version="3.20"/> <requires lib="gtk+" version="3.20"/>
<object class="GtkAdjustment" id="adjustment1"> <object class="GtkAdjustment" id="adjustment1">
<property name="upper">1</property> <property name="upper">1</property>
<property name="value">1</property> <property name="value">1</property>
<property name="step-increment">0.01</property> <property name="step_increment">0.01</property>
<property name="page-increment">0.10</property> <property name="page_increment">0.10000000000000001</property>
</object> </object>
<object class="GtkBox" id="box"> <object class="GtkBox" id="box">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can_focus">False</property>
<property name="spacing">3</property> <property name="spacing">3</property>
<child> <child>
<object class="GtkEventBox" id="event-box"> <object class="GtkEventBox" id="event-box">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can_focus">False</property>
<child> <child>
<object class="GtkImage"> <object class="GtkImage">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can_focus">False</property>
<property name="icon-name">open-menu-symbolic</property> <property name="stock">gtk-justify-fill</property>
</object> </object>
</child> </child>
</object> </object>
@@ -33,7 +33,7 @@
<child> <child>
<object class="GtkLabel" id="layer"> <object class="GtkLabel" id="layer">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can_focus">False</property>
<property name="label" translatable="yes">label</property> <property name="label" translatable="yes">label</property>
</object> </object>
<packing> <packing>
@@ -45,9 +45,9 @@
<child> <child>
<object class="GtkColorButton" id="color"> <object class="GtkColorButton" id="color">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can_focus">True</property>
<property name="receives-default">True</property> <property name="receives_default">True</property>
<property name="use-alpha">True</property> <property name="use_alpha">True</property>
<property name="title" translatable="yes">Select Layer Color and Opacity</property> <property name="title" translatable="yes">Select Layer Color and Opacity</property>
<property name="rgba">rgb(0,0,0)</property> <property name="rgba">rgb(0,0,0)</property>
</object> </object>
@@ -61,9 +61,9 @@
<object class="GtkCheckButton" id="export"> <object class="GtkCheckButton" id="export">
<property name="label" translatable="yes">Export Layer</property> <property name="label" translatable="yes">Export Layer</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can_focus">True</property>
<property name="receives-default">False</property> <property name="receives_default">False</property>
<property name="draw-indicator">True</property> <property name="draw_indicator">True</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@@ -74,7 +74,7 @@
<child> <child>
<object class="GtkEntry" id="entry"> <object class="GtkEntry" id="entry">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can_focus">True</property>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>

View File

@@ -1,57 +1,145 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 --> <!-- Generated with glade 3.22.1 -->
<interface> <interface>
<requires lib="gtk+" version="3.20"/> <requires lib="gtk+" version="3.20"/>
<object class="GtkImage" id="auto-name-img"> <object class="GtkImage" id="auto-name-img">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can_focus">False</property>
<property name="icon-name">format-text-rich-symbolic</property> <property name="stock">gtk-edit</property>
</object> </object>
<object class="GtkImage" id="color-img"> <object class="GtkImage" id="color-img">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can_focus">False</property>
<property name="icon-name">color-select-symbolic</property> <property name="stock">gtk-select-color</property>
</object>
<object class="GtkImage" id="load-mapping-img">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-open</property>
</object>
<object class="GtkImage" id="save-mapping-img">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Save the current layer configuration to CSV</property>
<property name="stock">gtk-save-as</property>
</object> </object>
<object class="GtkImage" id="select-all-img"> <object class="GtkImage" id="select-all-img">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can_focus">False</property>
<property name="icon-name">emblem-ok-symbolic</property> <property name="stock">gtk-apply</property>
</object> </object>
<object class="GtkImage" id="sort-down-img"> <object class="GtkImage" id="sort-down-img">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can_focus">False</property>
<property name="icon-name">view-sort-descending-symbolic</property> <property name="stock">gtk-sort-ascending</property>
</object> </object>
<object class="GtkImage" id="sort-up-img"> <object class="GtkImage" id="sort-up-img">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can_focus">False</property>
<property name="icon-name">view-sort-ascending-symbolic</property> <property name="stock">gtk-sort-descending</property>
</object> </object>
<object class="GtkWindow" id="main-window"> <object class="GtkWindow" id="main-window">
<property name="height-request">250</property> <property name="height_request">250</property>
<property name="can-focus">False</property> <property name="can_focus">False</property>
<property name="icon-name">gds-render</property> <property name="icon_name">gds-render</property>
<child type="titlebar">
<object class="GtkHeaderBar" id="header-bar">
<property name="name">header</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="title" translatable="yes">GDS-Render</property>
<property name="show_close_button">True</property>
<child>
<object class="GtkButton" id="button-load-gds">
<property name="label">gtk-open</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Open GDS2 Database</property>
<property name="use_stock">True</property>
<property name="always_show_image">True</property>
<style>
<class name="suggested-action"/>
</style>
</object>
</child>
<child>
<object class="GtkButton" id="button-load-mapping">
<property name="label" translatable="yes">Load Mapping</property>
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Load the current layer configuration from CSV</property>
<property name="image">load-mapping-img</property>
<property name="always_show_image">True</property>
<style>
<class name="suggested-action"/>
</style>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="button-save-mapping">
<property name="label" translatable="yes">Save Mapping</property>
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="image">save-mapping-img</property>
<property name="always_show_image">True</property>
<style>
<class name="suggested-action"/>
</style>
</object>
<packing>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkButton" id="convert-button">
<property name="label">gtk-convert</property>
<property name="name">button-convert</property>
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Convert selected cell</property>
<property name="use_stock">True</property>
<property name="always_show_image">True</property>
<style>
<class name="suggested-action"/>
</style>
</object>
<packing>
<property name="position">3</property>
</packing>
</child>
</object>
</child>
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can_focus">False</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can_focus">False</property>
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can_focus">False</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<child> <child>
<object class="GtkSearchEntry" id="cell-search"> <object class="GtkSearchEntry" id="cell-search">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can_focus">True</property>
<property name="primary-icon-name">edit-find-symbolic</property> <property name="primary_icon_name">edit-find-symbolic</property>
<property name="primary-icon-activatable">False</property> <property name="primary_icon_activatable">False</property>
<property name="primary-icon-sensitive">False</property> <property name="primary_icon_sensitive">False</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@@ -62,15 +150,15 @@
<child> <child>
<object class="GtkScrolledWindow"> <object class="GtkScrolledWindow">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can_focus">True</property>
<property name="hscrollbar-policy">never</property> <property name="hscrollbar_policy">never</property>
<property name="shadow-type">in</property> <property name="shadow_type">in</property>
<child> <child>
<object class="GtkTreeView" id="cell-tree"> <object class="GtkTreeView" id="cell-tree">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can_focus">True</property>
<property name="enable-search">False</property> <property name="enable_search">False</property>
<property name="enable-grid-lines">both</property> <property name="enable_grid_lines">both</property>
<child internal-child="selection"> <child internal-child="selection">
<object class="GtkTreeSelection"/> <object class="GtkTreeSelection"/>
</child> </child>
@@ -93,20 +181,20 @@
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can_focus">False</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can_focus">False</property>
<child> <child>
<object class="GtkButton" id="button-up-sort"> <object class="GtkButton" id="button-up-sort">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can_focus">True</property>
<property name="receives-default">True</property> <property name="receives_default">True</property>
<property name="tooltip-text" translatable="yes">Sort layers ascending</property> <property name="tooltip_text" translatable="yes">Sort layers ascending</property>
<property name="image">sort-up-img</property> <property name="image">sort-up-img</property>
<property name="always-show-image">True</property> <property name="always_show_image">True</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@@ -117,11 +205,11 @@
<child> <child>
<object class="GtkButton" id="button-down-sort"> <object class="GtkButton" id="button-down-sort">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can_focus">True</property>
<property name="receives-default">True</property> <property name="receives_default">True</property>
<property name="tooltip-text" translatable="yes">Sort layers descending</property> <property name="tooltip_text" translatable="yes">Sort layers descending</property>
<property name="image">sort-down-img</property> <property name="image">sort-down-img</property>
<property name="always-show-image">True</property> <property name="always_show_image">True</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@@ -132,11 +220,11 @@
<child> <child>
<object class="GtkButton" id="auto-color-button"> <object class="GtkButton" id="auto-color-button">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can_focus">True</property>
<property name="receives-default">True</property> <property name="receives_default">True</property>
<property name="tooltip-text" translatable="yes">Automatically color layers</property> <property name="tooltip_text" translatable="yes">Automatically color layers</property>
<property name="image">color-img</property> <property name="image">color-img</property>
<property name="always-show-image">True</property> <property name="always_show_image">True</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@@ -147,11 +235,11 @@
<child> <child>
<object class="GtkButton" id="button-select-all"> <object class="GtkButton" id="button-select-all">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can_focus">True</property>
<property name="receives-default">True</property> <property name="receives_default">True</property>
<property name="tooltip-text" translatable="yes">Select all layers for export</property> <property name="tooltip_text" translatable="yes">Select all layers for export</property>
<property name="image">select-all-img</property> <property name="image">select-all-img</property>
<property name="always-show-image">True</property> <property name="always_show_image">True</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@@ -162,11 +250,11 @@
<child> <child>
<object class="GtkButton" id="button-auto-name"> <object class="GtkButton" id="button-auto-name">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can_focus">True</property>
<property name="receives-default">True</property> <property name="receives_default">True</property>
<property name="tooltip-text" translatable="yes">Automatically name layers</property> <property name="tooltip_text" translatable="yes">Automatically name layers</property>
<property name="image">auto-name-img</property> <property name="image">auto-name-img</property>
<property name="always-show-image">True</property> <property name="always_show_image">True</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@@ -184,19 +272,19 @@
<child> <child>
<object class="GtkScrolledWindow"> <object class="GtkScrolledWindow">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can_focus">True</property>
<property name="margin-top">1</property> <property name="margin_top">1</property>
<property name="hscrollbar-policy">never</property> <property name="hscrollbar_policy">never</property>
<property name="shadow-type">in</property> <property name="shadow_type">in</property>
<child> <child>
<object class="GtkViewport"> <object class="GtkViewport">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can_focus">False</property>
<child> <child>
<object class="GtkListBox" id="layer-list"> <object class="GtkListBox" id="layer-list">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can_focus">False</property>
<property name="selection-mode">none</property> <property name="selection_mode">none</property>
</object> </object>
</child> </child>
</object> </object>
@@ -225,7 +313,7 @@
<child> <child>
<object class="GtkBox" id="activity-bar"> <object class="GtkBox" id="activity-bar">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can_focus">False</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<child> <child>
<placeholder/> <placeholder/>
@@ -239,75 +327,5 @@
</child> </child>
</object> </object>
</child> </child>
<child type="titlebar">
<object class="GtkHeaderBar" id="header-bar">
<property name="name">header</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="title" translatable="yes">GDS-Render</property>
<property name="show-close-button">True</property>
<child>
<object class="GtkButton" id="button-load-gds">
<property name="label">Open GDS</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Open GDS2 Database</property>
<style>
<class name="suggested-action"/>
</style>
</object>
</child>
<child>
<object class="GtkButton" id="button-load-mapping">
<property name="label" translatable="yes">Load Mapping</property>
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Load the current layer configuration from CSV</property>
<style>
<class name="suggested-action"/>
</style>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="button-save-mapping">
<property name="label" translatable="yes">Save Mapping</property>
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<style>
<class name="suggested-action"/>
</style>
</object>
<packing>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkButton" id="convert-button">
<property name="label">Convert Cell</property>
<property name="name">button-convert</property>
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Convert selected cell</property>
<property name="always-show-image">True</property>
<style>
<class name="suggested-action"/>
</style>
</object>
<packing>
<property name="position">3</property>
</packing>
</child>
</object>
</child>
</object> </object>
</interface> </interface>

1
translations/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
*.mo

View File

@@ -1,7 +1,7 @@
# German translations for gds-render package. # German translations for gds-render package.
# Copyright (C) 2019 THE gds-render'S COPYRIGHT HOLDER # Copyright (C) 2019 THE gds-render'S COPYRIGHT HOLDER
# This file is distributed under the same license as the gds-render package. # This file is distributed under the same license as the gds-render package.
# マリオ <mario.huettel@gmx.net>, 2019. # Mario Hüttel <mario.huettel@gmx.net>, 2019.
# #
msgid "" msgid ""
msgstr "" msgstr ""

View File

@@ -0,0 +1,460 @@
# Japanese 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 Hüttel <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: 2020-01-16 22:54+0100\n"
"Last-Translator: Mario Hüttel <mario.huettel@gmx.net>\n"
"Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Poedit 2.2.4\n"
#: ../main.c:97
#, c-format
msgid ""
"\n"
"\n"
"Full git commit: %s"
msgstr ""
"\n"
"\n"
"git コミット: %s"
#: ../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 "%d 参照ループが見つかりました.\n"
#: ../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 "%sのセルで壊れたセルリストアイテムが見つかりました。続けます。\n"
#: ../gds-utils/gds-tree-checker.c:57
#, c-format
msgid "Broken cell list item found. Will continue.\n"
msgstr "壊れたセルリストアイテムが見つかりました。続けます。\n"
#: ../output-renderers/cairo-renderer.c:409
#, c-format
msgid "Cairo export finished. It might still be buggy!\n"
msgstr "Cairoの変換が終了しました.\n"
#. 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 "このセルに参照ループがあります。アボート!\n"
#: ../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 "セルのチェックはしませんでした。これは問題です。\n"
#: ../command-line.c:202
#, c-format
msgid "Checking library %s failed.\n"
msgstr "ライブラリ %s のチェックは失敗しました。\n"
#: ../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 ""