Sharmaans has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/203954

Change subject:         LaTeX to Mathematica Function Translation PHP Regex 
replacement of LaTeX function input into corresponding Mathematica function
......................................................................

LaTeX to Mathematica Function Translation
PHP Regex replacement of LaTeX function input into corresponding Mathematica 
function

Change-Id: Ie5ef7ee76c9a9daa1b3c42a007914f8f1b9a6d2e
---
A .idea/deployment.xml
M MathSearch.alias.php
M MathSearch.php
A includes/special/LaTeXTranslator.php
4 files changed, 502 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/MathSearch 
refs/changes/54/203954/1

diff --git a/.idea/deployment.xml b/.idea/deployment.xml
new file mode 100644
index 0000000..d53359f
--- /dev/null
+++ b/.idea/deployment.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="PublishConfigData">
+    <serverData>
+      <paths name="ecf">
+        <serverdata>
+          <mappings>
+            <mapping 
deploy="/srv/vagrant/mediawiki/extensions/MathSearch/includes/special" 
local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+    </serverData>
+  </component>
+</project>
\ No newline at end of file
diff --git a/MathSearch.alias.php b/MathSearch.alias.php
index 1e7da27..0d2a86d 100644
--- a/MathSearch.alias.php
+++ b/MathSearch.alias.php
@@ -18,6 +18,7 @@
        'MathIndex' => array( 'MathIndex', 'Math Index' ),
        'MathUpload' => array( 'MathUpload', 'Math Upload' ),
        'MathDownload' => array( 'MathDownload', 'Math Download' ),
+       'LaTeXTranslator' => array( 'LaTeXTranslator', 'LaTeX Translator' ),
 );
 
 /** Arabic (العربية) */
diff --git a/MathSearch.php b/MathSearch.php
index 5fbbafc..d96ebbc 100644
--- a/MathSearch.php
+++ b/MathSearch.php
@@ -49,6 +49,7 @@
 $wgAutoloadClasses['MathSearchUtils'] = __DIR__ . 
'/includes/MathSearchUtils.php';
 $wgAutoloadClasses['MathSearchTerm'] = __DIR__ . 
'/includes/MathSearchTerm.php';
 $wgAutoloadClasses['MwsDumpWriter'] = __DIR__ . '/includes/MwsDumpWriter.php';
+$wgAutoloadClasses['LaTexTranslator'] = __DIR__ . 
'/includes/special/LaTeXTranslator.php';
 
 $wgMessagesDirs['MathSeach'] = __DIR__ . '/i18n';
 $wgExtensionMessagesFiles['MathSearch'] = __DIR__ . '/MathSearch.i18n.php';
@@ -61,6 +62,7 @@
 $wgSpecialPageGroups['MathDebug'] = 'mathsearch';
 $wgSpecialPageGroups['MathIndex'] = 'mathsearch';
 $wgSpecialPageGroups['DisplayTopics'] = 'mathsearch';
+$wgSpecialPageGroups['LaTexTranslator'] = 'mathsearch';
 
 $wgSpecialPages['MathSearch'] = 'SpecialMathSearch';
 $wgSpecialPages['FormulaInfo'] = 'FormulaInfo';
@@ -68,6 +70,7 @@
 $wgSpecialPages['MathDebug'] = 'SpecialMathDebug';
 $wgSpecialPages['MathIndex'] = 'SpecialMathIndex';
 $wgSpecialPages['DisplayTopics'] = 'SpecialDisplayTopics';
+$wgSpecialPages['LaTexTranslator'] = 'LaTexTranslator';
 
 $wgHooks['LoadExtensionSchemaUpdates'][] = 
'MathSearchHooks::onLoadExtensionSchemaUpdates';
 $wgHooks['MathFormulaPostRender']['updateIndex'] = 
