How can I use the Input as a string, without checking by the kernel
- To: mathgroup at smc.vnet.net
- Subject: [mg43830] How can I use the Input as a string, without checking by the kernel
- From: Sirko Straube <straube at biologie.uni-freiburg.de>
- Date: Wed, 8 Oct 2003 04:47:43 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Hi, I have a problem with mathematica (I am using 4.2) and the technical support could not help me (after months of mailing), although I want to do something, that should be rather simple. Maybe someone of you knows a solution to this problem. An example notebook is attached. I have a function (called SLI), that needs a string as Input. In the example notebook you have not the original function SLI. Everything one has to know is that the original function SLI is fixed. To make it clear it calls a function outside of mathematica and it needs the given command as a string !! To explain a bit more what I'am trying to do: Usually you would type in SLI["1+2-4"] in a notebook and the command "1+2-4" would be executed in SLI. This works so far. What I try now is, that I create a cell type "SLI Input" and whenever this cell type is evaluated, the system (specified by my functions) should evaluate SLI["<command>"] . Therefore I need the given command as the exact string. Together with the Mathematica-Support we managed to make this work, except of the error that you get, if you try to evaluate symbols like ==. The kernel looks at the Input and gives an error. The assumption for integrating SLI is in my opinion, that the kernel does not look at the input and judges wether it is correct. At the moment the only thing to deal with that, is to write SLI["=="] to a usual input cell... Before you try to evaluate the notebook you have to create a cell type named SLI Input in your Style Sheet and set DefaultFormatType->InputForm Can someone help me ?? Sincerely, Sirko Straube filename="example_mathgroup.nb" (************** Content-type: application/mathematica ************** CreatedBy='Mathematica 4.2' Mathematica-Compatible Notebook This notebook can be used with any Mathematica-compatible application, such as Mathematica, MathReader or Publicon. The data for the notebook starts with the line containing stars above. To get the notebook into a Mathematica-compatible application, do one of the following: * Save the data starting with the line of stars above into a file with a name ending in .nb, then open the file inside the application; * Copy the data starting with the line of stars above to the clipboard, then use the Paste menu command inside the application. Data for notebooks contains only printable 7-bit ASCII and can be sent directly in email or through ftp in text mode. Newlines can be CR, LF or CRLF (Unix, Macintosh or MS-DOS style). NOTE: If you modify the data for this notebook not in a Mathematica- compatible application, you must delete the line below containing the word CacheID, otherwise Mathematica-compatible applications may try to use invalid cache data. For more information on notebooks and Mathematica-compatible applications, contact Wolfram Research: web: http://www.wolfram.com email: info at wolfram.com phone: +1-217-398-0700 (U.S.) Notebook reader applications are available free of charge from Wolfram Research. *******************************************************************) (*CacheID: 232*) (*NotebookFileLineBreakTest NotebookFileLineBreakTest*) (*NotebookOptionsPosition[ 5094, 188]*) (*NotebookOutlinePosition[ 5753, 211]*) (* CellTagsIndexPosition[ 5709, 207]*) (*WindowFrame->Normal*) Notebook[{ Cell["\<\ First of all the example function SLI, which does nothing else, then taking \ the String and printing it out. The original SLI function is much more \ complicated. Therefore this function is fixed. It cannot change its Input \ type.\ \>", "Text"], Cell["\<\ SLI[x_String]:= Module[{},CellPrint[Cell[\"Executing SLI command: \ \"<>x,Background\[Rule]RGBColor[0,0,1]]]; ];\ \>", "Input"], Cell["\<\ The following functions take the evaluated Input and check if it is evaluated \ from a SLI Input cell (defined in your Style Sheet : you can copy/paste the \ normal Input cell type definition, change the name to \"SLI Input\" and set \ DefaultFormatType\[Rule]InputForm).\ \>", "Text"], Cell["\<\ GetCellTypeOfThisCell[]:= Block[{cellExpr,nb=EvaluationNotebook[]}, SelectionMove[nb,All,EvaluationCell]; cellExpr=NotebookRead[nb]; SelectionMove[nb,After,EvaluationCell]; If[Length[cellExpr]>1,cellExpr[[2]],\"\"]]; ClearAll[CheckIfSLICommand] Attributes[CheckIfSLICommand] = {HoldAllComplete};\ \>", "Input"], Cell["\<\ CheckIfSLICommand[x_] := If[ (StringLength[x]\[NotEqual]0)&&(GetCellTypeOfThisCell[]\[Equal] \"SLI \ Input\"), \"SLI[\"<>ToString[Unevaluated[x], FormatType -> InputForm]<>\"]\", x ]; \ \>", "Input"], Cell["Finally this is written into $PreRead.", "Text"], Cell[BoxData[ \(\($PreRead = CheckIfSLICommand;\)\)], "Input"], Cell["If you evaluate", "Text"], Cell[BoxData[ \(SLI["\<1+2\>"]\)], "Input"], Cell["Executing SLI command: 1+2", GeneratedCell->True, CellAutoOverwrite->True, Background->RGBColor[0, 0, 1]], Cell["\<\ the result should be a blue box with << Executing SLI command:1+2>>. This is \ what SLI does.\ \>", "Text"], Cell[CellGroupData[{ Cell["Tests", "Section"], Cell["\<\ Now here are some tests. Every input cell should be of the type \"SLI \ Input\".\ \>", "Text"], Cell["1 + 2", "SLI Input"], Cell["Executing SLI command: 1 + 2", GeneratedCell->True, CellAutoOverwrite->True, Background->RGBColor[0, 0, 1]], Cell["1/2+\"hello\" abc", "SLI Input"], Cell["Executing SLI command: 1/2+\"hello\" abc", GeneratedCell->True, CellAutoOverwrite->True, Background->RGBColor[0, 0, 1]], Cell["1+2 \"h\\\"el\\\"lo\"abc-4", "SLI Input"], Cell["Executing SLI command: 1+2 \"h\\\"el\\\"lo\"abc-4", GeneratedCell->True, CellAutoOverwrite->True, Background->RGBColor[0, 0, 1]], Cell["1+2-4", "SLI Input"], Cell["Executing SLI command: 1+2-4", GeneratedCell->True, CellAutoOverwrite->True, Background->RGBColor[0, 0, 1]], Cell["\<\ So far this should work. The following commands result in errors. This should \ not be, because we tried to prevent the kernel from looking at the Input.\ \>", "Text"], Cell[CellGroupData[{ Cell["1 2 add ==", "SLI Input"], Cell["Syntax::sntxpi: Incomplete expression in result of $PreRead.", "Message"] }, Open ]], Cell[CellGroupData[{ Cell["==", "SLI Input"], Cell["Syntax::sntxpi: Incomplete expression in result of $PreRead.", "Message"] }, Open ]], Cell["\<\ At the moment the only thing to execute such a command is in the following \ way:\ \>", "Text"], Cell[BoxData[ \(SLI["\<==\>"]\)], "Input"], Cell["Executing SLI command: ==", GeneratedCell->True, CellAutoOverwrite->True, Background->RGBColor[0, 0, 1]], Cell["Can you help ??", "Text"] }, Open ]] }, FrontEndVersion->"4.2 for X", ScreenRectangle->{{0, 1280}, {0, 1024}}, WindowSize->{1049, 930}, WindowMargins->{{0, Automatic}, {Automatic, 6}}, StyleDefinitions -> "SLI.nb" ] (******************************************************************* Cached data follows. If you edit this Notebook file directly, not using Mathematica, you must remove the line containing CacheID at the top of the file. The cache data will then be recreated when you save this file from within Mathematica. *******************************************************************) (*CellTagsOutline CellTagsIndex->{} *) (*CellTagsIndex CellTagsIndex->{} *) (*NotebookFileOutline Notebook[{ Cell[1754, 51, 256, 5, 60, "Text"], Cell[2013, 58, 137, 4, 54, "Input"], Cell[2153, 64, 295, 5, 60, "Text"], Cell[2451, 71, 351, 12, 243, "Input"], Cell[2805, 85, 214, 9, 159, "Input"], Cell[3022, 96, 54, 0, 37, "Text"], Cell[3079, 98, 66, 1, 33, "Input"], Cell[3148, 101, 31, 0, 37, "Text"], Cell[3182, 103, 47, 1, 33, "Input"], Cell[3232, 106, 117, 3, 45, InheritFromParent], Cell[3352, 111, 118, 3, 37, "Text"], Cell[CellGroupData[{ Cell[3495, 118, 24, 0, 60, "Section"], Cell[3522, 120, 104, 3, 37, "Text"], Cell[3629, 125, 26, 0, 49, "SLI Input"], Cell[3658, 127, 119, 3, 45, InheritFromParent], Cell[3780, 132, 38, 0, 49, "SLI Input"], Cell[3821, 134, 131, 3, 45, InheritFromParent], Cell[3955, 139, 47, 0, 49, "SLI Input"], Cell[4005, 141, 140, 3, 45, InheritFromParent], Cell[4148, 146, 26, 0, 49, "SLI Input"], Cell[4177, 148, 119, 3, 45, InheritFromParent], Cell[4299, 153, 177, 3, 60, "Text"], Cell[CellGroupData[{ Cell[4501, 160, 31, 0, 49, "SLI Input"], Cell[4535, 162, 79, 0, 23, "Message"] }, Open ]], Cell[CellGroupData[{ Cell[4651, 167, 23, 0, 49, "SLI Input"], Cell[4677, 169, 79, 0, 23, "Message"] }, Open ]], Cell[4771, 172, 105, 3, 37, "Text"], Cell[4879, 177, 46, 1, 33, "Input"], Cell[4928, 180, 116, 3, 45, InheritFromParent], Cell[5047, 185, 31, 0, 37, "Text"] }, Open ]] } ] *) (******************************************************************* End of Mathematica Notebook file. *******************************************************************)