From 4ca5be551d29aaffe09ac554183f2a98c6571370 Mon Sep 17 00:00:00 2001
From: stepan <stepan.sindelar@oracle.com>
Date: Tue, 2 May 2017 15:27:47 +0200
Subject: [PATCH] Fix: append </svg> when generating SVG string

---
 .../r/library/fastrGrid/device/SVGDevice.java   | 17 +++++++++++------
 .../r/library/fastrGrid/grDevices/DevOff.java   |  2 +-
 2 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/device/SVGDevice.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/device/SVGDevice.java
index 063847725f..baad5ebe41 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/device/SVGDevice.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/device/SVGDevice.java
@@ -53,7 +53,8 @@ public class SVGDevice implements GridDevice {
         this.height = height;
     }
 
-    public String getContents() {
+    public String closeAndGetContents() {
+        closeSVGDocument();
         return data.toString();
     }
 
@@ -73,11 +74,7 @@ public class SVGDevice implements GridDevice {
 
     @Override
     public void close() throws DeviceCloseException {
-        if (cachedCtx != null) {
-            // see #appendStyle
-            append("</g>");
-        }
-        append("</svg>");
+        closeSVGDocument();
         try {
             Files.write(Paths.get(filename), Collections.singleton(data.toString()), StandardCharsets.UTF_8);
         } catch (IOException e) {
@@ -176,6 +173,14 @@ public class SVGDevice implements GridDevice {
         data.append("' ").append(attributes).append(" />");
     }
 
+    private void closeSVGDocument() {
+        if (cachedCtx != null) {
+            // see #appendStyle
+            append("</g>");
+        }
+        append("</svg>");
+    }
+
     private void appendStyle(DrawingContext ctx) {
         if (cachedCtx == null || !DrawingContext.areSame(cachedCtx, ctx)) {
             if (cachedCtx != null) {
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/grDevices/DevOff.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/grDevices/DevOff.java
index 87f99d3561..8dc3209f96 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/grDevices/DevOff.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/grDevices/DevOff.java
@@ -70,7 +70,7 @@ public abstract class DevOff extends RExternalBuiltinNode.Arg1 {
         GridDevice dev = ctx.getDevice(which);
         ctx.removeDevice(which);
         if ((dev instanceof SVGDevice)) {
-            return ((SVGDevice) dev).getContents();
+            return ((SVGDevice) dev).closeAndGetContents();
         } else {
             warning(Message.GENERIC, "The device was not SVG device.");
             return "";
-- 
GitLab