diff --git a/src/buddies/src/bd/bdReaderOptions.cc b/src/buddies/src/bd/bdReaderOptions.cc index 7f5aaa114..96a90d777 100644 --- a/src/buddies/src/bd/bdReaderOptions.cc +++ b/src/buddies/src/bd/bdReaderOptions.cc @@ -79,11 +79,11 @@ GenericReaderOptions::add_options (tl::CommandLineOptions &cmd) std::string group ("[" + m_group_prefix + " options - GDS2 and OASIS specific]"); cmd << tl::arg (group + - "#!--" + m_long_prefix + "disable-texts", &m_common_reader_options.enable_text_objects, "Skips text objects", + "#!--" + m_long_prefix + "no-texts", &m_common_reader_options.enable_text_objects, "Skips text objects", "With this option set, text objects won't be read." ) << tl::arg (group + - "#!--" + m_long_prefix + "disable-properties", &m_common_reader_options.enable_properties, "Skips properties", + "#!--" + m_long_prefix + "no-properties", &m_common_reader_options.enable_properties, "Skips properties", "With this option set, properties won't be read." ) ; @@ -174,7 +174,7 @@ GenericReaderOptions::add_options (tl::CommandLineOptions &cmd) "#--" + m_long_prefix + "dxf-polyline-mode=mode", &m_dxf_reader_options.polyline_mode, "Specifies how POLYLINE records are handled", "This value specifies how POLYLINE records are handled:\n" "\n" - "* 0: automatic mode\n" + "* 0: automatic mode (default)\n" "* 1: keep lines\n" "* 2: create polygons from closed POLYLINE/LWPOLYLINE with width == 0\n" "* 3: merge all lines (width width 0)\n" diff --git a/src/buddies/unit_tests/bdBasicTests.cc b/src/buddies/unit_tests/bdBasicTests.cc index d2649237a..c2117d1e7 100644 --- a/src/buddies/unit_tests/bdBasicTests.cc +++ b/src/buddies/unit_tests/bdBasicTests.cc @@ -202,3 +202,91 @@ TEST(2) EXPECT_EQ (cells2string (layout, cells), "TOP,B,C,D"); } + +// Testing reader options +TEST(10) +{ + bd::GenericReaderOptions opt; + tl::CommandLineOptions cmd; + + opt.add_options (cmd); + + char *argv[] = { "x", + // CIF and DXF + "-id=0.125", + // CIF + "-iw=1", + // DXF + "-iu=2.5", + "--dxf-circle-accuracy=0.5", + "--dxf-circle-points=1000", + "--dxf-keep-other-cells", + "--dxf-polyline-mode=3", + "--dxf-render-texts-as-polygons", + "--dxf-text-scaling=75", + // GDS2 and OASIS + "--no-properties", + "--no-texts", + // GDS2 + "-ib=3", + "--no-big-records", + "--no-multi-xy-records", + // General + "-im=1/0 3,4/0-255 A:17/0", + "-is", + // OASIS + "--expect-strict-mode=1" + }; + + cmd.parse (sizeof (argv) / sizeof (argv[0]), argv); + + db::LoadLayoutOptions stream_opt; + EXPECT_EQ (tl::to_string (stream_opt.get_options ().dbu), "0.001"); + EXPECT_EQ (stream_opt.get_options ().wire_mode, (unsigned int) 0); + EXPECT_EQ (stream_opt.get_options ().layer_map.to_string (), "layer_map()"); + EXPECT_EQ (stream_opt.get_options ().create_other_layers, true); + EXPECT_EQ (tl::to_string (stream_opt.get_options ().dbu), "0.001"); + EXPECT_EQ (stream_opt.get_options ().layer_map.to_string (), "layer_map()"); + EXPECT_EQ (stream_opt.get_options ().create_other_layers, true); + EXPECT_EQ (stream_opt.get_options ().unit, 1.0); + EXPECT_EQ (tl::to_string (stream_opt.get_options ().circle_accuracy), "0"); + EXPECT_EQ (stream_opt.get_options ().circle_points, 100); + EXPECT_EQ (stream_opt.get_options ().keep_other_cells, false); + EXPECT_EQ (stream_opt.get_options ().polyline_mode, 0); + EXPECT_EQ (stream_opt.get_options ().render_texts_as_polygons, false); + EXPECT_EQ (stream_opt.get_options ().text_scaling, 100); + EXPECT_EQ (stream_opt.get_options ().layer_map.to_string (), "layer_map()"); + EXPECT_EQ (stream_opt.get_options ().create_other_layers, true); + EXPECT_EQ (stream_opt.get_options ().enable_properties, true); + EXPECT_EQ (stream_opt.get_options ().enable_text_objects, true); + EXPECT_EQ (stream_opt.get_options ().box_mode, (unsigned int) 1); + EXPECT_EQ (stream_opt.get_options ().allow_big_records, true); + EXPECT_EQ (stream_opt.get_options ().allow_multi_xy_records, true); + EXPECT_EQ (stream_opt.get_options ().expect_strict_mode, -1); + + opt.configure (stream_opt); + + EXPECT_EQ (tl::to_string (stream_opt.get_options ().dbu), "0.125"); + EXPECT_EQ (stream_opt.get_options ().wire_mode, (unsigned int) 1); + EXPECT_EQ (stream_opt.get_options ().layer_map.to_string (), "layer_map('1/0';'3-4/0-255';'A : 17/0')"); + EXPECT_EQ (stream_opt.get_options ().create_other_layers, false); + EXPECT_EQ (tl::to_string (stream_opt.get_options ().dbu), "0.125"); + EXPECT_EQ (stream_opt.get_options ().layer_map.to_string (), "layer_map('1/0';'3-4/0-255';'A : 17/0')"); + EXPECT_EQ (stream_opt.get_options ().create_other_layers, false); + EXPECT_EQ (stream_opt.get_options ().unit, 2.5); + EXPECT_EQ (tl::to_string (stream_opt.get_options ().circle_accuracy), "0.5"); + EXPECT_EQ (stream_opt.get_options ().circle_points, 1000); + EXPECT_EQ (stream_opt.get_options ().keep_other_cells, true); + EXPECT_EQ (stream_opt.get_options ().polyline_mode, 3); + EXPECT_EQ (stream_opt.get_options ().render_texts_as_polygons, true); + EXPECT_EQ (stream_opt.get_options ().text_scaling, 75); + EXPECT_EQ (stream_opt.get_options ().layer_map.to_string (), "layer_map('1/0';'3-4/0-255';'A : 17/0')"); + EXPECT_EQ (stream_opt.get_options ().create_other_layers, false); + EXPECT_EQ (stream_opt.get_options ().enable_properties, false); + EXPECT_EQ (stream_opt.get_options ().enable_text_objects, false); + EXPECT_EQ (stream_opt.get_options ().box_mode, (unsigned int) 3); + EXPECT_EQ (stream_opt.get_options ().allow_big_records, false); + EXPECT_EQ (stream_opt.get_options ().allow_multi_xy_records, false); + EXPECT_EQ (stream_opt.get_options ().expect_strict_mode, 1); +} + diff --git a/src/db/dbLoadLayoutOptions.h b/src/db/dbLoadLayoutOptions.h index ef0741c0d..9c0fe6f2e 100644 --- a/src/db/dbLoadLayoutOptions.h +++ b/src/db/dbLoadLayoutOptions.h @@ -89,7 +89,7 @@ public: template void set_options (const T &options) { - m_options.insert (std::make_pair (options.format_name (), options.clone ())); + set_options (options.clone ()); } /** @@ -104,7 +104,13 @@ public: template void set_options (T *options) { - m_options.insert (std::make_pair (options->format_name (), options)); + std::map::iterator o = m_options.find (options->format_name ()); + if (o != m_options.end ()) { + delete o->second; + o->second = options; + } else { + m_options.insert (std::make_pair (options->format_name (), options)); + } } /** diff --git a/src/tl/tlCommandLineParser.cc b/src/tl/tlCommandLineParser.cc index 1bd7dcede..b92f68366 100644 --- a/src/tl/tlCommandLineParser.cc +++ b/src/tl/tlCommandLineParser.cc @@ -592,10 +592,10 @@ CommandLineOptions::parse (int argc, char *argv[]) } else { msg += "at argument #" + tl::to_string (i); } - if (! arg->is_option ()) { + if (arg->is_option ()) { msg += " (option " + arg->option_desc () + ")"; } - msg += ":"; + msg += ": "; msg += ex.msg (); throw tl::Exception (msg);