@totemorg/mathjx

3.10.0 • Public • Published

Extends MathJS with the following scripting-blocks:

if TEST
	DO
elseif TEST
	DO
:
else
	DO
end

switch TEST
	case TEST
		DO
	:
	default
		DO
end

try
	DO
catch
	DO
end

for INDEX
	DO
end

while TEST
	DO
end

until TEST
	DO
end

when EVENT
	DO
end

def f=(x,y, [a,b, ...], {u,v, ...}, ...)
	DO
end

Inline functions are supported using fat-arrows:

(x,y, [a,b, ...], {u,v, ...}, ...) => {
	DO
}

Because MathJS intrinsically protects against lax Matlab expressions, term-wise evaluation of intrinsically singular functions like cos must use Cos([x,y,z...]) or map([x,y,z,...], cos).

Transposes are likewise strict, so [x,y,z,...]', [[x,y,z,...]]', and [x;y;z;...]' produce [x,y,z,...], [x;y;z,...], and [x,y,z,...], respectively.

Multiple MathJX lines be coded using DO \ DO \ ....

Evaluate MathJX scripts using:

$( "script", ctx => { /* optional callback */ 
});

MathJX supports both MathJS tensors and native JS-style tensors:

var 
	A = $( [N1], function $ ( i, A ) { /*...*/ } ), 			// rank 1 
	B = $( [N1,N2], function $$ (i,j, B ) { /*...*/ } ), 		// rank 2
	C = $( [N1,N2,...NK], ( [i,j,...], C ) => { /*...*/ } )		// rank K

where initialization callbacks are optional. Tensors are similarly indexed using:

A.$( (i, A) => { /*...*/ } );				// rank 1
B.$$( (i,j, B) => { /*...*/ } );			// rank 2
C.for( [i,j,...], C ) { /*...*/ } );		// rank K

Manage

npm install @totemorg/mathjx	# Install
npm run start [ ? | $ | ...]	# Unit test
npm run verminor				# Roll minor version
npm run vermajor				# Roll major version
npm run redoc					# Regen documentation

Usage

Acquire and optionally configure MATHJX as follows:

import { JX } from "@totemorg/mathjx";

JX.config({
	key: value, 						// set key
	"key.key": value, 					// indexed set
	"key.key.": value					// indexed append
});

where configuration keys follow ENUMS deep copy conventions. See the Program Reference for usage examples.

Program Reference

Open/Close ## Modules
MATHJX

Process supplied mathjx-script by reducing the script to a mathjs script using the following language model:

if TEST
    BLOCK
elseif TEST
    BLOCK
:
else
    BLOCK
end

switch TEST case TEST BLOCK : default TEST BLOCK end

try BLOCK catch BLOCK end

for INDEX BLOCK end

while TEST BLOCK end

until TEST BLOCK end

when EVENT BLOCK end

def f=(x,y,...) BLOCK end

Inline functions are also supported using fat-arrows:

(x,y,...) => {
    BLOCK
}
array
JX

MATHJX

Process supplied mathjx-script by reducing the script to a mathjs script using the following language model:

if TEST
	BLOCK
elseif TEST
	BLOCK
:
else
	BLOCK
end

switch TEST
	case TEST
		BLOCK
	:
	default TEST
		BLOCK
end

try
	BLOCK
catch
	BLOCK
end

for INDEX
	BLOCK
end

while TEST
	BLOCK
end

until TEST
	BLOCK
end

when EVENT
	BLOCK
end

def f=(x,y,...)
	BLOCK
end

Inline functions are also supported using fat-arrows:

(x,y,...) => {
	BLOCK
}

Requires: module:mathjs, module:enums, module:cp
Author: ACMESDS

Param Type Description
pgm String | Array Script to reduce and execute. Use an Array to bypass default eol-tokenization.
blks Array Stash fo code blocks; initially [].
idx Number Current line index to start parsing; initially 0.
lang Object Language model; see code herein.

Example (js-reduction)

\\ program
	def f=(x,y)
		f=x+y;
	end

\\ reduces to
	def($ctx[1]) 

\\ with resulting context
	[ { test: 'f=(x,y)', code: 'f=x+y\n' } ]

Example (js-reduction)

\\ program
	for i
		i1
		i2
		for j
			j1; j2;
			while u\u1\end
		end
	end
\\ reduces to
	for($ctx[3]) 
\\ with resulting context 
	[
		{ test: 'u', code: 'u1\n' },
		{ test: 'j', code: 'j1; j2;\nwhile($ctx[1])' },
		{ test: 'i', code: 'i1\ni2\nfor($ctx[2])' }
	]

Example (js-reduction)

\\ program
	a1="this;is;a;test";
\\ reduces to
	a1=$ctx[1];
\\ with resulting context
		[ 'this;is;a;test' ]

Example (js-reduction)

\\ program
	somefn(1,2, \def f=(x,y)
		print("x=%f and y=%f",x,y);
	end
	)
\\ and program
	somefn(1,2, \(x,y) => {
		print("x=%f and y=%f",x,y);
	})
\\ reduces to
	def($ctx[2]))
\\ with resulting context
	[ 'x=%f and y=%f', { test: 'f=(x,y)', code: 'print($ctx[1],x,y);\n' } ]

Example (js-reduction)

\\ program
	def f=(x,y)
		f=x+y;
	end
	disp(f(1,2));
\\ reduces to
	def($ctx[1]);disp(f(1,2));
\\ with resulting context
		[ { test: 'f=(x,y)', code: 'f=x+y;\n' } ]

Example (js-reduction)

\\ program
	def f=([a,b],{x,y})
		f=x+y+a+b;
	end
	disp(f([4,5],{x:10,y:20}));
\\ reduces to
		def($ctx[1]);disp(f([4,5],{x:10,y:20}));
\\ with resulting context
	[ { test: 'f=([a,b],{x,y})', code: 'f=x+y+a+b;\n' } ]

MATHJX~errors

Client error messages

Kind: inner constant of MATHJX

errors.badBlock

Kind: static property of errors

errors.noTerm

Kind: static property of errors

array

JX

JX~config(opts)

Configure MathJX with supplied options hash.

Kind: inner method of JX

Param Type Description
opts Object Options hash with keys following the deep-copy conventions

JX~get()

Kind: inner method of JX

JX~toMathJS()

Return MathJS tensor handle.

Kind: inner method of JX

JX~toJS()

Return JS tensor handle.

Kind: inner method of JX

JX~isDefined()

Kind: inner method of JX

JX~rank()

Return rank of x.

Kind: inner method of JX

JX~size()

Return size of x.

Kind: inner method of JX

JX~len()

Return length of x.

Kind: inner method of JX

JX~disp()

Kind: inner method of JX

JX~print()

Kind: inner method of JX

JX~def()

Kind: inner method of JX

JX~for()

Kind: inner method of JX

JX~while()

Kind: inner method of JX

JX~if()

Kind: inner method of JX

JX~try()

Kind: inner method of JX

JX~switch()

Kind: inner method of JX

JX~when()

Kind: inner method of JX

JX~until()

Kind: inner method of JX

Contacting, Contributing, Following

Feel free to

License

MIT


© 2012 ACMESDS

Readme

Keywords

none

Package Sidebar

Install

npm i @totemorg/mathjx

Weekly Downloads

199

Version

3.10.0

License

ISC

Unpacked Size

24.7 kB

Total Files

3

Last publish

Collaborators

  • totem4
  • totem3
  • totem2
  • totem1