[consider merging] Adding an option '-of|--format' to strmxor and strmclip to specify the output format instead of taking it from the suffix

This commit is contained in:
Matthias Koefferlein 2026-02-22 15:16:56 +01:00
parent 9f92c4eaa4
commit 7ae87404a0
2 changed files with 46 additions and 0 deletions

View File

@ -98,6 +98,20 @@ const std::string GenericWriterOptions::dxf_format_name = "DXF";
const std::string GenericWriterOptions::cif_format_name = "CIF";
const std::string GenericWriterOptions::mag_format_name = "MAG";
std::vector<std::string>
GenericWriterOptions::all_format_names ()
{
std::vector<std::string> names;
names.push_back (gds2_format_name);
names.push_back (gds2text_format_name);
names.push_back (oasis_format_name);
names.push_back (lstream_format_name);
names.push_back (dxf_format_name);
names.push_back (cif_format_name);
names.push_back (mag_format_name);
return names;
}
void
GenericWriterOptions::add_options (tl::CommandLineOptions &cmd, const std::string &format)
{
@ -109,6 +123,15 @@ GenericWriterOptions::add_options (tl::CommandLineOptions &cmd, const std::strin
"given factor."
);
if (format.empty ()) {
cmd << tl::arg (group +
"-of|--format=format", &m_format, "Specifies the output format",
"By default, the output format is derived from the file name suffix. "
"You can also specify the format directly using this option. Allowed format names are: "
+ tl::join (all_format_names (), ", ")
);
}
if (format.empty () || format == gds2_format_name || format == gds2text_format_name || format == oasis_format_name) {
cmd << tl::arg (group +
"-od|--dbu-out=dbu", &m_dbu, "Uses the specified database unit",
@ -426,6 +449,22 @@ GenericWriterOptions::configure (db::SaveLayoutOptions &save_options, const db::
save_options.set_keep_instances (m_keep_instances);
save_options.set_write_context_info (m_write_context_info);
if (! m_format.empty ()) {
// check, if the format name is a valid one
std::vector<std::string> af = all_format_names ();
auto i = af.begin ();
while (i != af.end () && *i != m_format) {
++i;
}
if (i == af.end ()) {
throw tl::Exception (tl::sprintf (tl::to_string (tr ("Invalid fornat name %s. Allowed names are: %s")), m_format, tl::join (af, ", ")));
}
save_options.set_format (m_format);
}
save_options.set_option_by_name ("gds2_max_vertex_count", m_gds2_max_vertex_count);
save_options.set_option_by_name ("gds2_no_zero_length_paths", m_gds2_no_zero_length_paths);
save_options.set_option_by_name ("gds2_multi_xy_records", m_gds2_multi_xy_records);

View File

@ -26,6 +26,7 @@
#include "bdCommon.h"
#include <string>
#include <vector>
namespace tl
{
@ -60,6 +61,11 @@ public:
*/
GenericWriterOptions (const db::SaveLayoutOptions &options);
/**
* @brief Gets a list with all format names available
*/
static std::vector<std::string> all_format_names ();
/**
* @brief Adds the generic options to the command line parser object
* The format string gives a hint about the target format. Certain options will be
@ -114,6 +120,7 @@ public:
static const std::string mag_format_name;
private:
std::string m_format;
double m_scale_factor;
double m_dbu;
bool m_dont_write_empty_cells;