'MathSearchHooks::updateMathIndex';
diff --git a/includes/special/LaTeXTranslator.php 
b/includes/special/LaTeXTranslator.php
new file mode 100644
index 0000000..0804743
--- /dev/null
+++ b/includes/special/LaTeXTranslator.php
@@ -0,0 +1,484 @@
+<?php
+class LaTeXTranslator extends SpecialPage {
+    function __construct() {
+        parent::__construct( 'LaTeXTranslator' );
+    }
+
+    function execute( $par ) {
+        $request = $this->getRequest();
+        $output = $this->getOutput();
+        $this->setHeaders();
+
+        # Get request data from, e.g.
+        $param = $request->getText( 'param' );
+
+        error_reporting(0);
+        ini_set('display_errors', 0);
+
+        function brackR($arg){
+            $arg = trim($arg, " ");
+            if ($arg[0] == "{" && $arg[strlen($arg)-1] == "}"){
+                $arg = substr($arg,1,strlen($arg)-2);
+            }
+            return $arg;
+        }
+        // EXTREMELY INEFFICIENT to remove captured curly braces--
+        // need regex to not capture brackets
+        // Also, algorithm could be further condensed
+        // by classification of functions by argument type
+        // PHP FORM: 
http://stackoverflow.com/questions/5968280/how-to-run-a-php-function-from-an-html-form?rq=1
+        
//----------------------------------------------------------------------------------------------
 //    \divergence{x}
+        $par =  "(\{(?>[^{}]|(?-1))*\})";
+        $arg = "(\\\\[?[A-z]*\]?|[0-9])";
+        $data = '
+\Alpha = 0.5
+\Beta = 0.4
+\Gamma = 0.3
+\Delta = 0.2
+\Epsilon = 0.1
+\lambda = 6
+\mu = 5
+\nu = 4
+\rho = 3
+\sigma = 2
+\phi = 1
+\nu = 5
+\sin@@\sigma
+\AiryAi@{\phi}
+\AiryBi{\phi}
+\AiryModulusM@{\nu}
+\AGM@{\phi}{\sigma}
+\AngerJ{\phi}@{\sigma}
+\AppellFi@{\phi}{\sigma}{\rho}{\nu}{\mu}{\lambda}
+\BarnesGamma@{\sigma}
+\BesselJ{\Alpha}@{\Alpha}
+\binom{\sigma}{\phi}
+\CatalanNumber@{\Epsilon}
+\ceiling{\sigma}
+\ChebyT{\Alpha}@{\Alpha}
+\conj{3 + 7 I}
+\coshint@\phi
+\Cylinder{\Epsilon}{\phi}
+\DawsonsInt@{\phi I}
+\DedekindModularEta@{\phi + I}
+\deriv{\sigma x}{x}
+\det{\phi}
+\CompEllIntK@@{\Alpha}
+\EllIntK@{\Delta\phi}
+\EulerBeta{\phi}{\sigma}
+\exp@{\Delta x}
+\ExpInti@{\Epsilon}
+\frac{\phi}\sigma
+\FresnelSin@{\Alpha}
+\floor{\phi*\sigma}
+\GenHermiteH{\phi}@{\sigma}
+\Gudermannian{\cos@\phi}
+\HurwitzZeta@{\Gudermannian{\sin@\phi}}{\Alpha}
+\HypergeoF@{\Alpha}{\Beta}{\Gamma}{\Delta}
+\HyperpFq{\phi}{\sigma}@{\phi}{\phi,\sigma}{\rho}
+\IncBeta{\rho}@{\phi}{\sigma}
+\inverfc@\phi
+\Jacobisd@{\nu}{\sigma}
+\JacobiP{\phi}{\sigma}{\rho}@{\nu}
+\JacobiZeta@{\Alpha}{\Alpha}
+\Kelvinber{\nu}@{\Gamma}
+\Kronecker{\Alpha}{\Alpha}
+\LaguerreL[\Alpha]{\nu}@{x}
+\LegendreP{\Alpha}@\phi
+\LogInt@{\Alpha}
+\LerchPhi@{\phi}{\sigma}{\rho}
+\MittagLeffler{\phi}{\sigma}{\rho}
+5\mod2
+\ModularJ{\phi}
+\pochhammer{\phi}{\sigma}
+\polygamma{\Alpha}@{\Beta}
+\Polylogarithm{\Alpha}@{\Alpha}
+\qFactorial{\lambda}{\mu}{\nu}
+\qGamma{\Alpha}@{\Alpha}
+\RamanujanTau@{\rho}
+\realpart{\rho I+\nu}
+\RiemannXi@{\Alpha}
+\ScorerHi@{\Alpha}
+\sign@{-\Alpha}
+\SinInt@{\Alpha}
+\SphBesselY{\Alpha}@{\phi}
+\SphHankelHii{\Alpha}@{\Beta}
+\SphericalHarmonicY{\Epsilon}{\Delta}@{\Gamma}{\Beta}
+\SpheroidalEigenvalueLambda{\Epsilon}{\Delta}@{\Gamma}
+\SpheroidalPs{\Epsilon}{\Delta}@{\Gamma}{\Beta}
+\sqrt\sigma
+\StruveL{\Epsilon}@{\Delta}
+\WeberE{\Epsilon}{\Delta}
+\WhitW{\Epsilon}{\Delta}@{\Gamma}';
+        // regex cannot parse multiple nesting levels: 
'\log{\log{\cos{\sin{\Gudermannian1}}}}}'
+        //$data = '\AiryModulusM@{x}';
+        $data = $_POST["input"];
+
+        $matcher = array(//"~(\{)~" , "~(\})~" ,
+            # Trignometric & Trig Integrals: \acosh@{x}
+            
"~\\\(a?(?>cos|sin|tan|csc|cot|sec)h?)(int)?@{0,2}(".$arg."|".$par.")~ie",
+            # Logarithm
+            "~\\\(?>log|ln)b?".$par."?@{0,2}(".$arg."|".$par.")~ie",
+            # Airy: \AiryAi@{z}
+            "~\\\\Airy([B|A]i)@{0,2}(".$arg."|".$par.")~ie",
+            # Airy Modulus M: \AiryModulusM@{z}
+            "~\\\\AiryModulusM@{0,2}(".$arg."|".$par.")~ie",
+            # Arithmetic Geometric Mean: \AGM@{a}{g}
+            "~\\\\AGM@{0,2}(".$arg."|".$par.")(".$arg."|".$par.")~ie",
+            # Anger: \AngerJ{\nu}@{z}
+            "~\\\\AngerJ".$par."@{0,2}(".$arg."|".$par.")~ie",
+            # Appell: \AppellFi@{\alpha}{\beta}{\beta'}{\gamma}{x}{y}
+            
"~\\\\AppellF[i{1,3}v?]@{0,2}(".$arg."|".$par.")(".$arg."|".$par.")(".$arg."|".$par.")(".$arg."|".$par.")(".$arg."|".$par.")(".$arg."|".$par.")~ie",
+            # Barnes G: \BarnesGamma@{z}
+            "~\\\\BarnesGamma@{0,2}(".$arg."|".$par.")~ie",
+            # BesselJ: \BesselJ{n}@{z}  - default?? for BesselJ{nu}/Cheby w/ 
no z???
+            "~\\\Bessel([A-Z])".$par."@?(".$par.")?~ie",
+            # Binomial Coefficient: \binomial{m}{n}
+            "~\\\\binom(?>ial)?@{0,2}".$par.$par."~ie",
+            # Catalan Number: \CatalanNumber@{n}
+            "~\\\CatalanNumber@{0,2}(".$arg."|".$par.")~ie",
+            # Ceiling: \ceiling{x}
+            "~\\\ceiling@{0,2}(".$arg."|".$par.")~ie",
+            # Chebyshev: \ChebyT{x}@{n}
+            "~\\\Cheby([A-Z])".$par."@?(".$par.")?~ie",
+            # Complex Conjugate: \conj{z}
+            "~\\\conj@{0,2}".$par."~ie",
+            # Cylinder: \Cylinder{\nu}@{z}
+            "~\\\\Cylinder".$par."@{0,2}(".$arg."|".$par.")~ie",
+            # Dawson's Integral: \DawsonsInt@{z}
+            "~\\\DawsonsInt@{0,2}(".$arg."|".$par.")~ie",
+            # Dedekind's Eta: \DedekindModularEta@{\tau}
+            "~\\\DedekindModularEta@{0,2}(".$arg."|".$par.")~ie",
+            # Derivative: \deriv{f}{x}
+            "~\\\p?deriv@{0,2}".$par.$par."~ie",
+            # Determinant: \det
+            "~\\\det@{0,2}(".$arg."|".$par.")~ie",
+            # Divergence: \divergence
+            "~\\\divergence@{0,2}(".$arg."|".$par.")~ie",
+            # Elliptic Integral: \CompEllIntC@{a}
+            
"~\\\\(?>Comp)?EllInt[C]?([A-Z]|Pi)@{0,3}(".$arg."|".$par.")(".$arg."|".$par.")?~ie",
+            # Error: \erf@{z}
+            "~\\\\erf[a-z]?@{0,2}(".$arg."|".$par.")~ie",
+            # Euler Beta & Gamma: \EulerBeta@{a}{b}
+            
"~\\\\Euler(Beta|Gamma)@{0,2}(".$arg."|".$par.")(".$arg."|".$par.")?~ie",
+            # Exponential: \exp@{x}
+            "~\\\\exp@{0,2}(".$arg."|".$par.")~ie",
+            # Exponential Integral: \ExpInti@{x}
+            "~\\\\ExpInt([a-z])?".$par."?@{0,2}(".$arg."|".$par.")~ie",
+            # Floor: \floor{x}
+            "~\\\\floor(".$arg."|".$par.")~ie",
+            # Fraction: \frac{a}{b}
+            "~\\\\frac(".$arg."|".$par.")(".$arg."|".$par.")~ie",
+            # Fresnel: \FresnelSin@{z}
+            "~\\\\Fresnel([a-z]*)@{0,2}(".$arg."|".$par.")~ie",
+            # Greek Letter: \Alpha
+            
"~\\\(alpha|beta|gamma|delta|epsilon|varepsilon|zeta|eta|theta|vartheta|
+    gamma|kappa|lambda|mu|nu|xi|o[^mega]|pi|varpi|rho|varrho|sigma|varsigma
+    |tau|upsilon|phi|varphi|chi|psi|omega)~ie",
+            # Gamma: \GammaP@{a}{z}
+            "~\\\\Gamma(?>[PQ])@?(".$arg."|".$par.")(".$arg."|".$par.")~ie",
+            # Gudermannian: \Gudermannian@{x}
+            "~\\\\(arc)?Gudermannian@{0,2}(".$arg."|".$par.")~ie",
+            # Generalized Hermite: \GenHermiteH{n}@{x}
+            "~\\\\GenHermiteH".$par."@{0,2}(".$arg."|".$par.")~ie",
+            # HurwitzZeta: \HurwitzZeta@{s}{a}
+            "~\\\\HurwitzZeta@?(".$arg."|".$par.")(".$arg."|".$par.")~ie",
+            # Hypergeometric: \HypergeoF@{a}{b}{c}{d}
+            "~\\\\HypergeoF(@{0,3})".$par.$par.$par.$par."~ie",
+            # Hypergeometric (Generalized): \HyperpFq{p}{q}@{{\bf a}}{{\bf 
b}}{z}
+            
"~\\\\HyperpFq(".$arg."|".$par.")(".$arg."|".$par.")@{0,3}(".$arg."|".$par.")(".$arg."|".$par.")(".$arg."|".$par.")~ie",
+            # Incomplete Beta & Gamma: \IncBeta{x}@{a}{b}, \IncGamma@{a}{z}
+            
"~\\\\Inc(Beta|Gamma)".$par."?@{0,2}(".$arg."|".$par.")(".$arg."|".$par.")~ie",
+            # Inverse Error (including complementary): \inverfc@{x}
+            "~\\\\inverf(c)?@{0,2}(".$arg."|".$par.")~ie",
+            # Imaginary Unit: \iunit
+            "~\\\\iunit~ie",
+            # Jacobi Elliptics: \Jacobisd@{z}{k}
+            
"~\\\\(arc)?Jacobi([a-z]{2}|Zeta)@{0,2}(".$arg."|".$par.")(".$arg."|".$par.")~ie",
+            # Jacobi Polynomials: \JacobiP{\alpha}{\beta}{n}@{x}
+            "~\\\\JacobiP".$par.$par.$par."@{0,2}(".$arg."|".$par.")~ie",
+            # Kelvin: \Kelvinber{\nu}@{x}
+            "~\\\\Kelvin([bk]e[ri])(".$par.")@{0,2}(".$arg."|".$par.")?~ie",
+            # Klein Invariant: \ModularJ@{\tau}
+            "~\\\\ModularJ".$par."~ie",
+            # Kronecker: \Kronecker{j}{k}
+            "~\\\\Kronecker".$par.$par."~ie",
+            # LaguerreL[\a]{n}@{x}
+            "~\\\\LaguerreL(\[.*\])?".$par."@?(".$arg."|".$par.")~ie",
+            # Legendre: \LegendreP[\mu]{\nu}@{x}
+            "~\\\\Legendre(P|Q)(\[.*\])?(".$par.")@?(".$arg."|".$par.")?~ie",
+            # Associated Legendre: \AssLegendrePoly{n}@{x}{c}
+            
"~\\\\AssLegendrePoly(".$par.")@?(".$arg."|".$par.")(".$arg."|".$par.")?~ie",
+            # LerchPhi: \LerchPhi@{z}{s}{a}
+            
"~\\\\LerchPhi@{0,2}(".$arg."|".$par.")(".$arg."|".$par.")(".$arg."|".$par.")~ie",
+            # Log Integral: \LogInt@{x}
+            "~\\\\LogInt@{0,2}(".$arg."|".$par.")~ie",
+            # Mittag-Leffler: \MittagLeffler{a}{b}@{z}
+            "~\\\\MittagLeffler".$par.$par."@{0,2}(".$arg."|".$par.")~ie",
+            # Modulus: n \mod m
+            "~(".$arg."|".$par.")\\\\mod@{0,2}(".$arg."|".$par.")~ie",
+            # Permutations: \Permutations{n}
+            "~\\\\Permutations@{0,2}(".$arg."|".$par.")~ie",
+            # Pochhammer: \pochammer{a}{n}
+            "~\\\\pochhammer@{0,2}".$par.$par."~ie",
+            # PolyGamma: \polygamma{n}@{z}
+            "~\\\\Polygamma".$par."@{0,2}(".$arg."|".$par.")~ie",
+            # PolyLog: \Polylogarithms{x}@{z}
+            "~\\\\Polylogarithm".$par."@{0,2}(".$arg."|".$par.")~ie",
+            # Q Factorial: \qFactorial{a}{q}{n}
+            "~\\\\qFactorial@{0,2}".$par.$par.$par."~ie",
+            # Q Gamma: \qGamma{q}@{z}
+            "~\\\\qGamma".$par."@{0,2}(".$arg."|".$par.")~ie",
+            # Ramanujan Tau: \RamanujanTau@{k}
+            "~\\\\RamanujanTau@{0,2}(".$arg."|".$par.")~ie",
+            # Real Part: \realpart{z}
+            "~\\\\realpart@{0,2}".$par."~ie",
+            # Riemann: \RiemannXi@{s}
+            "~\\\\Riemann(Xi)@{0,2}(".$arg."|".$par.")~ie",
+            # Scorer: \ScorerHi@{z}
+            "~\\\\Scorer([G|H]i)@{0,2}(".$arg."|".$par.")~ie",
+            # Sign: \sign@{x}
+            "~\\\\sign@{0,2}(".$arg."|".$par.")~ie",
+            # Sin Integral: \SinInt@{x}
+            "~\\\\Sin(h?)Int@{0,2}(".$arg."|".$par.")~ie",
+            # Spherical BesselJ/Y | HankelH1/H2: \SphBesselJ{n}@{z}
+            
"~\\\\Sph(Bessel|Hankel)(J|Y|Hii?)".$par."@{0,2}(".$arg."|".$par.")~ie",
+            # Spherical Harmonic: \SphericalHarmonicY{l}{m}@{\theta}{\phi}
+            
"~\\\\SphericalHarmonicY".$par.$par."@?(".$arg."|".$par.")?(".$arg."|".$par.")?~ie",
+            # Spheroidal Eigenvalue: \SpheroidalEigenvalueLambda{m}{n}@{\gamma}
+            
"~\\\\SpheroidalEigenvalueLambda".$par.$par."@?(".$arg."|".$par.")?~ie",
+            # Spheroidal Ps: \SpheroidalPs{m}{n}@{z}{\gamma^2}
+            
"~\\\\Spheroidal(P|Q)s".$par.$par."@?(".$arg."|".$par.")?(".$arg."|".$par.")?~ie",
+            # Sqrt: \sqrt@{x}
+            "~\\\\sqrt@{0,2}(".$arg."|".$par.")~ie",
+            # StruveH: \StruveH{\nu}@{z}
+            "~\\\\Struve(H|L)".$par."@{0,2}(".$arg."|".$par.")~ie",
+            # WeberE: \WeberE{\nu}@{z}
+            "~\\\\WeberE".$par."@{0,2}(".$arg."|".$par.")~ie",
+            # Whittaker: \WhittakerM{\kappa}{\mu}@{z}
+            "~\\\\Whit(M|W)".$par.$par."@{0,2}(".$arg."|".$par.")~ie"
+        );
+
+        $replace = array(//'[', ']' ,
+            # Trignometric: ArcCosh[x]
+            "('$1'[0] == 
'a'?'Arc'.ucfirst(strtolower(substr($1,1))):ucfirst(strtolower('$1'))).(strlen('$2')>0?'Integral':'').'['.brackR('$3').']'",
+            # Logarithm: Log[x]
+            "'Log['.(strlen('$1')>0?'$1,':'').brackR('$2').']'",
+            # Airy: AiryAi[z]
+            "'Airy$1['.brackR('$2').']'",
+            # Airy Modulus M: Sqrt[AiryAi[x]^2+AiryBi[x]^2]
+            "'Sqrt[AiryAi['.brackR('$1').']^2+AiryBi['.brackR('$1').']^2]'",
+            # Arithmetic Geometric Mean: ArithmeticGeometricMean[a,b]
+            "'ArithmeticGeometricMean['.brackR('$1').','.brackR('$4').']'",
+            # Anger: AngerJ[\nu,z]
+            "'AngerJ['.brackR('$1').','.brackR('$2').']'",
+            # Appell: AppellF1[\alpha,\beta,\beta',\gamma,x,y]
+            
"'AppellF1['.brackR('$1').','.brackR('$4').','.brackR('$7').','.brackR('$10').','.brackR('$13').','.brackR('$16').']'",
+            # Barnes G: BarnesG[z]
+            "'BarnesG['.brackR('$1').']'",
+            # BesselJ: BesselJ[n,z]
+            
"'Bessel$1['.brackR('$2').(strlen('$3')>0?','.brackR('$3'):',0').']'",
+            # Binomial Coefficient: Binomial[n,m]
+            "'Binomial['.brackR('$2').','.brackR('$1').']'",
+            # Catalan Number: CatalanNumber[n]
+            "'CatalanNumber['.brackR('$1').']'",
+            # Ceiling: Ceiling[x]
+            "'Ceiling['.brackR('$1').']'",
+            # Chebyshev: ChebyshevT[n,x]
+            
"'Chebyshev$1['.brackR('$2').(strlen('$3')>0?','.brackR('$3'):',0').']'",
+            # Complex Conjugate: Conjugate[z]
+            "'Conjugate['.brackR('$1').']'",
+            # Cylinder: ParabolicCylinderD[\nu,z]
+            "'ParabolicCylinderD['.brackR('$1').','.brackR('$2').']'",
+            # Dawsons Integral: DawsonF[z]
+            "'DawsonF['.brackR('$1').']'",
+            # Dedekind's Eta: DedekindEta[\tau]
+            "'DedekindEta['.brackR('$1').']'",
+            # Derivative: D[f,x]
+            "'D['.brackR('$1').','.brackR('$2').']'",
+            # Determinant: Det[a]
+            "'Det[$1]'",
+            # Divergence: divergence
+            "'Div[$1]'",
+            # Elliptic Integral: EllipticC[x, Sqrt[m]]
+            "'Elliptic$1['.(strlen('$5')>0?brackR('$2').', 
Sqrt['.brackR('$5').']':'Sqrt['.brackR('$2').']').']'",
+            # Error: Erf[z]
+            "'Erf['.brackR('$1').']'",
+            # Euler Beta & Gamma: Beta[a,b]
+            
"'$1['.brackR('$2').(strlen('$5')>0&&strtolower('$1')=='beta'?','.brackR('$5'):'').']'",
+            # Exponential: Exp[x]
+            "'Exp['.brackR('$1').']'",
+            # Exponential Integral: ExpIntegralEi[z]
+            
"'ExpIntegralE'.($1=='i'?'i':'').'['.(strlen('$2')>0?brackR('$2').',':'').brackR('$3').']'",
+            # Floor: Floor[x]
+            "'Floor['.brackR('$1').']'",
+            # Fraction: a/b
+            
"(strlen('$3')>0?'('.brackR('$1').')':brackR('$1')).'/'.(strlen('$6')>0?'('.brackR('$4').')':brackR('$4'))",
+            # Fresnel: FresnelS[z]
+            "'Fresnel'.ucfirst('$1'[0]).'['.brackR('$2').']'",
+            # Greek Letter: \[CapitalAlpha]
+            "'\\\['.(strtolower('$1') != '$1'?'Capital':'').ucfirst('$1').']'",
+            # Gamma (Incomplete):
+            "'Gamma['.brackR('$1').','.brackR('$4').']'",
+            # Gudermannian: Gudermannian[z]
+            "(strlen('$1')>0?'Inverse':'').'Gudermannian['.brackR('$2').']'",
+            # Hermite: HermiteH[n,x]
+            "'HermiteH['.brackR('$1').','.brackR('$2').']'",
+            # HurwitzZeta: HurwitzZeta[s,a]
+            "'HurwitzZeta['.brackR('$1').','.brackR('$4').']'",
+            # Hypergeometric: Hypergeometric2F1[a,b,c,d]
+            "'Hypergeometric2F1[$2,$3,$4,$5]'",
+            # Hypergeometric (Generalized): HypergeometricPFQ[a,b,c]
+            "'HypergeometricPFQ[$7,$10'.','.brackR('$13').']'",
+            # Incomplete Beta & Gamma: Beta[z,a,b], Gamma[a,z]
+            
"'$1['.(strlen('$2')>0?brackR('$2').',':'').brackR('$3').','.brackR('$6').']'",
+            # Inverse Error (including complementary): InverseErfc[x]
+            "'InverseErf$1['.brackR('$2').']'",
+            # Jacobi Elliptics: JacobiSD[u,m]
+            "(strlen('$1')>0?'Inverse':'').'Jacobi'.(strlen($2) == 2 ? 
strtoupper('$2') : 'Zeta').'['.brackR('$3').', Sqrt['.brackR('$6').']]'",
+            # Jacobi Polynomial: JacobiP[n,a,b,x]
+            
"'JacobiP['.brackR('$2').','.brackR('$1').','.brackR('$3').','.brackR('$4').']'",
+            # Kelvin: KelvinBer[n,z]
+            
"'Kelvin'.ucfirst('$1').'['.brackR('$2').(strlen(brackR('$4'))>0?','.brackR('$4'):'').']'",
+            # Klein Invariant: KleinInvariantJ[\tau]
+            "'KleinInvariantJ['.brackR('$1').']'",
+            # Kronecker: Kronecker[j,k]
+            "'KroneckerDelta['.brackR('$1').','.brackR('$2').']'",
+            # LaguerreL: LaguerreL[n,a,x]
+            
"'LaguerreL['.brackR('$2').','.(strlen(brackR('$1'))>0?brackR('$1').',':'').brackR('$3').']'",
+            # LegendreP/Q: LegendreP[n,x]
+            
"'Legendre$1['.brackR('$3').','.(strlen(brackR('$2'))>0?brackR('$2').',':'').brackR('$5').']'",
+            # Associated Legendre: LegendreP[n,m,x]
+            "'Legendre$1['.brackR('$3').','.brackR('$2').','.brackR('$5').']'",
+            # LerchPhi: LerchPhi[z,s,a]
+            "'LerchPhi['.brackR('$1').','.brackR('$4').','.brackR('$7').']'",
+            # Log Integral: LogIntegral[x]
+            "'LogIntegral['.brackR('$1').']'",
+            # Mittag-Leffler: MittagLefflerE[\alpha,\beta,z]
+            
"'MittagLefflerE['.brackR('$1').','.brackR('$2').','.brackR('$3').']'",
+            # Modulus: Mod[m,n]
+            "'Mod['.brackR('$1').','.brackR('$4').']'",
+            # Permutations: Permutations[n]
+            "'Permutations['.brackR('$1').']'",
+            # Pochhammer: Pochhammer[a,n]
+            "'Pochhammer['.brackR('$1').','.brackR('$2').']'",
+            # PolyGamma: PolyGamma[n,z]
+            "'PolyLog['.brackR('$1').','.brackR('$2').']'",
+            # PolyLog: PolyLog[x,z]
+            "'PolyLog['.brackR('$1').','.brackR('$2').']'",
+            # Q Factorial: QFactorial[a,q,n]
+            "'QFactorial['.brackR('$2').','.brackR('$3').']'",
+            # Q Gamma: QGamma[z,q]
+            "'QGamma['.brackR('$2').','.brackR('$1').']'",
+            # Ramanujan Tau: RamanujanTau[k]
+            "'RamanujanTau['.brackR('$1').']'",
+            # Real Part: Re[z]
+            "'Re['.brackR('$1').']'",
+            # Riemann: RiemannXi[s]
+            "'Riemann$1['.brackR('$2').']'",
+            # Scorer: ScorerHi[z]
+            "'Scorer$1['.brackR('$2').']'",
+            # Sign: Sign[z]
+            "'Sign['.brackR('$1').']'",
+            # Sin Integral: SinInt[z]
+            "'Sin$1Integral['.brackR('$2').']'",
+            # Spherical BesselJ/Y | HankelH1/H2: SphericalBesselJ[n,z]
+            "'Spherical$1'.(substr('$2',0,2) !== 
'Hi'?'$2':'H'.(strlen('$2')-1)).'['.brackR('$3').','.brackR('$4').']'",
+            # Spherical Harmonic: SphericalHarmonicY[l,m,\theta,\phi]
+            
"'SphericalHarmonicY['.brackR('$1').','.brackR('$2').','.brackR('$3').','.brackR('$6').']'",
+            # Spheroidal Eigenvalue: SpheroidalEigenvalue[n,m,\gamma]
+            
"'SpheroidalEigenvalue['.brackR('$1').','.brackR('$2').','.brackR('$3').']'",
+            # Spheroidal Ps: SpheroidalPs[n,m,\gamma,z]
+            
"'Spheroidal$1S['.brackR('$2').','.brackR('$3').',Sqrt['.brackR('$7').'],'.brackR('$4').']'",
+            # Sqrt: Sqrt[x]
+            "'Sqrt['.brackR('$1').']'",
+            # StruveH: StruveH[n,z]
+            "'Struve$1['.brackR('$2').','.brackR('$3').']'",
+            # WeberE: WeberE[\nu,z]
+            "'WeberE['.brackR('$1').','.brackR('$2').']'",
+            # Whittaker: WhittakerW[k,m,z]
+            "'Whittaker$1['.brackR('$2').','.brackR('$3').','.brackR('$4').']'"
+        );
+        if (isset($_POST["input"])) {
+            $translated = preg_replace($matcher, $replace, $data);
+            $translated = preg_replace($matcher, $replace, $translated);
+            //$translated = preg_replace_callback($matcher, function($matches) 
use (&$replace) {return array_shift($replace);}, $data);
+            //$translated = preg_replace_callback($matcher, function($matches) 
use (&$replace) {return array_shift($replace);}, $translated);
+            //echo "\n" . $translated;
+        }
+
+        $wikitext = '<b>hellow</b>!';
+        //$output->
+         echo "<style>
+            html {height:100vh}
+            body{
+            //background-color:#70DBFF;
+            text-align:center;
+            font-family:consolas; //lucida console;
+            height: 100vh;
+            }
+
+            #container {
+            opacity:0.93;
+            filter:alpha(opacity=40);
+            width:900px;
+            margin:0 auto;
+            margin-top:0px;
+            margin-bottom:-50px;
+            border-width:20px;
+            border-style:solid;
+            border-color:#FFF #145266 #FFF #145266;
+            background-color:#FCFEFF;
+            }
+
+            #pageheader {
+            text-align:center;
+            color:#303;
+            //background-color:#FFC;
+            margin:25px 25px -18px 25px;
+            }
+
+            h1 {
+            font-size:35pt;
+            color:#367588;
+            margin:5px 0px -10px 0px;
+            }
+
+            #form {
+            //height:35vh;
+            }
+
+            #footer {
+            font-size:8pt;
+            margin:0px 60px 5px 60px;
+            }
+        </style>
+        <body>
+        <div id='container'>
+        <script type='text/javascript'>
+        function SelectAll(id)
+        {
+            document.getElementById(id).focus();
+            document.getElementById(id).select();
+        }
+        </script> <!--<b style='font-family:courier;'>LaTeX</b>-->
+        <div id='pageheader'><h1>LaTeX to <b style='font-family:palatino 
linotype;font-size:25pt'><i>Mathematica</i></b> Translator</h1>
+            <h2>Functions Only</h2></div>
+        <form method='post' accept-charset='UTF-8'>
+        LaTeX input:<br>
+        <textarea name='input' rows='17' cols='100' placeholder='Enter LaTeX 
for translation'>";
+        if (isset($data)){echo $data;}
+        echo "</textarea><br><input type='submit' value='Translate'>
+        <!--action='TranslateFunction.php'<input type='text' name='latexinput' 
size='40' value='Enter LaTeX'>-->
+        <br><br>Translated Mathematica:<br>
+        <textarea name='output' id='output' rows='17' cols='100' 
placeholder='Translated Mathematica' onClick='SelectAll('output');' 
readonly='readonly'>";
+        if (isset($translated)){echo $translated;} echo "</textarea>
+        </form>
+        <div id='footer'>
+            Maintained by NIST DRMF &copy 2015
+        </div>
+        </div>
+        </body>
+        </html>";
+    }
+}

-- 
To view, visit https://gerrit.wikimedia.org/r/203954
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie5ef7ee76c9a9daa1b3c42a007914f8f1b9a6d2e
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/MathSearch
Gerrit-Branch: master
Gerrit-Owner: Sharmaans <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to