diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/code/IpnbCodePanel.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/code/IpnbCodePanel.java index 6c0296bdb664..075d69756c07 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/code/IpnbCodePanel.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/code/IpnbCodePanel.java @@ -142,7 +142,7 @@ public class IpnbCodePanel extends IpnbEditablePanel { outputPanel.setBackground(IpnbEditorUtil.getBackground()); for (IpnbOutputCell outputCell : myCell.getCellOutputs()) { - addOutputPanel(outputPanel, outputCell, true); + addOutputPanel(outputPanel, outputCell, outputCell instanceof IpnbOutOutputCell); } return outputPanel; diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/format/IpnbParser.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/format/IpnbParser.java index dc2ebcf61ae2..468a65a906a7 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/format/IpnbParser.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/format/IpnbParser.java @@ -353,7 +353,12 @@ public class IpnbParser { if (nbformat == 4) { final OutputDataRaw dataRaw = new OutputDataRaw(); dataRaw.text = outputCell.getText(); - dataRaw.latex = ((IpnbLatexOutputCell)outputCell).getLatex(); + if (((IpnbLatexOutputCell)outputCell).isMarkdown()) { + dataRaw.markdown = ((IpnbLatexOutputCell)outputCell).getLatex(); + } + else { + dataRaw.latex = ((IpnbLatexOutputCell)outputCell).getLatex(); + } raw.data = dataRaw; raw.execution_count = outputCell.getPromptNumber(); raw.output_type = "execute_result"; @@ -430,7 +435,10 @@ public class IpnbParser { outputCell = new IpnbHtmlOutputCell(html == null ? data.html : html, text, prompt, metadata); } else if (latex != null || (data != null && data.latex != null)) { - outputCell = new IpnbLatexOutputCell(latex == null ? data.latex : latex, prompt, text, metadata); + outputCell = new IpnbLatexOutputCell(latex == null ? data.latex : latex, false, prompt, text, metadata); + } + else if (data != null && data.markdown != null) { + outputCell = new IpnbLatexOutputCell(data.markdown, true, prompt, text, metadata); } else if (stream != null || name != null) { outputCell = new IpnbStreamOutputCell(stream == null ? name : stream, text, prompt, metadata); @@ -461,6 +469,7 @@ public class IpnbParser { @SerializedName("image/jpeg") List jpeg; @SerializedName("text/latex") List latex; @SerializedName("text/plain") List text; + @SerializedName("text/markdown") List markdown; } static class RawCellAdapter implements JsonSerializer { @@ -591,6 +600,7 @@ public class IpnbParser { dataRaw.svg = getStringOrArray("image/svg+xml", object); dataRaw.jpeg = getStringOrArray("image/jpeg", object); dataRaw.latex = getStringOrArray("text/latex", object); + dataRaw.markdown = getStringOrArray("text/markdown", object); dataRaw.text = getStringOrArray("text/plain", object); return dataRaw; } @@ -770,6 +780,10 @@ public class IpnbParser { final JsonElement latex = gson.toJsonTree(cellRaw.latex); jsonObject.add("text/latex", latex); } + if (cellRaw.markdown != null) { + final JsonElement markdown = gson.toJsonTree(cellRaw.markdown); + jsonObject.add("text/markdown", markdown); + } if (cellRaw.text != null) { final JsonElement text = gson.toJsonTree(cellRaw.text); jsonObject.add("text/plain", text); diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/format/cells/output/IpnbLatexOutputCell.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/format/cells/output/IpnbLatexOutputCell.java index a228ac83e260..a51f64cd2426 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/format/cells/output/IpnbLatexOutputCell.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/format/cells/output/IpnbLatexOutputCell.java @@ -8,17 +8,21 @@ import java.util.Map; public class IpnbLatexOutputCell extends IpnbOutputCell { @NotNull private final List myLatex; + private final boolean isMarkdown; - public IpnbLatexOutputCell(@NotNull final List latex, - Integer promptNumber, - @NotNull final List text, - @Nullable Map metadata) { + public IpnbLatexOutputCell(@NotNull final List latex, final boolean markdown, Integer promptNumber, + @NotNull final List text, @Nullable Map metadata) { super(text, promptNumber, metadata); myLatex = latex; + isMarkdown = markdown; } @NotNull public List getLatex() { return myLatex; } + + public boolean isMarkdown() { + return isMarkdown; + } } diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/protocol/IpnbConnection.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/protocol/IpnbConnection.java index 1bd3803e1ab4..0d34ddab4baa 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/protocol/IpnbConnection.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/protocol/IpnbConnection.java @@ -300,7 +300,11 @@ public class IpnbConnection { final String plainText = (String)data.get("text/plain"); if (data.containsKey("text/latex")) { final String text = (String)data.get("text/latex"); - myOutput = new IpnbLatexOutputCell(Lists.newArrayList(text), null, Lists.newArrayList(plainText), null); + myOutput = new IpnbLatexOutputCell(Lists.newArrayList(text), false, null, Lists.newArrayList(plainText), null); + } + else if (data.containsKey("text/markdown")) { + final String text = (String)data.get("text/markdown"); + myOutput = new IpnbLatexOutputCell(Lists.newArrayList(text), true, null, Lists.newArrayList(plainText), null); } else if (data.containsKey("text/html")) { final String html = (String)data.get("text/html");