From d0e3a169000923894aa85d53fc5f7d1e3ed40722 Mon Sep 17 00:00:00 2001
From: dgelessus <dgelessus@users.noreply.github.com>
Date: Tue, 18 Feb 2020 15:31:54 +0100
Subject: [PATCH] Fix MACHINE_INFO being recognized as machine instead of an
 expression

---
 notebooks/manual/ExternalFunctions.ipynb      | 35 ++++++++++---------
 .../java/de/prob2/jupyter/ProBKernel.java     |  3 +-
 2 files changed, 21 insertions(+), 17 deletions(-)

diff --git a/notebooks/manual/ExternalFunctions.ipynb b/notebooks/manual/ExternalFunctions.ipynb
index 86e0e88..9030aec 100644
--- a/notebooks/manual/ExternalFunctions.ipynb
+++ b/notebooks/manual/ExternalFunctions.ipynb
@@ -2665,10 +2665,10 @@
     {
      "data": {
       "text/markdown": [
-       "$\\text{\"18/2/2020 - 15h12 40s\"}$"
+       "$\\text{\"18/2/2020 - 15h29 52s\"}$"
       ],
       "text/plain": [
-       "\"18/2/2020 - 15h12 40s\""
+       "\"18/2/2020 - 15h29 52s\""
       ]
      },
      "execution_count": 95,
@@ -2819,10 +2819,10 @@
     {
      "data": {
       "text/markdown": [
-       "$1582035160$"
+       "$1582036192$"
       ],
       "text/plain": [
-       "1582035160"
+       "1582036192"
       ]
      },
      "execution_count": 101,
@@ -2842,10 +2842,10 @@
     {
      "data": {
       "text/markdown": [
-       "$1691$"
+       "$1658$"
       ],
       "text/plain": [
-       "1691"
+       "1658"
       ]
      },
      "execution_count": 102,
@@ -2865,10 +2865,10 @@
     {
      "data": {
       "text/markdown": [
-       "$3040$"
+       "$2881$"
       ],
       "text/plain": [
-       "3040"
+       "2881"
       ]
      },
      "execution_count": 103,
@@ -3298,14 +3298,17 @@
    "metadata": {},
    "outputs": [
     {
-     "ename": "WithSourceCodeException",
-     "evalue": "de.prob.exception.ProBError: ProB returned error messages:\nError: [1,1] expecting: 'generated', 'package', 'DEFINITIONS', 'IMPLEMENTATION', 'MACHINE', 'MODEL', 'SYSTEM', 'REFINEMENT', '#EXPRESSION', '#PREDICATE', '#FORMULA', '#SUBSTITUTION', '#DEFINITION', '#OPPATTERN', '#MACHINECLAUSE' ((machine from Jupyter cell):1:1)",
-     "output_type": "error",
-     "traceback": [
-      "\u001b[1m\u001b[30mError from ProB: \u001b[0m\u001b[1m\u001b[31mnull\u001b[0m",
-      "\u001b[1m\u001b[31mError: [1,1] expecting: 'generated', 'package', 'DEFINITIONS', 'IMPLEMENTATION', 'MACHINE', 'MODEL', 'SYSTEM', 'REFINEMENT', '#EXPRESSION', '#PREDICATE', '#FORMULA', '#SUBSTITUTION', '#DEFINITION', '#OPPATTERN', '#MACHINECLAUSE' ((machine from Jupyter cell):1:1)\u001b[0m",
-      "\u001b[1m\u001b[30mM\u001b[0m\u001b[1m\u001b[30m\u001b[41m\u001b[0m\u001b[1m\u001b[30mACHINE_INFO(\"Jupyter_LibraryMeta\",\"TYPE\")\u001b[0m"
-     ]
+     "data": {
+      "text/markdown": [
+       "$\\text{\"abstract_machine\"}$"
+      ],
+      "text/plain": [
+       "\"abstract_machine\""
+      ]
+     },
+     "execution_count": 120,
+     "metadata": {},
+     "output_type": "execute_result"
     }
    ],
    "source": [
diff --git a/src/main/java/de/prob2/jupyter/ProBKernel.java b/src/main/java/de/prob2/jupyter/ProBKernel.java
index 8ae100f..8d03ab0 100644
--- a/src/main/java/de/prob2/jupyter/ProBKernel.java
+++ b/src/main/java/de/prob2/jupyter/ProBKernel.java
@@ -73,6 +73,7 @@ public final class ProBKernel extends BaseKernel {
 	private static final @NotNull Logger LOGGER = LoggerFactory.getLogger(ProBKernel.class);
 	
 	private static final @NotNull Pattern COMMAND_PATTERN = Pattern.compile("\\s*(\\:[^\\s]*)(?:\\h*(.*))?", Pattern.DOTALL);
+	private static final @NotNull Pattern MACHINE_CODE_PATTERN = Pattern.compile("MACHINE\\W.*");
 	private static final @NotNull Pattern SPACE_PATTERN = Pattern.compile("\\s*");
 	private static final @NotNull Pattern BSYMB_COMMAND_PATTERN = Pattern.compile("\\\\([a-z]+)");
 	private static final @NotNull Pattern LATEX_FORMULA_PATTERN = Pattern.compile("(\\$\\$?)([^\\$]+)\\1");
@@ -285,7 +286,7 @@ public final class ProBKernel extends BaseKernel {
 	}
 	
 	private static boolean isMachineCode(final @NotNull String code) {
-		return code.startsWith("MACHINE");
+		return MACHINE_CODE_PATTERN.matcher(code).matches();
 	}
 	
 	@Override
-- 
GitLab