document.selection.Text = tex2xml(document.selection.Text,1);

function tex2xml(tex)
	{tex = tex.replace(/</g,'&lt;').replace(/[\f\n\r\t\v]+/g,' ').replace(/\\\{/g,'¢l').replace(/\\\}/g,'¢r').replace(/\\\\/g,'¢n').replace(/\\_/g,'¢u').replace(/\\\^/g,'¢h');
	tex = tex.replace(/\\left\{/g,'\\fence{c').replace(/\\left/g,'\\fence{').replace(/\\right\}/g,'c}').replace(/\\right([\])\|])/g,'$1}');
	tex = tex.replace(/([\u220f\u2210\u2211\u222b\u222c\u222d\u222e\u222f\u2230\u2231\u2232\u2233\u22c0\u22c1\u22c2\u22c3\u2a00\u2a01\u2a02\u2a03\u2a04\u2a05\u2a06\u2a0a\u2a0b])/g,'\\ope{$1}').replace(/\\ope\{[ ]*\\ope\{([^\{\}]*)\}[ ]*\}/g,'\\ope{$1}');
	if(tex.search(/[_\^]/g)!=-1)
		{tex = tex.replace(/\^([^\{\\])/g,'^{$1}').replace(/_([^\{\\])/g,'_{$1}');}
	for(k=0;tex.search(/[\{\}]/g)!=-1&&k!=16;k++)
	{if(tex.search(/\\(case|det|mat|under|over|ope|pre|inf|sur|strike)/g)!=-1)
		{tex = tex.replace(/\\pre\{([^\{\}]*)\}\{([^\{\}]*)\}/g,'<float><sur>$1</sur><inf>$2</inf></float>');
		tex = tex.replace(/\\case\{([^\{\}]*)\}\{([^\{\}]*)\}/g,'<case><value>$1</value><scope>$2</scope></case>');
		tex = tex.replace(/\\underbrace\{([^\{\}]*)\}_\{([^\{\}]*)\}/g,'<under><ker>$1</ker><underbrace/><sat>$2</sat></under>');
		tex = tex.replace(/\\overbrace\{([^\{\}]*)\}\^\{([^\{\}]*)\}/g,'<over><sat>$2</sat><overbrace/><ker>$1</ker></over>');
		tex = tex.replace(/\\underbrace\{([^\{\}]*)\}([^\^_])/g,'<under><ker>$1</ker><underbrace/></under> $2').replace(/\\overbrace\{([^\{\}]*)\}[ ]*([^\^_])/g,'<over><overbrace/><ker>$1</ker></over>$2').replace(/\\underbrace\{([^\{\}]*)\}[ ]*$/g,'<under><ker>$1</ker><underbrace/></under>').replace(/\\overbrace\{([^\{\}]*)\}$/g,'<over><overbrace/><ker>$1</ker></over>');
		tex = tex.replace(/\\mathbf\{([^\{\}]*)\}/g,'<bold>$1</bold>').replace(/\\mathsl\{([^\{\}]*)\}/g,'<italic>$1</italic>');
		tex = tex.replace(/\\(cases|det|inf|sur|overline|underline|strike)\{([^\{\}]*)\}/g,'<$1>$2</$1>');
		tex = tex.replace(/\\matrix\{([^\{\}]*)\}/g,'\\apply{<matrix>$1</matrix>}').replace(/\\ope\{([^\{\}]*)\}/g,'\\opgroup{<ope>$1</ope>}');
		}
	if(tex.search(/\\(frac|stack|sqrt|rad|)/g)!=-1)
		{tex = tex.replace(/\\frac\{([^\{\}]*)\}\{([^\{\}]*)\}/g,'<fraction><num>$1</num><den>$2</den></fraction>');
		tex = tex.replace(/\\stackrel\{([^\{\}]*)\}\{([^\{\}]*)\}/g,'<over><sat>$1</sat><ker>$2</ker></over>');
		tex = tex.replace(/\\stackrev\{([^\{\}]*)\}\{([^\{\}]*)\}/g,'<under><ker>$1</ker><sat>$2</sat></under>');
		tex = tex.replace(/\\sqrt\{([^\{\}]*)\}/g,'<radical><radix/><radicand>$1</radicand></radical>').replace(/\\rad\{([^\}]*)\}\{([^\{\}]*)\}/g,'<radical><radix>$1</radix><radicand>$2</radicand></radical>');}
	if(tex.search(/\\vector/g)!=-1)
		{tex = tex.replace(/\\vector\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}([^\{])/g,'\\apply{<vector><entry>$1</entry><entry>$2</entry><entry>$3</entry><entry>$4</entry><entry>$5</entry><entry>$6</entry><entry>$7</entry><entry>$8</entry></vector>}$9');
		tex = tex.replace(/\\vector\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}([^\{])/g,'\\apply{<vector><entry>$1</entry><entry>$2</entry><entry>$3</entry><entry>$4</entry><entry>$5</entry><entry>$6</entry><entry>$7</entry></vector>}$8');
		tex = tex.replace(/\\vector\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}([^\{])/g,'\\apply{<vector><entry>$1</entry><entry>$2</entry><entry>$3</entry><entry>$4</entry><entry>$5</entry><entry>$6</entry></vector>}$7');
		tex = tex.replace(/\\vector\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}([^\{])/g,'\\apply{<vector><entry>$1</entry><entry>$2</entry><entry>$3</entry><entry>$4</entry><entry>$5</entry></vector>}$6');
		tex = tex.replace(/\\vector\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}([^\{])/g,'\\apply{<vector><entry>$1</entry><entry>$2</entry><entry>$3</entry><entry>$4</entry></vector>}$5');
		tex = tex.replace(/\\vector\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}([^\{])/g,'\\apply{<vector><entry>$1</entry><entry>$2</entry><entry>$3</entry></vector>}$4');
		tex = tex.replace(/\\vector\{([^\{\}]*)\}\{([^\{\}]*)\}([^\{])/g,'\\apply{<vector><entry>$1</entry><entry>$2</entry></vector>}$3');}
	if(tex.search(/\\row/g)!=-1)
		{tex = tex.replace(/\\row\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}([^\{])/g,'<row><cell>$1</cell><cell>$2</cell><cell>$3</cell><cell>$4</cell><cell>$5</cell><cell>$6</cell><cell>$7</cell><cell>$8</cell></row>$9');
		tex = tex.replace(/\\row\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}([^\{])/g,'<row><cell>$1</cell><cell>$2</cell><cell>$3</cell><cell>$4</cell><cell>$5</cell><cell>$6</cell><cell>$7</cell></row>$8');
		tex = tex.replace(/\\row\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}([^\{])/g,'<row><cell>$1</cell><cell>$2</cell><cell>$3</cell><cell>$4</cell><cell>$5</cell><cell>$6</cell></row>$7');
		tex = tex.replace(/\\row\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}([^\{])/g,'<row><cell>$1</cell><cell>$2</cell><cell>$3</cell><cell>$4</cell><cell>$5</cell></row>$6');
		tex = tex.replace(/\\row\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}([^\{])/g,'<row><cell>$1</cell><cell>$2</cell><cell>$3</cell><cell>$4</cell></row>$5');
		tex = tex.replace(/\\row\{([^\{\}]*)\}\{([^\{\}]*)\}\{([^\{\}]*)\}([^\{])/g,'<row><cell>$1</cell><cell>$2</cell><cell>$3</cell></row>$4');
		tex = tex.replace(/\\row\{([^\{\}]*)\}\{([^\{\}]*)\}([^\{])/g,'<row><cell>$1</cell><cell>$2</cell></row>$3');}
	if(tex.search(/[_\^]/g)!=-1)
		{tex = tex.replace(/_\{([^\{\}]*)\}\^\{([^\{\}]*)\}/g,'^{$2}_{$1}');
		tex = tex.replace(/([^\}])\^\{([^\{\}]*)\}[ ]*_\{([^\{\}]*)\}/g,'$1<float><sup>$2</sup><sub>$3</sub></float>');
		tex = tex.replace(/([^\}])\^\{([^\{\}]*)\}([^_])/g,'$1<sup>$2</sup>$3').replace(/([^\}])_\{([^\{\}]*)\}([^\^])/g,'$1<sub>$2</sub>$3');
		tex = tex.replace(/([^\}])\^\{([^\{\}]*)\}$/g,'$1<sup>$2</sup>').replace(/([^\}])_\{([^\{\}]*)\}$/g,'$1<sub>$2</sub>');}
	if(tex.search(/\\(apply|fence|opgroup)/g)!=-1)
		{tex = tex.replace(/\\fence\{([\[\|(.c])([^\{\}]*)([\]\|)c])\}/g,'\\fenced{<fence left¢$1¢ right¢$3¢>$2</fence>}');
		tex = tex.replace(/left¢\(¢/g,'left="round"').replace(/left¢\[¢/g,'left="square"').replace(/left¢c¢/g,'left="curly"').replace(/left¢\|¢/g,'left="solid"').replace(/left¢\.¢/g,'left="none"');
		tex = tex.replace(/right¢\)¢/g,'right="round"').replace(/right¢\]¢/g,'right="square"').replace(/right¢c¢/g,'right="curly"').replace(/right¢\|¢/g,'right="solid"');
		tex = tex.replace(/_\{([^\{\}]*)\}\^\{([^\{\}]*)\}/g,'^{$2}_{$1}');
		tex = tex.replace(/\\(fenced|opgroup)\{([^\{\}]*)\}\^\{([^\{\}]*)\}_\{([^\{\}]*)\}/g,'<$1>$2<markers><marker>$3</marker><submarker>$4</submarker></markers></$1>');
		tex = tex.replace(/\\(apply|fenced|opgroup)\{([^\{\}]*)\}\^\{([^\{\}]*)\}/g,'<$1>$2<marker>$3</marker></$1>');
		tex = tex.replace(/\\(apply|fenced|opgroup)\{([^\{\}]*)\}_\{([^\{\}]*)\}/g,'<$1>$2<submarker>$3</submarker></$1>');
		tex = tex.replace(/\\(apply|fenced|opgroup)\{([^\{\}]*)\}([^_\^])/g,'$2$3').replace(/\\(apply|fenced|opgroup)\{([^\{\}]*)\}$/g,'$2');}
				}
	tex = tex.replace(/¢n/g,'<line/>').replace(/\\wrap/g,'<wrap/>');
	tex = tex.replace(/¢l/g,'{').replace(/¢r/g,'}').replace(/¢u/g,'_').replace(/¢h/g,'^').replace(/\\b/g,'\\').replace(/\\s/g,'\$');
	return tex;}
