diff --git a/src/drc/drc/built-in-macros/_drc_layer.rb b/src/drc/drc/built-in-macros/_drc_layer.rb index 211fc45fa..bebaa7dae 100644 --- a/src/drc/drc/built-in-macros/_drc_layer.rb +++ b/src/drc/drc/built-in-macros/_drc_layer.rb @@ -669,20 +669,22 @@ CODE if @data.is_a?(RBA::Texts) if as_pattern - DRCLayer::new(@engine, @engine._tcmd(@data, 0, RBA::Texts, :with_match, pattern, invert)) + result = @engine._tcmd(@data, 0, RBA::Texts, :with_match, pattern, invert) else - DRCLayer::new(@engine, @engine._tcmd(@data, 0, RBA::Texts, :with_text, pattern, invert)) + result = @engine._tcmd(@data, 0, RBA::Texts, :with_text, pattern, invert) end if as_dots - DRCLayer::new(@engine, @engine._tcmd(@data, 0, RBA::Region, :edges)) + return DRCLayer::new(@engine, @engine._tcmd(result, 0, RBA::Region, :edges)) elsif as_dots == false - DRCLayer::new(@engine, @engine._tcmd(@data, 0, RBA::Region, :polygons)) + return DRCLayer::new(@engine, @engine._tcmd(result, 0, RBA::Region, :polygons)) + else + return DRCLayer::new(@engine, result) end else if as_dots - DRCLayer::new(@engine, @engine._tcmd(@data, 0, RBA::Region, :texts_dots, pattern, as_pattern)) + return DRCLayer::new(@engine, @engine._tcmd(@data, 0, RBA::Region, :texts_dots, pattern, as_pattern)) else - DRCLayer::new(@engine, @engine._tcmd(@data, 0, RBA::Region, :texts, pattern, as_pattern)) + return DRCLayer::new(@engine, @engine._tcmd(@data, 0, RBA::Region, :texts, pattern, as_pattern)) end end @@ -3080,6 +3082,10 @@ CODE @data.is_a?(RBA::Region) || @data.is_a?(RBA::Texts) || raise("#{f}: Requires a polygon or text layer") end + def requires_texts(f) + @data.is_a?(RBA::Texts) || raise("#{f}: Requires a text layer") + end + def requires_edge_pairs(f) @data.is_a?(RBA::EdgePairs) || raise("#{f}: Requires a edge pair layer") end diff --git a/testdata/drc/drcSimpleTests_8.drc b/testdata/drc/drcSimpleTests_8.drc index faab090a9..9e24350e0 100644 --- a/testdata/drc/drcSimpleTests_8.drc +++ b/testdata/drc/drcSimpleTests_8.drc @@ -1,17 +1,21 @@ -# Hierarchical antenna check +# Text handling - mixed mode and pure texts source($drc_test_source, "TOP") target($drc_test_target) # Flat mode -flat_labels = labels(1, 0) +flat_labels = input(1, 1) # mixed mode, labels only +flat_texts = labels(1, 0) # text objects flat_all = input(1, 0) flat_poly = polygons(1, 0) flat_texts_from_labels1 = flat_labels.texts(text("XYZ")) flat_texts_from_labels2 = flat_labels.texts("*") +flat_texts_from_texts1 = flat_texts.texts(text("XYZ")) +flat_texts_from_texts2 = flat_texts.texts("*") +flat_texts_from_texts3 = flat_texts.texts_not("U*") flat_texts_from_all1 = flat_all.texts(text("XYZ")) flat_texts_from_all2 = flat_all.texts("*") flat_texts_from_poly1 = flat_poly.texts(text("XYZ")) @@ -20,23 +24,31 @@ flat_texts_from_poly2 = flat_poly.texts("*") flat_labels.output(100, 0) flat_all.output(101, 0) flat_poly.output(102, 0) +flat_texts.output(103, 0) flat_texts_from_labels1.output(110, 0) flat_texts_from_labels2.output(111, 0) flat_texts_from_all1.output(112, 0) flat_texts_from_all2.output(113, 0) flat_texts_from_poly1.output(114, 0) flat_texts_from_poly2.output(115, 0) +flat_texts_from_texts1.output(116, 0) +flat_texts_from_texts2.output(117, 0) +flat_texts_from_texts3.output(118, 0) # Deep mode deep -deep_labels = labels(1, 0) +deep_labels = input(1, 1) # mixed mode, labels only +deep_texts = labels(1, 1) # text objects deep_all = input(1, 0) deep_poly = polygons(1, 0) deep_texts_from_labels1 = deep_labels.texts(text("XYZ")) deep_texts_from_labels2 = deep_labels.texts("*") +deep_texts_from_texts1 = deep_texts.texts(text("XYZ")) +deep_texts_from_texts2 = deep_texts.texts("*") +deep_texts_from_texts3 = deep_texts.texts_not("U*") deep_texts_from_all1 = deep_all.texts(text("XYZ")) deep_texts_from_all2 = deep_all.texts("*") deep_texts_from_poly1 = deep_poly.texts(text("XYZ")) @@ -45,10 +57,14 @@ deep_texts_from_poly2 = deep_poly.texts("*") deep_labels.output(200, 0) deep_all.output(201, 0) deep_poly.output(202, 0) +deep_texts.output(203, 0) deep_texts_from_labels1.output(210, 0) deep_texts_from_labels2.output(211, 0) deep_texts_from_all1.output(212, 0) deep_texts_from_all2.output(213, 0) deep_texts_from_poly1.output(214, 0) deep_texts_from_poly2.output(215, 0) +deep_texts_from_texts1.output(216, 0) +deep_texts_from_texts2.output(217, 0) +deep_texts_from_texts3.output(218, 0) diff --git a/testdata/drc/drcSimpleTests_au8.gds b/testdata/drc/drcSimpleTests_au8.gds index 86825b3c5..92a97ed8a 100644 Binary files a/testdata/drc/drcSimpleTests_au8.gds and b/testdata/drc/drcSimpleTests_au8.gds differ diff --git a/testdata/drc/texts.gds b/testdata/drc/texts.gds index 241b8f894..3296de656 100644 Binary files a/testdata/drc/texts.gds and b/testdata/drc/texts.gds differ