Skip to content

Instantly share code, notes, and snippets.

@hogeika
Forked from karino2/test.html
Created February 29, 2012 22:31
Show Gist options
  • Save hogeika/1945002 to your computer and use it in GitHub Desktop.
Save hogeika/1945002 to your computer and use it in GitHub Desktop.
EquationPad
<html>
<head>
<style type="text/css">
.selectedTarget { background-color: red}
</style>
</head>
<body onload="onload()">
<input value="Export" type="button" onclick="Export();">
<input value="Import" type="button" onclick="Import();">
<input type="file" id="load_file">
<input value="Load" type="button" onclick="Load()">
<input value="Save" type="button" onclick="Save()">
<div id="history" contenteditable="true"></div>
<script language="javascript">
var g_DEFAULT_IMPORT =
"[['%5B%22=%22,%0A%22&Laplacetrf;%22,%0A%20%5B%22int%22,%0A%20%20%5B%22+%22,%0A%20%20%20%5B%22*%22,%20%5B%22+%22,%20%22p(t)%22,%20%5B%22-%22,%20%22c%22%5D%5D,%20%0A%20%20%20%20%20%20%5B%22+%22,%20%22a%22,%20%5B%22-%22,%20%22x(t)%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%5B%22-%22,%20%5B%22*%22,%20%22b%22,%20%22p(t)%22%5D%5D%5D,%0A%20%20%20%20%20%20%5B%22pow%22,%20%22e%22,%5B%22-%22,%20%5B%22*%22,%20%22&rho;%22,%20%22t%22%5D%5D%5D%0A%20%20%20%5D,%0A%20%20%20%5B%22*%22,%20%22&lambda;%22,%0A%20%20%20%20%5B%22+%22,%20%22q(t)%22,%20%5B%22-%22,%20%22a%22%5D,%20%5B%22*%22,%20%22b%22,%20%22p(t)%22%5D%5D%5D,%0A%20%20%20%5B%22*%22,%20%22&pi;%22,%0A%20%20%20%20%5B%22+%22,%20%0A%20%20%20%20%20%20%5B%22*%22,%20%22k%22,%0A%20%20%20%20%20%20%20%20%5B%22+%22,%20%22p%22,%20%5B%22-%22,%20%22p*%22%5D%5D%0A%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%5B%22-%22,%20%5B%22dotover%22,%20%22x%22%5D%5D%0A%20%20%20%20%5D%0A%20%20%20%5D%0A%20%20%5D,%0A%20%20%22t%22,%200,%20%22&infin;%22%0A%20%5D%0A%5D%0A%0A','%5B%22=%22,%0A%22&HilbertSpace;%22,%0A%20%20%5B%22+%22,%0A%20%20%20%5B%22*%22,%20%5B%22+%22,%20%22p(t)%22,%20%5B%22-%22,%20%22c%22%5D%5D,%20%0A%20%20%20%20%20%20%5B%22+%22,%20%22a%22,%20%5B%22-%22,%20%22x(t)%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%5B%22-%22,%20%5B%22*%22,%20%22b%22,%20%22p(t)%22%5D%5D%5D,%0A%20%20%20%20%20%20%5B%22pow%22,%20%22e%22,%5B%22-%22,%20%5B%22*%22,%20%22&rho;%22,%20%22t%22%5D%5D%5D%0A%20%20%20%5D,%0A%20%20%20%20%5B%22*%22,%20%22&pi;%22,%0A%20%20%20%20%5B%22+%22,%5B%22*%22,%22k%22,%0A%20%20%20%20%20%20%20%20%5B%22+%22,%20%22p%22,%20%5B%22-%22,%20%22p*%22%5D%5D%0A%20%20%20%20%20%20%5D%0A%20%20%20%20%5D%0A%20%20%20%5D%0A%20%20%5D,%0A%5D%0A%0A','%5B%22=%22,%0A%20%5B%22part%22,%20%22&HilbertSpace;%22,%20%22p%22%5D,%0A%20%5B%22+%22,%0A%20%20%20%5B%22*%22,%20%0A%20%20%20%20%5B%22+%22,%20%22a%22,%20%5B%22-%22,%20%22x(t)%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%5B%22-%22,%20%5B%22*%22,%20%22b%22,%20%22p(t)%22%5D%5D%5D,%0A%20%20%20%20%5B%22pow%22,%20%22e%22,%5B%22-%22,%20%5B%22*%22,%20%22&rho;%22,%20%22t%22%5D%5D%5D%20%0A%20%20%20%5D,%0A%20%20%20%5B%22-%22,%5B%22*%22,%20%22b%22,%0A%20%20%20%20%20%20%20%20%20%5B%22+%22,%20%22p(t)%22,%20%5B%22-%22,%20%22c%22%5D%5D,%0A%20%20%20%20%20%20%20%20%20%5B%22pow%22,%20%22e%22,%5B%22-%22,%20%5B%22*%22,%20%22&rho;%22,%20%22t%22%5D%5D%5D%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%5D,%0A%20%20%20%20%5B%22*%22,%20%22&pi;%22,%20%22k%22,%5D%0A%20%5D%0A%5D%0A%0A','%5B%22=%22,%0A%200,%0A%20%5B%22+%22,%0A%20%20%20%5B%22*%22,%20%0A%20%20%20%20%5B%22+%22,%20%22a%22,%20%0A%20%20%20%20%20%20%20%5B%22-%22,%20%22x(t)%22%5D,%0A%20%20%20%20%20%20%20%5B%22-%22,%20%5B%22*%22,%20%22b%22,%20%22p(t)%22%5D%5D,%0A%20%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%20%20%20%20%20%22b%22,%0A%20%20%20%20%20%20%20%20%20%20%20%5B%22+%22,%20%22p(t)%22,%20%5B%22-%22,%20%22c%22%5D%5D%0A%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%5D%0A%20%20%20%20%5D,%0A%20%20%20%20%5B%22pow%22,%20%22e%22,%5B%22-%22,%20%5B%22*%22,%20%22&rho;%22,%20%22t%22%5D%5D%5D%20%0A%20%20%20%5D,%0A%20%20%20%20%5B%22*%22,%20%22&pi;%22,%20%22k%22,%5D%0A%20%5D%0A%5D%0A%0A','%5B%22=%22,%0A%200,%0A%20%5B%22+%22,%0A%20%20%20%5B%22*%22,%20%0A%20%20%20%20%5B%22+%22,%20%22a%22,%20%0A%20%20%20%20%20%20%20%5B%22-%22,%20%22x(t)%22%5D,%0A%20%20%20%20%20%20%20%5B%22-%22,%20%5B%22*%22,%202,%20%22b%22,%20%22p(t)%22%5D%5D,%0A%20%20%20%20%20%20%20%5B%22*%22,%22b%22,%20%22c%22%5D%0A%20%20%20%20%5D%0A%20%20%20%20,%0A%20%20%20%20%5B%22pow%22,%20%22e%22,%5B%22-%22,%20%5B%22*%22,%20%22&rho;%22,%20%22t%22%5D%5D%5D%20%0A%20%20%20%5D,%0A%20%20%20%20%5B%22*%22,%20%22&pi;%22,%20%22k%22,%5D%0A%20%5D%0A%5D%0A%0A','%5B%22=%22,%0A%20%200,%0A%20%20%5B%22+%22,%0A%20%20%20%20%22a%22,%0A%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%22x(t)%22%0A%20%20%20%20%5D,%0A%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%20%202,%0A%20%20%20%20%20%20%20%20%22b%22,%0A%20%20%20%20%20%20%20%20%22p(t)%22%0A%20%20%20%20%20%20%5D%0A%20%20%20%20%5D,%0A%20%20%20%20%5B%22*%22,%22b%22,%22c%22%5D,%0A%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%20%20%22&pi;%22,%0A%20%20%20%20%20%20%20%20%22k%22%0A%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%5B%22pow%22,%0A%20%20%20%20%20%20%20%20%22e%22,%0A%20%20%20%20%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%20%20%20%20%22&rho;%22,%0A%20%20%20%20%20%20%20%20%20%20%22t%22%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%5D%0A%20%20%20%20%5D%0A%20%20%5D%0A%5D','%5B%22=%22,%0A%20%20%5B%22*%22,%0A%20%20%20%202,%0A%20%20%20%20%22b%22,%0A%20%20%20%20%22p(t)%22%0A%20%20%5D,%0A%20%20%5B%22+%22,%0A%20%20%20%20%5B%22*%22,%22b%22,%22c%22%5D,%0A%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%22x(t)%22%0A%20%20%20%20%5D,%0A%20%20%20%20%22a%22,%0A%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%20%20%22&pi;%22,%0A%20%20%20%20%20%20%20%20%22k%22%0A%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%5B%22pow%22,%0A%20%20%20%20%20%20%20%20%22e%22,%0A%20%20%20%20%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%20%20%20%20%22&rho;%22,%0A%20%20%20%20%20%20%20%20%20%20%22t%22%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%5D%0A%20%20%20%20%5D%0A%20%20%5D%0A%5D','%5B%22=%22,%0A%20%22p(t)%22,%0A%20%5B%22/%22,%0A%20%20%5B%22+%22,%0A%20%20%20%20%5B%22*%22,%22b%22,%22c%22%5D,%5B%22-%22,%22x(t)%22%5D,%22a%22,%0A%20%20%20%20%5B%22*%22,%22&pi;%22,%22k%22,%20%5B%22pow%22,%22e%22,%20%5B%22*%22,%22&rho;%22,%22t%22%5D%5D%5D,%0A%20%20%5D,%0A%20%20%5B%22*%22,%202,%20%22b%22%5D%0A%20%5D%0A%5D%0A%0A','%5B%22=%22,%0A%20%20%22&HilbertSpace;*%22,%0A%20%20%5B%22+%22,%0A%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%5B%22/%22,%0A%20%20%20%20%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22*%22,%22b%22,%22c%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22x(t)%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%22a%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22&pi;%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22k%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22pow%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22e%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22&rho;%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22t%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%20%20%5B%22*%22,2,%22b%22%5D%0A%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%5B%22-%22,%22c%22%5D%0A%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%22a%22,%0A%20%20%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%20%20%22x(t)%22%0A%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%22b%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22/%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22*%22,%22b%22,%22c%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22x(t)%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22a%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22&pi;%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22k%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22pow%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22e%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22&rho;%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22t%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22*%22,2,%22b%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%5B%22pow%22,%0A%20%20%20%20%20%20%20%20%22e%22,%0A%20%20%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%22&rho;%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%22t%22%0A%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%5D%0A%20%20%20%20%5D,%0A%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%22&pi;%22,%0A%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%20%20%20%20%22k%22,%0A%20%20%20%20%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22/%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22*%22,%22b%22,%22c%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22x(t)%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22a%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22&pi;%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22k%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22pow%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22e%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22&rho;%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22t%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22*%22,2,%22b%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22p*%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%5D%0A%20%20%20%20%5D%0A%20%20%5D%0A%5D','%5B%22=%22,%0A%20%20%22&phi;%22,%0A%20%20%5B%22*%22,%0A%20%20%20%20%22&pi;%22,%0A%20%20%20%20%22k%22,%0A%20%20%20%20%5B%22pow%22,%0A%20%20%20%20%20%20%22e%22,%0A%20%20%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%20%20%22&rho;%22,%0A%20%20%20%20%20%20%20%20%22t%22%0A%20%20%20%20%20%20%5D%0A%20%20%20%20%5D%0A%20%20%5D%0A%5D','%5B%22=%22,%0A%20%20%22&HilbertSpace;*%22,%0A%20%20%5B%22+%22,%0A%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%5B%22/%22,%0A%20%20%20%20%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22*%22,%22b%22,%22c%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22x(t)%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%22a%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22&phi;%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%20%20%5B%22*%22,2,%22b%22%5D%0A%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%5B%22-%22,%22c%22%5D%0A%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%22a%22,%0A%20%20%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%20%20%22x(t)%22%0A%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%20%20%5B%22/%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22*%22,%22b%22,%22c%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22x(t)%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22a%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22&phi;%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%202%0A%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%5B%22pow%22,%0A%20%20%20%20%20%20%20%20%22e%22,%0A%20%20%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%22&rho;%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%22t%22%0A%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%5D%0A%20%20%20%20%5D,%0A%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%22&pi;%22,%0A%20%20%20%20%20%20%22k%22,%0A%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%5B%22/%22,%0A%20%20%20%20%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22*%22,%22b%22,%22c%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22x(t)%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%22a%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%22&phi;%22%0A%20%20%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%20%20%5B%22*%22,2,%22b%22%5D%0A%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%20%20%22p*%22%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%5D%0A%20%20%20%20%5D%0A%20%20%5D%0A%5D','%5B%22=%22,%0A%20%20%22X%22,%0A%20%20%5B%22+%22,%0A%20%20%20%20%22x(t)%22,%0A%20%20%20%20%5B%22-%22,%22a%22%5D%0A%20%20%5D%0A%5D','%5B%22=%22,%0A%20%20%22&HilbertSpace;*%22,%0A%20%20%5B%22+%22,%0A%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%5B%22/%22,%0A%20%20%20%20%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22*%22,%22b%22,%22c%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22x(t)%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%22a%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22&phi;%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%20%20%5B%22*%22,2,%22b%22%5D%0A%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%5B%22-%22,%22c%22%5D%0A%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%22a%22,%0A%20%20%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%20%20%22x(t)%22%0A%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%20%20%5B%22/%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22*%22,%22b%22,%22c%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22x(t)%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22a%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22&phi;%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%202%0A%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%5B%22pow%22,%0A%20%20%20%20%20%20%20%20%22e%22,%0A%20%20%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%22&rho;%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%22t%22%0A%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%5D%0A%20%20%20%20%5D,%0A%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%22&pi;%22,%0A%20%20%20%20%20%20%22k%22,%0A%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%5B%22/%22,%0A%20%20%20%20%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22*%22,%22b%22,%22c%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22x(t)%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%22a%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%22&phi;%22%0A%20%20%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%20%20%5B%22*%22,2,%22b%22%5D%0A%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%20%20%22p*%22%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%5D%0A%20%20%20%20%5D%0A%20%20%5D%0A%5D','%5B%22=%22,%0A%20%20%22&HilbertSpace;*%22,%0A%20%20%5B%22+%22,%0A%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%5B%22/%22,%0A%20%20%20%20%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22*%22,%22b%22,%22c%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22-%22,%22X%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22&phi;%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%20%20%5B%22*%22,2,%22b%22%5D%0A%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%5B%22-%22,%22c%22%5D%0A%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%5B%22-%22,%22X%22%5D,%0A%20%20%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%20%20%5B%22/%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22*%22,%22b%22,%22c%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22-%22,%22X%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22&phi;%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%202%0A%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%5B%22pow%22,%0A%20%20%20%20%20%20%20%20%22e%22,%0A%20%20%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%22&rho;%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%22t%22%0A%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%5D%0A%20%20%20%20%5D,%0A%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%22&pi;%22,%0A%20%20%20%20%20%20%22k%22,%0A%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%5B%22/%22,%0A%20%20%20%20%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22*%22,%22b%22,%22c%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22-%22,%22X%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22&phi;%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%20%20%5B%22*%22,2,%22b%22%5D%0A%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%20%20%22p*%22%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%5D%0A%20%20%20%20%5D%0A%20%20%5D%0A%5D','%5B%22=%22,%0A%20%20%22&HilbertSpace;*%22,%0A%20%20%5B%22*%22,%0A%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%20%20%5B%22/%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22*%22,%22b%22,%22c%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22-%22,%22X%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22&phi;%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22*%22,2,%22b%22%5D%0A%20%20%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%20%20%5B%22-%22,%22c%22%5D%0A%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%20%20%5B%22-%22,%22X%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22/%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22*%22,%22b%22,%22c%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22-%22,%22X%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22&phi;%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%202%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%20%20%5B%22&phi;%22%0A%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%20%20%5B%22/%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22*%22,%22b%22,%22c%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22-%22,%22X%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%22&phi;%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22*%22,2,%22b%22%5D%0A%20%20%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%22p*%22%0A%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%5D%0A%20%20%20%20%5D,%0A%20%20%20%20%5B%22pow%22,%0A%20%20%20%20%20%20%22e%22,%0A%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%20%20%20%20%22&rho;%22,%0A%20%20%20%20%20%20%20%20%20%20%22t%22%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%5D%0A%20%20%20%20%5D%0A%20%20%5D%0A%5D','%5B%22+%22,%0A%20%20%5B%22*%22,%0A%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%5B%22/%22,%0A%20%20%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%20%20%5B%22*%22,%22b%22,%22c%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%5B%22-%22,%22X%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%5B%22&phi;%22%0A%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%5B%22*%22,2,%22b%22%5D%0A%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%5B%22-%22,%22c%22%5D%0A%20%20%20%20%5D,%0A%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%5B%22-%22,%22X%22%5D,%0A%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%5B%22/%22,%0A%20%20%20%20%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22*%22,%22b%22,%22c%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22-%22,%22X%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22&phi;%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%20%202%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%5D%0A%20%20%20%20%5D%0A%20%20%5D,%0A%20%20%5B%22*%22,%0A%20%20%20%20%5B%22&phi;%22%0A%20%20%20%20%5D,%0A%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%5B%22/%22,%0A%20%20%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%20%20%5B%22*%22,%22b%22,%22c%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%5B%22-%22,%22X%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%5B%22&phi;%22%0A%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%5B%22*%22,2,%22b%22%5D%0A%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%22p*%22%0A%20%20%20%20%20%20%5D%0A%20%20%20%20%5D%0A%20%20%5D%0A%5D',],['%5B%22+%22,%0A%20%20%5B%22*%22,%0A%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%5B%22/%22,%0A%20%20%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%20%20%5B%22*%22,%22b%22,%22c%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%5B%22-%22,%22X%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%5B%22&phi;%22%0A%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%5B%22*%22,2,%22b%22%5D%0A%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%5B%22-%22,%22c%22%5D%0A%20%20%20%20%5D,%0A%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%5B%22-%22,%22X%22%5D,%0A%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%5B%22/%22,%0A%20%20%20%20%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22*%22,%22b%22,%22c%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22-%22,%22X%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22&phi;%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%20%202%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%5D%0A%20%20%20%20%5D%0A%20%20%5D,%0A%20%20%5B%22*%22,%0A%20%20%20%20%5B%22&phi;%22%0A%20%20%20%20%5D,%0A%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%5B%22/%22,%0A%20%20%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%20%20%5B%22*%22,%22b%22,%22c%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%5B%22-%22,%22X%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%5B%22&phi;%22%0A%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%5B%22*%22,2,%22b%22%5D%0A%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%22p*%22%0A%20%20%20%20%20%20%5D%0A%20%20%20%20%5D%0A%20%20%5D%0A%5D','%5B%22/%22,%0A%20%20%5B%22+%22,%0A%20%20%20%20%5B%22*%22,%22b%22,%22c%22%5D,%0A%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%22x(t)%22%0A%20%20%20%20%5D,%0A%20%20%20%20%22a%22,%0A%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%22&pi;%22,%0A%20%20%20%20%20%20%22k%22,%0A%20%20%20%20%20%20%5B%22pow%22,%0A%20%20%20%20%20%20%20%20%22e%22,%0A%20%20%20%20%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%20%20%20%20%22&rho;%22,%0A%20%20%20%20%20%20%20%20%20%20%22t%22%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%5D%0A%20%20%20%20%5D%0A%20%20%5D,%0A%20%20%5B%22*%22,2,%22b%22%5D%0A%5D','%5B%22*%22,%0A%20%20%22&pi;%22,%0A%20%20%5B%22+%22,%0A%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%22k%22,%0A%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%5B%22/%22,%0A%20%20%20%20%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22*%22,%22b%22,%22c%22%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22x(t)%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%20%20%20%20%22a%22,%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%22&phi;%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%20%20%5B%22*%22,2,%22b%22%5D%0A%20%20%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%20%20%20%20%22p*%22%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%5D%0A%20%20%20%20%5D%0A%20%20%5D%0A%5D','%5B%22*%22,%0A%20%20%5B%22+%22,%0A%20%20%20%20%22a%22,%0A%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%22x(t)%22%0A%20%20%20%20%5D,%0A%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%20%202,%0A%20%20%20%20%20%20%20%20%22b%22,%0A%20%20%20%20%20%20%20%20%22p(t)%22%0A%20%20%20%20%20%20%5D%0A%20%20%20%20%5D,%0A%20%20%20%20%5B%22*%22,%22b%22,%22c%22%5D%0A%20%20%5D,%0A%20%20%5B%22pow%22,%0A%20%20%20%20%22e%22,%0A%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%20%20%22&rho;%22,%0A%20%20%20%20%20%20%20%20%22t%22%0A%20%20%20%20%20%20%5D%0A%20%20%20%20%5D%0A%20%20%5D%0A%5D','%5B%22+%22,%0A%20%20%5B%22-%22,%22X%22%5D,%0A%20%20%5B%22-%22,%0A%20%20%20%20%5B%22/%22,%0A%20%20%20%20%20%20%5B%22+%22,%0A%20%20%20%20%20%20%20%20%5B%22*%22,%22b%22,%22c%22%5D,%0A%20%20%20%20%20%20%20%20%5B%22-%22,%22X%22%5D,%0A%20%20%20%20%20%20%20%20%5B%22&phi;%22%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%5D,%0A%20%20%20%20%20%202%0A%20%20%20%20%5D%0A%20%20%5D%0A%5D','%5B%22/%22,%0A%20%20%5B%22+%22,%0A%20%20%20%20%5B%22*%22,%22b%22,%22c%22%5D,%0A%20%20%20%20%5B%22-%22,%22X%22%5D,%0A%20%20%20%20%5B%22&phi;%22%0A%20%20%20%20%5D%0A%20%20%5D,%0A%20%202%0A%5D','%5B%22pow%22,%0A%20%20%22e%22,%0A%20%20%5B%22-%22,%0A%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%22&rho;%22,%0A%20%20%20%20%20%20%22t%22%0A%20%20%20%20%5D%0A%20%20%5D%0A%5D','%5B%22*%22,%0A%20%20%5B%22&phi;%22%0A%20%20%5D,%0A%20%20%5B%22pow%22,%0A%20%20%20%20%22e%22,%0A%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%20%20%22&rho;%22,%0A%20%20%20%20%20%20%20%20%22t%22%0A%20%20%20%20%20%20%5D%0A%20%20%20%20%5D%0A%20%20%5D%0A%5D','%5B%22*%22,%0A%20%20%5B%22+%22,%0A%20%20%20%20%22a%22,%0A%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%22x(t)%22%0A%20%20%20%20%5D,%0A%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%20%202,%0A%20%20%20%20%20%20%20%20%22b%22,%0A%20%20%20%20%20%20%20%20%22p(t)%22%0A%20%20%20%20%20%20%5D%0A%20%20%20%20%5D,%0A%20%20%20%20%5B%22*%22,%22b%22,%22c%22%5D%0A%20%20%5D,%0A%20%20%5B%22pow%22,%0A%20%20%20%20%22e%22,%0A%20%20%20%20%5B%22-%22,%0A%20%20%20%20%20%20%5B%22*%22,%0A%20%20%20%20%20%20%20%20%22&rho;%22,%0A%20%20%20%20%20%20%20%20%22t%22%0A%20%20%20%20%20%20%5D%0A%20%20%20%20%5D%0A%20%20%5D%0A%5D',]]"
;
var g_VERVOSE = false;
function assertFail(msg) {
if(g_VERVOSE)
alert("fail! "+ msg);
throw msg;
}
function assertFalse(condition, msg) {
if(condition)
assertFail("assert false fail:" + msg);
}
function assertEq(exp, act) {
if(exp != act)
assertFail("not equal [" + exp + "] and [" + act + "]");
}
function assertNeq(exp, act) {
if(exp == act)
assertFail("not equal [" + exp + "] and [" + act + "]");
}
function assertNStrictEq(exp, act) {
if(exp === act)
assertFail("not equal [" + exp + "] and [" + act + "]");
}
function $(id) {
return document.getElementById(id);
}
function CE(tag){
return document.createElement(tag);
}
var g_id = 1;
function IdGen() {
return g_id++;
}
function Mo(id, val) {
return "<mo id=\"" + id + "\">" + val + "</mo>";
}
function Mi(id, val) {
return "<mi id=\"" + id + "\">" + val + "</mi>";
}
function MnOrMi(term) {
if(term instanceof Number){
return "<mn id=\"" + term.objId + "\">" + term + "</mn>";
}
if(term instanceof String){
if(term[0] == '&') {
return Mi(term.objId, term);
}
return Mi(term.objId, term);
}
throw "Unknow terminal";
}
function EvalTerm(builder, term, nofence){
if(term instanceof Array){
if(!nofence) {
builder.push("<mfenced id=\"");
builder.push(term.objId);
builder.push("\"><mrow>");
}
builder.push(JsonToMathML(term));
if(!nofence)
builder.push("</mrow></mfenced>");
}else{
builder.push(MnOrMi(term));
}
}
function PushMo(builder, tagName, id) {
if(id)
builder.push('<mo id="' + id + '">');
else
builder.push("<mo>");
builder.push(tagName);
builder.push("</mo>");
}
function IsMinus(term) {
return term[0] == "-";
}
function IsSingleTerm(term) {
return !(term[0] == "+");
}
function PushMinusTerm(builder, term) {
assertEq(true, IsMinus(term));
PushMrow(builder, term.objId);
PushMo(builder, "-", term[0].objId);
EvalTerm(builder,term[1], IsSingleTerm(term[1]));
builder.push('</mrow>');
}
function FirstHeadIsNotMinus(sexp) {
if(sexp[0] == "-")
return false;
if(sexp[0] != "*")
return true;
return FirstHeadIsNotMinus(sexp[1]);
}
function EvalPlus(json) {
var builder = [];
var len = json.length;
PushMrow(builder, json.objId);
if(IsMinus(json[1])){
PushMinusTerm(builder, json[1]);
}
else
EvalTerm(builder, json[1], IsSingleTerm(json[1]));
for(var i = 2; i < len; i++) {
if(IsMinus(json[i])){
PushMinusTerm(builder, json[i]);
}
else {
PushMo(builder, "+");
EvalTerm(builder,json[i], IsSingleTerm(json[i]) && FirstHeadIsNotMinus(json[i]));
}
}
builder.push('</mrow>');
return builder.join("");
}
function PushMrow(builder, id) {
builder.push('<mrow id="'+ id + '">');
}
function EvalTimes(json) {
var builder = [];
var len = json.length;
PushMrow(builder, json.objId);
EvalTerm(builder, json[1], IsSingleTerm(json[1]));
for(var i = 2; i < len; i++) {
if(json[i-1] instanceof Number && json[i] instanceof Number)
PushMo(builder, "&times;");
EvalTerm(builder,json[i], IsSingleTerm(json[i]) && !IsMinus(json[i]));
}
builder.push('</mrow>');
return builder.join("");
}
function EvalEqual(json) {
var builder = [];
PushMrow(builder, json.objId);
EvalTerm(builder, json[1], true);
PushMo(builder, "=", json[0].objId);
EvalTerm(builder,json[2], true);
builder.push("</mrow>");
return builder.join("");
}
function EvalPower(json) {
var builder = [];
builder.push('<msup id="' + json.objId + '">');
EvalTerm(builder, json[1]);
EvalTerm(builder, json[2], true);
builder.push("</msup>");
return builder.join("");
}
function EvalPartial(json) {
var builder = [];
builder.push('<mfrac id="' +json.objId + '">');
builder.push("<mrow>");
PushMo(builder, "&part;");
EvalTerm(builder, json[1]);
builder.push("</mrow>");
builder.push("<mrow>");
PushMo(builder, "&part;");
EvalTerm(builder, json[2]);
builder.push("</mrow>");
builder.push("</mfrac>");
return builder.join("");
}
function EvalFrac(json) {
var builder = [];
builder.push('<mfrac id="' +json.objId + '"><mrow>');
EvalTerm(builder, json[1], true);
builder.push('</mrow><mrow>');
EvalTerm(builder, json[2], true);
builder.push('</mrow></mfrac>');
return builder.join("");
}
function EvalDotOver(json) {
var builder = [];
builder.push('<mover id="' + json.objId + '">');
EvalTerm(builder, json[1]);
builder.push("<mo>.</mo>");
builder.push("</mover>");
return builder.join("");
}
function EvalIntegral(json) {
var builder = [];
PushMrow(builder, json.objId);
if(json.length == 3) {
PushMo(builder, "&Integral;", json[0].objId);
EvalTerm(builder, json[1], true);
// currently, json[2] does'nt support &rho;, etc.
builder.push(Mi(json[2].objId, "d" + json[2] ));
} else if(json.length == 5) {
builder.push("<msubsup>");
builder.push(Mo(json[0].objId, "&Integral;"));
EvalTerm(builder, json[3], true);
EvalTerm(builder, json[4], true);
builder.push("</msubsup>");
EvalTerm(builder, json[1], true);
// currently, json[2] does'nt support &rho;, etc.
builder.push(Mi(json[2].objId, "d" + json[2] ));
} else {
throw "unknown arg number of integral. ( " + json.length + ")";
}
builder.push("</mrow>");
return builder.join("");
}
function JsonToMathML(json) {
var tag = json[0];
if(tag == "-")
{
var builder = [];
PushMinusTerm(builder, json);
return builder.join("");
}
if(tag == "+")
{
return EvalPlus(json);
}
if(tag == "*")
{
return EvalTimes(json);
}
if(tag == "pow")
{
return EvalPower(json);
}
if(tag == "part")
{
return EvalPartial(json);
}
if(tag == "/")
{
return EvalFrac(json);
}
if(tag == "dotover")
{
return EvalDotOver(json);
}
if(tag == "int")
{
return EvalIntegral(json);
}
if(tag == "=")
{
return EvalEqual(json);
}
// if(json.length == 1)
if(json.length == 1)
{
var builder = [];
EvalTerm(builder, json[0]);
return builder.join("");
}
throw "unknown tag";
}
function dp(st) {
var con = $("console");
con.value += st + "\n";
}
function EncloseMath(str,isBlock){
var header ="<math " + (isBlock?"display=\"block\"":"") + "xmlns=\"http://www.w3.org/1998/Math/MathML\">"
var footer ="</math>"
return header + str + footer;
}
function showMath(str) {
var math = $("mathcanvas");
math.innerHTML = EncloseMath(str,true);
}
function onClear() {
var con = $("console");
con.value = '';
}
var g_hash = {};
function ParseSingleItem(item) {
var obj;
if(typeof(item) == "number")
obj = new Number(item);
else if(typeof(item) == "string")
obj = new String(item);
else if(item instanceof Array)
obj = JsonParser(item);
else
obj = item;
obj.objId = IdGen();
g_hash[obj.objId] = obj;
return obj;
}
function JsonParser(str) {
var sexp = eval(str);
var res = [];
res.objId = IdGen();
g_hash[res.objId] = res;
if(sexp instanceof Array) {
for(var i = 0; i < sexp.length; i++) {
var obj = ParseSingleItem(sexp[i]);
res.push(obj);
obj.parent = res;
}
} else {
var obj = ParseSingleItem(sexp);
res.push(obj);
obj.parent = res;
}
assertNStrictEq(res, sexp);
return res;
}
var g_sexp;
function UpdateInputToCanvas() {
g_selected = undefined;
g_sexp = JsonParser($("input").value);
var result = JsonToMathML(g_sexp);
dp(result);
showMath(result);
}
function UpdateSelection() {
if(g_selected) {
var elem = $(g_selected.obj.objId);
elem.setAttribute("class", "selectedTarget");
g_selected.elem = elem;
}
}
function findSexp(sexp, id) {
if(sexp && sexp.objId == id)
return sexp;
if(sexp instanceof Array) {
for(var i = 0; i < sexp.length; i++) {
var res = findSexp(sexp[i], id)
if(res)
return res;
}
}
return false;
}
function HasArrayChild(sexp) {
for(var i = 0; i < sexp.length; i++) {
if(sexp[i].length > 1) {
return true;
}
}
return false;
}
function PushIndent(builder, level) {
for(var i = 0; i < level; i++) {
builder.push(" ");
}
}
function InnerSexpSerializer(sexp, builder, level) {
if(sexp instanceof Number) {
PushIndent(builder, level);
builder.push(sexp.toString());
return;
}
if(sexp instanceof String) {
PushIndent(builder, level);
builder.push('"');
builder.push(sexp);
builder.push('"');
return;
}
if(sexp instanceof Array) {
PushIndent(builder, level);
builder.push("[");
assertFalse(sexp[0] instanceof Array, "head of array must not array.");
InnerSexpSerializer(sexp[0], builder, 0);
if(HasArrayChild(sexp)) {
for(var i = 1; i < sexp.length; i++) {
builder.push(",\n");
InnerSexpSerializer(sexp[i], builder, level+1);
}
builder.push("\n");
PushIndent(builder, level);
builder.push("]");
}
else {
for(var i = 1; i < sexp.length; i++) {
builder.push(",");
InnerSexpSerializer(sexp[i], builder, 0);
}
builder.push("]");
}
return;
}
alert(typeof(sexp));
throw "unknown atom type inside S Expression Serializer";
}
function SexpSerializer(sexp) {
var builder = [];
var level = 0;
InnerSexpSerializer(sexp, builder, level);
return builder.join("");
}
function Update(sexp) {
var result = JsonToMathML(sexp);
dp(result);
showMath(result);
UpdateSelection();
$("input").value = SexpSerializer(sexp);
}
function CopyRawExpression(raw) {
var par = $('cutbuffer');
var entry = CE("li");
SaveExpression(entry, raw);
if(par.firstChild) {
par.insertBefore(entry, par.firstChild);
} else {
par.appendChild(entry);
}
}
function Copy(sexp) {
if(!(sexp instanceof Array))
return;
var raw = SexpSerializer(sexp);
CopyRawExpression(raw);
}
function CutBufferMoveForward() {
var cutbuf = $('cutbuffer');
var li = cutbuf.firstChild;
// move to last
if(li)
cutbuf.appendChild(li);
}
function CutBufferMoveBackword() {
var cutbuf = $('cutbuffer');
var li = cutbuf.lastChild;
// move to first
if(li)
cutbuf.insertBefore(li, cutbuf.firstChild);
}
function ReplaceExpression(targetSexp, newExp) {
if(g_selected && g_selected.obj == targetSexp)
g_selected = {obj: newExp}; // caution! no elem until UpdateSelection!
var parent = targetSexp.parent;
var i = FindIndex(parent, targetSexp);
parent[i] = newExp;
parent[i].parent = parent;
return parent[i];
}
var g_continue_replace = false;
function Replace(isBackword) {
if(g_continue_replace) {
if(isBackword){
CutBufferMoveBackword();
}else{
CutBufferMoveForward();
}
}
var raw = HeadRaw();
if(raw){
$('input').value = raw;
UpdateInputToCanvas();
g_continue_replace = true;
}
}
var g_last_pasted_sexp = undefined;
function Paste(targetSexp, isBackword) {
if(targetSexp == g_last_pasted_sexp) {
if(isBackword){
CutBufferMoveBackword();
}else{
CutBufferMoveForward();
}
}
var raw = HeadRaw();
if(raw && targetSexp.parent){
UnSelectExpression(true);
var newCell = ReplaceExpression(targetSexp, JsonParser(raw));
g_last_pasted_sexp = newCell;
}
}
function FindIndex(arr, obj) {
for(var i = 0; i < arr.length; i++) {
if(arr[i] == obj)
return i;
}
return -1;
}
function swap(array, i, j) {
var iobj = array[i];
array[i] = array[j];
array[j] = iobj;
}
function MoveLeftTermInternal(parent_sexp, target_sexp) {
var i = FindIndex(parent_sexp, target_sexp);
if(i == 1)
return;
assertEq(parent_sexp[i], target_sexp);
swap(parent_sexp, i, i-1);
}
function IsHead(obj) {
return obj.parent[0] == obj;
}
function MoveLeftTerm(sel) {
if(!sel.obj.parent)
return;
MoveLeftTermInternal(sel.obj.parent, sel.obj);
}
function MoveRightTermInternal(parent_sexp, target_sexp) {
var i = FindIndex(parent_sexp, target_sexp);
if(i == parent_sexp.length -1 )
return;
assertEq(parent_sexp[i], target_sexp);
swap(parent_sexp, i, i+1);
}
function MoveRightTerm(sel) {
if(!sel.obj.parent)
return;
/*
if(IsHead(sel.obj)) {
MoveRightTermInternal(sel.obj.parent.parent, sel.obj.parent);
return ;
}
*/
MoveRightTermInternal(sel.obj.parent, sel.obj);
}
function PartialDerivative(sel) {
var newSexp = JsonParser('["part", "dummy", "t"]');
newSexp[1] = sel.obj;
// use sel.obj.parent inside ReplaceExpression. So update after.
ReplaceExpression(sel.obj, newSexp);
newSexp[1].parent = newSexp;
}
function WidenSelection(sel) {
var par = sel.obj.parent;
if(!par)
return;
if(!par.objId)
return;
var par_elem = $(par.objId);
if(!par_elem)
return;
g_selected = {obj: par, elem: par_elem };
}
function SaveExpression(entry, raw) {
var hidden = CE('input');
hidden.type = 'hidden';
hidden.name = 'raw_exp';
hidden.value = raw;
entry.appendChild(hidden);
var span = CE('span');
span.innerHTML = EncloseMath(JsonToMathML(JsonParser(raw)));
entry.appendChild(span);
}
function Register(raw){
var history = $('history');
var history_entry = CE('div');
history_entry.contentEditable=false;
history_entry.setAttribute('style', "background-color:Azure; word-wrap:normal;");
var form = CE('form');
form.innerHTML='<input type="checkbox" name="is_selected" onclick="CheckClicked(event)">';
var input = CE('input');
input.type = 'button';
input.value = 'revive';
input.setAttribute('onclick','Revive(event)');
form.appendChild(input);
SaveExpression(form, raw);
history_entry.appendChild(form);
history.appendChild(history_entry);
history.appendChild(CE('br'));
/*
<div>
<form>
<input type="button" value="revive" onclick="Revive(event);">
<input type="hidden" name="raw_exp" value="['+', 1, 2]">
<span>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mi>
&Laplacetrf;
</mi>
</math>
<span>
</form>
</div>
*/
}
function GetHistoryForms() {
var history = $('history');
return history.getElementsByTagName("form");
}
function GetLastHistoryForm() {
var fs = GetHistoryForms();
if(fs.length == 0)
return undefined;
return fs.item(fs.length-1);
}
function GetFirstCheckedForm() {
var fs = GetHistoryForms();
for(var i=0; i < fs.length; i++){
var form = fs.item(i);
if(form.elements.namedItem('is_selected').checked) {
return form;
}
}
return undefined;
}
function Overwrite(raw){
var checkedForm = GetFirstCheckedForm();
if(checkedForm) {
checkedForm.elements.namedItem('raw_exp').value=raw;
checkedForm.getElementsByTagName('span')[0].innerHTML = EncloseMath(JsonToMathML(JsonParser(raw)));
}
}
function SelectedRaw(){
var form = GetFirstCheckedForm();
if(form) {
return form.elements.namedItem('raw_exp').value;
} else {
return LastRaw();
}
}
function HeadRaw() {
var cutbuf = $('cutbuffer');
var li = cutbuf.firstChild
if(li) {
var inp = li.getElementsByTagName("input")[0];
return inp.value;
}
return undefined;
}
function CheckClicked(e){
var fs = GetHistoryForms();
for(var i=0; i < fs.length; i++){
var f = fs.item(i);
var elem = f.elements.namedItem('is_selected');
if(elem !== e.target){
elem.checked = false;
}
}
}
function Revive(e){
var target = e.target;
var form = target.form;
var input = $('input');
input.value = form.elements.namedItem('raw_exp').value;
var fs = GetHistoryForms();
for(var i=0; i < fs.length; i++){
var f = fs.item(i);
var elem = f.elements.namedItem('is_selected');
elem.checked = false;
}
form.elements.namedItem('is_selected').checked=true;
UpdateInputToCanvas();
}
function Export(){
var forms = GetHistoryForms();
var builder = [];
builder.push('[[');
for(var i = 0; i < forms.length; i++){
builder.push("'");
builder.push(encodeURI(forms.item(i).elements.namedItem('raw_exp').value));
builder.push("'");
builder.push(',');
}
builder.push('],[');
var cutbufEnts = $('cutbuffer').getElementsByTagName("li");
for(var i = 0; i < cutbufEnts.length; i++) {
builder.push("'");
builder.push(encodeURI(cutbufEnts.item(i).getElementsByTagName('input')[0].value));
builder.push("'");
builder.push(',');
}
builder.push(']]');
prompt("Export", builder.join(""));
}
function QueryInput(initVal) {
return prompt("Import", initVal);
}
function Import(){
var input = QueryInput(g_DEFAULT_IMPORT);
if(!input)
return;
var array = eval(input);
for(var i=0; i < array[0].length; i++){
Register(decodeURI(array[0][i]));
}
for(var i = 0;i < array[1].length; i++) {
var j = array[1].length -i-1;
CopyRawExpression(decodeURI(array[1][j]));
}
}
function ClearMathCanvas(){
var input = $('input');
input.value = "";
var canvas = $('mathcanvas');
canvas.innerHTML = "";
}
function Save(){
ClearMathCanvas();
var console = $('console');
console.value = "<html><head>\n" + document.head.innerHTML + "</head><body onload=\"onload()\">\n" + document.body.innerHTML + "</body></html>";
}
function GetDocumentFromString(str){
var iframe = $('iframe');
var tmpDoc = iframe.contentDocument;
tmpDoc.open();
tmpDoc.write(str);
tmpDoc.close();
return tmpDoc;
}
function Load(){
var file = $('load_file').files[0];
if(file){
var reader = new FileReader();
reader.readAsText(file, "UTF-8");
reader.onload = function (){
var doc = GetDocumentFromString(reader.result);
var history = doc.getElementById('history');
var inputs = history.getElementsByTagName('input');
for(var i = 0; i < inputs.length; i++){
var input = inputs.item(i);
if(input.type == 'hidden' && input.name == 'raw_exp' && input.value){
Register(input.value);
}
}
var cutbuffer = doc.getElementById('cutbuffer');
var inputs = cutbuffer.getElementsByTagName('input');
for(var i = inputs.length - 1; i >= 0; i --){
var input = inputs.item(i);
if(input.type == 'hidden' && input.name == 'raw_exp' && input.value){
CopyRawExpression(input.value);
}
}
};
}
}
function assertMatch(expectPat, actual, msg) {
if(!actual.match(expectPat)) {
assertFail("pat not match. " + msg + ": pat[" + expectPat + "], actual [" + actual + "]");
}
}
function verify(input, expectPat, needLog) {
var sexp = JsonParser(input);
var result = JsonToMathML(sexp);
var actual_pat = expectPat;
if(needLog)
dp(result);
assertMatch(actual_pat, result, input);
}
function EvalTest() {
verify('["pow", "e", "a"]', /<msup id="[0-9]*"><mi[^>]*>e<\/mi><mi[^>]*>a<\/mi><\/msup>/);
verify('["pow", "e", ["*", "a", "b"]]', /<msup id="[0-9]*"><mi[^>]*>e<\/mi><mrow[^>]*><mi[^>]*>a<\/mi><mi id="[0-9]*">b<\/mi><\/mrow><\/msup>/);
verify('["*", "e", ["-", "a"]]', /<mrow id="[0-9]*"><mi id="[0-9]*">e<\/mi><mfenced id="[0-9]*"><mrow><mrow id="[0-9]*"><mo[^>]*>-<\/mo><mi id="[0-9]*">a<\/mi><\/mrow><\/mrow><\/mfenced><\/mrow>/);
//<mn id="84">3</mn><mo>+</mo><mrow id="86"><mi id="87">e</mi><mfenced id="91"><mrow><mrow id="89"><mo[^>]*>-</mo><mi id="90">a</mi></mrow></mrow></mfenced></mrow>
verify('["+", 3, ["*", "e", ["-", "a"]]]', /<mn id="[0-9]*">3<\/mn><mo>\+<\/mo><mrow id="[0-9]*"><mi id="[0-9]*">e<\/mi><mfenced id="[0-9]*"><mrow><mrow id="[0-9]*"><mo[^>]*>-<\/mo><mi id="[0-9]*">a<\/mi><\/mrow><\/mrow><\/mfenced><\/mrow>/);
// <mn id="106">3</mn><mo>+</mo><mfenced id="114"><mrow><mrow id="108"><mrow id="110"><mo[^>]*>-</mo><mi id="111">a</mi></mrow><mi id="113">e</mi></mrow></mrow></mfenced>
verify('["+",3,["*",["-","a"], "e"]]', /<mn id="[0-9]*">3<\/mn><mo>\+<\/mo><mfenced id="[0-9]*"><mrow><mrow id="[0-9]*"><mrow id="[0-9]*"><mo[^>]*>-<\/mo><mi id="[0-9]*">a<\/mi><\/mrow><mi id="[0-9]*">e<\/mi><\/mrow><\/mrow><\/mfenced>/);
verify('["+", "&lambda;", "a"]', /<mi id="[0-9]*">&lambda;<\/mi><mo>\+<\/mo><mi id="[0-9]*">a<\/mi>/);
verify('["dotover", "x"]', /<mover[^>]*><mi id="[0-9]*">x<\/mi><mo>.<\/mo><\/mover>/);
verify('["int", ["+", "x", "y"], "t"]', /<mo id="[0-9]*">&Integral;<\/mo><mrow id="[0-9]*"><mi id="[0-9]*">x<\/mi><mo>\+<\/mo><mi id="[0-9]*">y<\/mi><\/mrow><mi id="[0-9]*">dt<\/mi>/);
verify('["int", "x", "t"]', /<mo id="[0-9]*">&Integral;<\/mo><mi id="[0-9]*">x<\/mi><mi id="[0-9]*">dt<\/mi>/);
verify('["int", "x", "t", 0, "&infin;"]', /<msubsup><mo id="[0-9]*">&Integral;<\/mo><mn id="[0-9]*">0<\/mn><mi id="[0-9]*">&infin;<\/mi><\/msubsup><mi id="[0-9]*">x<\/mi><mi id="[0-9]*">dt<\/mi>/);
verify('["=", "x", "y"]', /<mi id="[0-9]*">x<\/mi><mo id="[0-9]*">=<\/mo><mi id="[0-9]*">y<\/mi>/);
verify('["=", "x", ["+", "y", "z"]]', /<mi id="[0-9]*">x<\/mi><mo id="[0-9]*">=<\/mo><mrow id="[0-9]*"><mi id="[0-9]*">y<\/mi><mo>\+<\/mo><mi id="[0-9]*">z<\/mi><\/mrow>/);
verify('["part", "y", "x"]', /<mfrac id="[0-9]*"><mrow><mo>&part;<\/mo><mi id="[0-9]*">y<\/mi><\/mrow><mrow><mo>&part;<\/mo><mi id="[0-9]*">x<\/mi><\/mrow><\/mfrac>/);
verify('["/", "x", "y"]', /<mfrac id="[0-9]*"><mrow><mi id="[0-9]*">x<\/mi><\/mrow><mrow><mi id="[0-9]*">y<\/mi><\/mrow><\/mfrac>/);
}
function verifySerializer(input, expect) {
var actual = SexpSerializer(JsonParser(input));
assertEq(expect, actual);
}
function SerializerTest() {
verifySerializer(["a", 1, 2],'["a",1,2]');
verifySerializer(["a", [1, 2]],'["a",\n [1,2]\n]');
}
function UnitTest() {
try {
EvalTest();
SerializerTest();
dp("test sucess!");
}catch(e) {
dp("test fail!");
dp(e);
}
}
var KEY_ENTER = 13;
var KEY_LEFT = 37;
var KEY_RIGHT = 39;
var KEY_C = 67;
var KEY_D = 68;
var KEY_E = 69;
var KEY_I = 73;
var KEY_J = 74;
var KEY_L = 76;
var KEY_O = 80;
var KEY_V = 86;
var KEY_W = 87;
var g_selected = undefined;
function onload() {
UnitTest();
var canv = $("mathcanvas");
canv.addEventListener("click", function(evt) {
g_continue_replace = false;
UnSelectExpression();
var id = evt.target.getAttribute("id");
var obj = g_hash[id];
if(!obj) {
return;
}
g_selected = {obj: obj, elem: evt.target};
g_selected.elem.setAttribute("class", "selectedTarget");
// alert(g_selected.elem);
});
document.body.addEventListener("keyup", function(evt) {
if($('input') == document.activeElement)
return;
if(evt.keyCode == KEY_I &&
evt.shiftKey) {
Import();
return;
}
if(evt.keyCode == KEY_E &&
evt.shiftKey) {
Export();
return;
}
if(evt.keyCode == KEY_O && evt.shiftKey) {
Overwrite($('input').value);
return;
}
if(evt.keyCode == KEY_L){
if(evt.shiftKey) {
Replace(true);
}else{
Replace(false);
}
Update(g_sexp);
}
if(!g_selected)
return;
if(evt.keyCode == KEY_D &&
evt.shiftKey) {
PartialDerivative(g_selected);
Update(g_sexp);
}
if(evt.keyCode == KEY_W) {
WidenSelection(g_selected);
Update(g_sexp);
}
if(evt.keyCode == KEY_C) {
Copy(g_selected.obj);
}
if(evt.keyCode == KEY_V){
if(evt.shiftKey) {
Paste(g_selected.obj, true);
}else{
Paste(g_selected.obj, false);
}
Update(g_sexp);
}
});
document.body.addEventListener("keypress", function(evt) {
if(!g_selected)
return;
if(evt.keyCode == KEY_LEFT) {
MoveLeftTerm(g_selected);
Update(g_sexp);
} else if (evt.keyCode == KEY_RIGHT) {
MoveRightTerm(g_selected);
Update(g_sexp);
} else if (evt.keyCode == KEY_ENTER){
Register($("input").value);
}
// alert(evt.charCode);
// alert(evt.keyCode);
});
}
function UnSelectExpression(notClear) {
if(g_selected) {
g_selected.elem.setAttribute("class", "");
}
if(!notClear)
g_selected = undefined;
}
function OnInputKeyDown(evt) {
if(evt.keyCode == KEY_J && evt.ctrlKey)
{
evt.stopPropagation();
evt.preventDefault();
UpdateInputToCanvas();
return false;
}
return true;
}
</script>
<br>
<textarea id="input" rows="2" cols="100" onkeydown="OnInputKeyDown(event)" onfocus="UnSelectExpression();"></textarea><br>
<input value="Set" type="button" onclick="UpdateInputToCanvas();">
<input value="Register" type="button" onclick="Register($('input').value);">
<input value="Overwrite" type="button" onclick="Overwrite($('input').value);">
<br>
<div id="mathcanvas"></div>
<ul id="cutbuffer"></ul>
<hr>
<input value="Clear" type="button" onclick="onClear();"><br>
<textarea id="console" rows="10" cols="100" ></textarea><br>
<hr>
<h3>キーバインド</h3>
<dl>
<dt>c</dt><dd>選択範囲をコピー領域に追加</dd>
<dt>v</dt><dd>選択されている部分をコピーバッファの先頭で上書き(さらに連打でコピーバッファを回転。Shiftキーと同時押しで逆回転)</dd>
<dt>l</dt><dd>コピーバッファの先頭をinputに入れてC-j(さらに連打でコピーバッファを回転。Shiftキーと同時押しで逆回転)</dd>
<dt>w</dt><dd>選択範囲を広げる</dd>
<dt>D</dt><dd>選択要素を偏微分</dd>
<dt>E</dt><dd>Export</dd>
<dt>I</dt><dd>Import</dd>
<dt>C-j (textarea内)</dt><dd>テキストエリア内を評価してmathcanvasに表示</dd>
<dt>O</dt><dd>チェックされた式を上書き</dd>
</dl>
<hr>
以下は適当な例。<br>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML">
<mi id="73">x</mi><mo id="72">=</mo><mrow id="75"><mi id="76">y</mi><mo>+</mo><mi id="77">z</mi></mrow>
</math>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML">
<mfrac id="687">
<mrow id="691">
<mi id="692">b</mi>
<mi id="693">c</mi>
</mrow>
<mrow>
<mrow id="696">
<mo>-</mo>
<mi id="697">x(t)</mi>
</mrow>
<mo>+</mo>
<mi id="699">a</mi>
<mo>+</mo>
<mfrac id="701">
<mrow id="703">
<mi id="704">&pi;</mi>
<mi id="705">k</mi>
</mrow>
<msup>
<mi id="709">e</mi>
<mrow id="711">
<mo>-</mo>
<mrow id="713">
<mi id="714">&rho;</mi>
<mi id="715">t</mi>
</mrow>
</mrow>
</msup>
</mfrac>
<mrow id="722">
<mn id="723">2</mn>
<mi id="724">b</mi>
</mrow>
</mrow>
</mfrac>
</math>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML">
<mfrac><mi>x</mi><mi>y</mi></mfrac>
</math>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML">
<msup>
<mi>a</mi>
<mi>b</mi>
</msup>
</math>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML">
<mrow class="selectedTarget">
<mi>a</mi>
<mi>b</mi>
<mi>c</mi>
</mrow>
</math>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML">
<mi>
&Laplacetrf;
</mi>
</math>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML">
<msubsup>
<mo>&Integral;</mo>
<mi>a</mi>
<mi>&infin;</mi>
</msubsup>
<mi>x</mi>
<mi>dt</mi>
</math>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML">
<mo>&Integral;</mo>
<mi>x</mi>
<mi>dt</mi>
</math>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML">
<mover>
<mi>r</mi>
<mo>.</mo>
</mover>
</math>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML">
<mo>&lambda;</mo>
</math>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML">
<msup>
<mrow>
<msub>
<mrow>
<mi> e </mi>
</mrow>
<mrow>
<mi>a</mi>
</mrow>
</msub>
</mrow>
<mrow>
<mo> - </mo>
<mi> &#x03C1;<!--greek small letter rho--> </mi>
<mi> x </mi>
</mrow>
</msup>
</math>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML">
<msubsup>
<mrow>
<mi> e </mi>
</mrow>
<mrow>
<mi>a</mi>
</mrow>
<mrow>
<mo> - </mo>
<mi> &#x03C1;<!--greek small letter rho--> </mi>
<mi> x </mi>
</mrow>
</msubsup>
</math>
<br>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML">
<mn> 3 </mn>
<mo> + </mo>
<mn> 4 </mn>
</math>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML">
<mrow id="hoge">
<munderover>
<mo>&int;</mo>
<mn>0</mn>
<mn>1</mn>
</munderover>
<mrow>
<msup>
<mi>e</mi>
<mi id="x">x</mi>
</msup>
<mi id="d">d</mi>
<mi>x</mi>
</mrow>
</mrow>
</math>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mfenced>
<mrow>
<mi> a </mi>
<mo> + </mo>
<mi> b </mi>
</mrow>
</mfenced>
</math>
以下はダメ
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
<cn type="complex-cartesian"> 12.3 <sep/> 5 </cn>
<bind id="outer"><csymbol cd="fns1">lambda</csymbol>
<bvar><ci>x</ci></bvar>
<apply><ci>f</ci>
<bind id="inner"><csymbol cd="fns1">lambda</csymbol>
<bvar><ci>x</ci></bvar>
<share id="copy" href="#orig"/>
</bind>
<apply id="orig"><ci>g</ci><ci>x</ci></apply>
</apply>
</bind>
</mrow>
</math>
<iframe id='iframe' style="display:none;"></iframe>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment