]> granicus.if.org Git - graphviz/commitdiff
tests: SvgAnalyzer: add storage of the Graphviz graph ID also on 'svg' element
authorMagnus Jacobsson <Magnus.Jacobsson@berotec.se>
Fri, 29 Jul 2022 13:55:27 +0000 (15:55 +0200)
committerMagnus Jacobsson <Magnus.Jacobsson@berotec.se>
Tue, 16 Aug 2022 10:21:45 +0000 (12:21 +0200)
tests/svg_analyzer.cpp
tests/svg_analyzer.h

index 67b1d8fee9874b7b27bd2580b83da865f09c5207..239ea91ff55aaac008998159b8e0d41ecb1a3b06 100644 (file)
@@ -69,6 +69,19 @@ void SVGAnalyzer::on_enter_element_title() {
 
 void SVGAnalyzer::on_exit_element() { m_elements_in_process.pop_back(); }
 
+SVG::SVGElement &SVGAnalyzer::grandparent_element() {
+  if (m_elements_in_process.empty()) {
+    throw std::runtime_error{"No current element to get grandparent of"};
+  }
+  if (m_elements_in_process.size() == 1) {
+    throw std::runtime_error{"No parent element"};
+  }
+  if (m_elements_in_process.size() == 2) {
+    throw std::runtime_error{"No grandparent element"};
+  }
+  return *m_elements_in_process.end()[-3];
+}
+
 SVG::SVGElement &SVGAnalyzer::parent_element() {
   if (m_elements_in_process.empty()) {
     throw std::runtime_error{"No current element to get parent of"};
@@ -110,6 +123,11 @@ void SVGAnalyzer::set_text(std::string_view text) {
       throw std::runtime_error{"Unexpected parent element of 'title' element"};
     }
     parent_element().graphviz_id = text;
+    // If the 'g' element corresponds to the graph, set the Graphviz ID also on
+    // the top level 'svg' element.
+    if (grandparent_element().type == SVG::SVGElementType::Svg) {
+      grandparent_element().graphviz_id = text;
+    }
   }
 }
 
index b788ced9915eff11ec8b87ff10e769f6853be918..6a005876ccc5d7c05d1507380f392f6fb1d10cf9 100644 (file)
@@ -49,6 +49,9 @@ private:
   /// Enter a new SVG element retrieved by the SVG document traverser into the
   /// list of elements currently being processed
   void enter_element(SVG::SVGElementType type);
+  /// Get the grandparent element of the current element being processed by the
+  /// SVG document traverser
+  SVG::SVGElement &grandparent_element();
   /// Get the parent element of the current element being processed by the SVG
   /// document traverser
   SVG::SVGElement &parent_element();