summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/libvpx/source/libvpx/examples/includes/ASCIIMathPHP-2.0/ASCIIMathPHP-2.0.class.php
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/libvpx/source/libvpx/examples/includes/ASCIIMathPHP-2.0/ASCIIMathPHP-2.0.class.php')
-rw-r--r--chromium/third_party/libvpx/source/libvpx/examples/includes/ASCIIMathPHP-2.0/ASCIIMathPHP-2.0.class.php1119
1 files changed, 0 insertions, 1119 deletions
diff --git a/chromium/third_party/libvpx/source/libvpx/examples/includes/ASCIIMathPHP-2.0/ASCIIMathPHP-2.0.class.php b/chromium/third_party/libvpx/source/libvpx/examples/includes/ASCIIMathPHP-2.0/ASCIIMathPHP-2.0.class.php
deleted file mode 100644
index 5fb10600c34..00000000000
--- a/chromium/third_party/libvpx/source/libvpx/examples/includes/ASCIIMathPHP-2.0/ASCIIMathPHP-2.0.class.php
+++ /dev/null
@@ -1,1119 +0,0 @@
-<?php
-
-/****
- * ASCIIMathPHP and associated classes:
- * -- XMLNode
- * -- MathMLNode extends XMLNode
- *
- * These classes are a PHP port of ASCIIMath
- * Version 1.3 Feb 19 2004, (c) Peter Jipsen http://www.chapman.edu/~jipsen
- *
- * ASCIIMathPHP Version 1.11, 26 April 2006, (c) Kee-Lin Steven Chan (kc56@cornell.edu)
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License (at http://www.gnu.org/copyleft/gpl.html)
- * for more details.
- *
- * ChangeLog
- *
- * Ver 2.0
- * -- PHP5 only version of ASCIIMathPHP
- *
- * Ver 1.12.1
- * -- Included the missing setCurrExpr() method
- *
- * Ver 1.12
- * -- Added changes that David Lippman <DLippman@pierce.ctc.edu> made to bring ASCIIMathPHP up to
- * ASCIIMath 1.4.7 functionality.
- * -- Added parseIntExpr, for intermediate expression parsing rule, allowing x^2/x^3 to render as (x^2)/(x^3)
- * -- Added quotes as another way of designating text; "hello" is equivalent to text(hello)
- * -- Added FUNC designator to allow sin, cos, etc to act as functions, so sin(x)/x renders as {sin(x)}/x
- *
- * Ver 1.11
- * -- Fixed bug that stopped script execution for incomplete expressions
- * -- Changed the algorithm for parsing expressions so that it matches the longest string possible (greedy)
- *
- * Ver 1.10
- * -- Added definition support
- * -- Added stackrel support
- * -- Added a bunch of different symbols etc. >>, << and definitions like dx, dy, dz etc.
- *
- * Ver 1.02
- * -- Fixed bug with mbox and text
- * -- Fixed spacing bug with mbox and text
- *
- * Ver 1.01
- * -- Fixed Bug that did not parse symbols greater than a single character
- * correctly when appearing at end of expression.
- *
- ***/
-
-class XMLNode
-{
- // Private variables
- var $_id;
- var $_name;
- var $_content;
- var $_mt_elem_flg;
- var $_attr_arr;
- var $_child_arr;
- var $_nmspc;
- var $_nmspc_alias;
- var $_parent_id;
- var $_parent_node;
-
- function XMLNode($id = NULL)
- {
- $this->_id = isset($id) ? $id : md5(uniqid(rand(),1));
- $this->_name = '';
- $this->_content = '';
- $this->_mt_elem_flg = FALSE;
- $this->_attr_arr = array();
- $this->_child_arr = array();
- $this->_nmspc = '';
- $this->_nmspc_alias = '';
- $this->_parent_id = FALSE;
- $this->_parent_node = NULL;
- }
-
- function addChild(&$node)
- {
- $this->_child_arr[$node->getId()] = $node;
- $node->setParentId($this->_id);
- $node->setParentNode($this);
- }
-
- function addChildArr(&$node_arr)
- {
- $key_arr = array_keys($node_arr);
- $num_key = count($key_arr);
-
- for ($i = 0; $i < $num_key; $i++) {
- $node = $node_arr[$key_arr[$i]];
- $this->addChild($node);
- }
- }
-
- function insertChildBefore($idx,&$node)
- {
- $key_arr = array_keys($this->_child_arr);
- $num_key = count($key_arr);
- $tmp_arr = arry();
-
- for ($i = 0;$i < $num_key;$i++) {
- if ($i == $idx) {
- $tmp_arr[$node->getId()] = $node;
- }
- $tmp_arr[$key_arr[$i]] = $this->_child_arr[$key_arr[$i]];
- }
- $this->_child_arr = $tmp_arr;
- }
-
- function insertChildAfter($idx,&$node)
- {
- $key_arr = array_keys($this->_child_arr);
- $num_key = count($key_arr);
- $tmp_arr = arry();
-
- for ($i = 0;$i < $num_key;$i++) {
- $tmp_arr[$key_arr[$i]] = $this->_child_arr[$key_arr[$i]];
- if ($i == $idx) {
- $tmp_arr[$node->getId()] = $node;
- }
- }
- $this->_child_arr = $tmp_arr;
- }
-
- function setId($id)
- {
- $this->_id = $id;
- }
-
- function setName($name)
- {
- $this->_name = $name;
- }
-
- function setNamepace($nmspc)
- {
- $this->_nmspc = $nmspc;
- }
-
- function setNamespaceAlias($nmspc_alias)
- {
- $this->_nmspc_alias = $nmspc_alias;
- }
-
- function setContent($content)
- {
- $this->_content = $content;
- }
-
- function setEmptyElem($mt_elem_flg)
- {
- $this->_mt_elem_flg = $mt_elem_flg;
- }
-
- function setAttr($attr_nm,$attr_val)
- {
- $this->_attr_arr[$attr_nm] = $attr_val;
- }
-
- function setAttrArr($attr_arr)
- {
- $this->_attr_arr = $attr_arr;
- }
-
- function setParentId($id)
- {
- $this->_parent_id = $id;
- }
-
- function setParentNode(&$node)
- {
- $this->_parent_node = $node;
- }
-
- function getId()
- {
- return($this->_id);
- }
-
- function getName()
- {
- return($this->_name);
- }
-
- function getNamespace()
- {
- return($this->_nmspc);
- }
-
- function getNamespaceAlias()
- {
- return($this->_nmspc_alias);
- }
-
- function getContent()
- {
- return($this->_content);
- }
-
- function getAttr($attr_nm)
- {
- if (isset($this->_attr_arr[$attr_nm])) {
- return($this->_attr_arr[$attr_nm]);
- } else {
- return(NULL);
- }
- }
-
- function getAttrArr()
- {
- return($this->_attr_arr);
- }
-
- function getParentId()
- {
- return($this->parent_id);
- }
-
- function getParentNode()
- {
- return($this->_parent_node);
- }
-
- function getChild($id)
- {
- if (isset($this->_child_arr[$id])) {
- return($this->_child_arr[$id]);
- } else {
- return(FALSE);
- }
- }
-
- function getFirstChild()
- {
- $id_arr = array_keys($this->_child_arr);
- $num_child = count($id_arr);
-
- if ($num_child > 0) {
- return($this->_child_arr[$id_arr[0]]);
- } else {
- return(FALSE);
- }
- }
-
- function getLastChild()
- {
- $id_arr = array_keys($this->_child_arr);
- $num_child = count($id_arr);
-
- if ($num_child > 0) {
- return($this->_child_arr[$id_arr[$num_child - 1]]);
- } else {
- return(FALSE);
- }
- }
-
- function getChildByIdx($idx)
- {
- $id_arr = array_keys($this->_child_arr);
-
- if (isset($this->_child_arr[$id_arr[$idx]])) {
- return($this->_child_arr[$id_arr[$idx]]);
- } else {
- return(FALSE);
- }
- }
-
- function getNumChild()
- {
- return(count($this->_child_arr));
- }
-
- function removeChild($id)
- {
- unset($this->_child_arr[$id]);
- }
-
- function removeChildByIdx($idx)
- {
- $key_arr = array_keys($this->_child_arr);
- unset($this->_child_arr[$key_arr[$idx]]);
- }
-
- function removeFirstChild()
- {
- $key_arr = array_keys($this->_child_arr);
- unset($this->_child_arr[$key_arr[0]]);
- }
-
- function removeLastChild()
- {
- $key_arr = array_keys($this->_child_arr);
- unset($this->_child_arr[$key_arr[count($key_arr)-1]]);
- }
-
- function dumpXML($indent_str = "\t")
- {
- $attr_txt = $this->_dumpAttr();
- $name = $this->_dumpName();
- $xmlns = $this->_dumpXmlns();
- $lvl = $this->_getCurrentLevel();
- $indent = str_pad('',$lvl,$indent_str);
-
- if ($this->_mt_elem_flg) {
- $tag = "$indent<$name$xmlns$attr_txt />";
- return($tag);
- } else {
- $key_arr = array_keys($this->_child_arr);
- $num_child = count($key_arr);
-
- $tag = "$indent<$name$xmlns$attr_txt>$this->_content";
-
- for ($i = 0;$i < $num_child;$i++) {
- $node = $this->_child_arr[$key_arr[$i]];
-
- $child_txt = $node->dumpXML($indent_str);
- $tag .= "\n$child_txt";
- }
-
- $tag .= ($num_child > 0 ? "\n$indent</$name>" : "</$name>");
- return($tag);
- }
- }
-
- function _dumpAttr()
- {
- $id_arr = array_keys($this->_attr_arr);
- $id_arr_cnt = count($id_arr);
- $attr_txt = '';
-
- for($i = 0;$i < $id_arr_cnt;$i++) {
- $key = $id_arr[$i];
- $attr_txt .= " $key=\"{$this->_attr_arr[$key]}\"";
- }
-
- return($attr_txt);
- }
-
- function _dumpName()
- {
- $alias = $this->getNamespaceAlias();
- if ($alias == '') {
- return($this->getName());
- } else {
- return("$alias:" . $this->getName());
- }
- }
-
- function _dumpXmlns()
- {
- $nmspc = $this->getNamespace();
- $alias = $this->getNamespaceAlias();
-
- if ($nmspc != '') {
- if ($alias == '') {
- return(" xmlns=\"" . $nmspc . "\"");
- } else {
- return(" xmlns:$alias=\"" . $nmspc . "\"");
- }
- } else {
- return('');
- }
- }
-
- function _getCurrentLevel()
- {
- if ($this->_parent_id === FALSE) {
- return(0);
- } else {
- $node = $this->getParentNode();
- $lvl = $node->_getCurrentLevel();
- $lvl++;
- return($lvl);
- }
- }
-}
-
-class MathMLNode extends XMLNode
-{
- function MathMLNode($id = NULL)
- {
- parent::XMLNode($id);
- }
-
- function removeBrackets()
- {
- if ($this->_name == 'mrow') {
- if ($c_node_0 = $this->getFirstChild()) {
- $c_node_0->isLeftBracket() ? $this->removeFirstChild() : 0;
- }
-
- if ($c_node_0 = $this->getLastChild()) {
- $c_node_0->isRightBracket() ? $this->removeLastChild() : 0;
- }
- }
- }
-
- function isLeftBracket()
- {
- switch ($this->_content) {
- case '{':
- case '[':
- case '(':
- return(TRUE);
- break;
- }
- return(FALSE);
- }
-
- function isRightBracket()
- {
- switch ($this->_content) {
- case '}':
- case ']':
- case ')':
- return(TRUE);
- break;
- }
- return(FALSE);
- }
-}
-
-class ASCIIMathPHP
-{
- var $_expr;
- var $_curr_expr;
- var $_prev_expr;
- var $_symbol_arr;
- var $_node_arr;
- var $_node_cntr;
-
- function ASCIIMathPHP($symbol_arr,$expr = NULL)
- {
- $this->_symbol_arr = $symbol_arr;
- if (isset($expr)) {
- $this->setExpr($expr);
- }
- }
-
- /**
- * Returns an empty node (containing a non-breaking space) 26-Apr-2006
- *
- * Used when an expression is incomplete
- *
- * @return object
- *
- * @access private
- */
- function emptyNode()
- {
- $tmp_node = $this->createNode();
- $tmp_node->setName('mn');
- $tmp_node->setContent('&#' . hexdec('200B') . ';');
- return $tmp_node;
- }
-
- function pushExpr($prefix) // 2005-06-11 wes
- {
- $this->_curr_expr = $prefix . $this->_curr_expr;
- }
-
- function setExpr($expr)
- {
- $this->_expr = $expr;
- $this->_curr_expr = $expr;
- $this->_prev_expr = $expr;
-
- $this->_node_arr = array();
- $this->_node_cntr = 0;
- }
-
- function genMathML($attr_arr = NULL)
- {
- // <math> node
- $node_0 = $this->createNode();
- $node_0->setName('math');
- $node_0->setNamepace('http://www.w3.org/1998/Math/MathML');
-
- // <mstyle> node
- if (isset($attr_arr)) {
- $node_1 = $this->createNode();
- $node_1->setName('mstyle');
- $node_1->setAttrArr($attr_arr);
-
- $node_arr = $this->parseExpr();
-
- $node_1->addChildArr($node_arr);
- $node_0->addChild($node_1);
- } else {
- $node_arr = $this->parseExpr();
- $node_0->addChildArr($node_arr);
- }
-
- return TRUE;
- }
-
- /*
- function mergeNodeArr(&$node_arr_0,&$node_arr_1)
- {
- $key_arr_0 = array_keys($node_arr_0);
- $key_arr_1 = array_keys($node_arr_1);
-
- $num_key_0 = count($key_arr_0);
- $num_key_1 = count($key_arr_1);
-
- $merge_arr = array();
-
- for ($i = 0;$i < $num_key_0;$i++) {
- $merge_arr[$key_arr_0[$i]] = $node_arr_0[$key_arr_0[$i]];
- }
-
- for ($j = 0;$j < $num_key_1;$i++) {
- $merge_arr[$key_arr_1[$i]] = $node_arr_1[$key_arr_1[$i]];
- }
-
- return($merge_arr);
- }
- */
-
- //Broken out of parseExpr Sept 7, 2006 David Lippman for
- //ASCIIMathML 1.4.7 compatibility
- function parseIntExpr()
- {
- $sym_0 = $this->getSymbol();
- $node_0 = $this->parseSmplExpr();
- $sym = $this->getSymbol();
-
- if (isset($sym['infix']) && $sym['input'] != '/') {
- $this->chopExpr($sym['symlen']);
- $node_1 = $this->parseSmplExpr();
-
- if ($node_1 === FALSE) { //show box in place of missing argument
- $node_1 = $this->emptyNode();//??
- } else {
- $node_1->removeBrackets();
- }
-
- // If 'sub' -- subscript
- if ($sym['input'] == '_') {
-
- $sym_1 = $this->getSymbol();
-
- // If 'sup' -- superscript
- if ($sym_1['input'] == '^') {
- $this->chopExpr($sym_1['symlen']);
- $node_2 = $this->parseSmplExpr();
- $node_2->removeBrackets();
-
- $node_3 = $this->createNode();
- $node_3->setName(isset($sym_0['underover']) ? 'munderover' : 'msubsup');
- $node_3->addChild($node_0);
- $node_3->addChild($node_1);
- $node_3->addChild($node_2);
-
- $node_4 = $this->createNode();
- $node_4->setName('mrow');
- $node_4->addChild($node_3);
-
- return $node_4;
- } else {
- $node_2 = $this->createNode();
- $node_2->setName(isset($sym_0['underover']) ? 'munder' : 'msub');
- $node_2->addChild($node_0);
- $node_2->addChild($node_1);
-
- return $node_2;
- }
- } else {
- $node_2 = $this->createNode();
- $node_2->setName($sym['tag']);
- $node_2->addChild($node_0);
- $node_2->addChild($node_1);
-
- return($node_2);
- }
- } elseif ($node_0 !== FALSE) {
- return($node_0);
- } else {
- return $this->emptyNode();
- }
-
- }
-
- function parseExpr()
- {
- // Child/Fragment array
- $node_arr = array();
-
- // Deal whole expressions like 'ax + by + c = 0' etc.
- do {
- $sym_0 = $this->getSymbol();
- $node_0 = $this->parseIntExpr();
- $sym = $this->getSymbol();
- // var_dump($sym);
-
- if (isset($sym['infix']) && $sym['input'] == '/') {
- $this->chopExpr($sym['symlen']);
- $node_1 = $this->parseIntExpr();
-
- if ($node_1 === FALSE) { //should show box in place of missing argument
- $node_1 = $this->emptyNode();
- continue;
- }
-
- $node_1->removeBrackets();
-
- // If 'div' -- divide
- $node_0->removeBrackets();
- $node_2 = $this->createNode();
- $node_2->setName($sym['tag']);
- $node_2->addChild($node_0);
- $node_2->addChild($node_1);
- $node_arr[$node_2->getId()] = $node_2;
-
- } elseif ($node_0 !== FALSE) {
- $node_arr[$node_0->getId()] = $node_0;
- }
- } while (!isset($sym['right_bracket']) && $sym !== FALSE && $sym['output'] != '');
-
- //var_dump($sym);
- // Possibly to deal with matrices
- if (isset($sym['right_bracket'])) {
- $node_cnt = count($node_arr);
- $key_node_arr = array_keys($node_arr);
-
- if ($node_cnt > 1) {
- $node_5 = $node_arr[$key_node_arr[$node_cnt-1]];
- $node_6 = $node_arr[$key_node_arr[$node_cnt-2]];
- } else {
- $node_5 = FALSE;
- $node_6 = FALSE;
- }
-
- // Dealing with matrices
- if ($node_5 !== FALSE && $node_6 !== FALSE &&
- $node_cnt > 1 &&
- $node_5->getName() == 'mrow' &&
- $node_6->getName() == 'mo' &&
- $node_6->getContent() == ',') {
-
- // Checking if Node 5 has a LastChild
- if ($node_7 = $node_5->getLastChild()) {
- $node_7_cntnt = $node_7->getContent();
- } else {
- $node_7_cntnt = FALSE;
- }
-
- // If there is a right bracket
- if ($node_7 !== FALSE && ($node_7_cntnt == ']' || $node_7_cntnt == ')')) {
-
- // Checking if Node 5 has a firstChild
- if ($node_8 = $node_5->getFirstChild()) {
- $node_8_cntnt = $node_8->getContent();
- } else {
- $node_8_cntnt = FALSE;
- }
-
- // If there is a matching left bracket
- if ($node_8 !== FALSE &&
- (($node_8_cntnt == '(' && $node_7_cntnt == ')' && $sym['output'] != '}') ||
- ($node_8_cntnt == '[' && $node_7_cntnt == ']'))) {
-
- $is_mtrx_flg = TRUE;
- $comma_pos_arr = array();
-
- $i = 0;
-
- while ($i < $node_cnt && $is_mtrx_flg) {
- $tmp_node = $node_arr[$key_node_arr[$i]];
-
- if($tmp_node_first = $tmp_node->getFirstChild()) {
- $tnfc = $tmp_node_first->getContent();
- } else {
- $tnfc = FALSE;
- }
-
- if($tmp_node_last = $tmp_node->getLastChild()) {
- $tnlc = $tmp_node_last->getContent();
- } else {
- $tnlc = FALSE;
- }
-
- if (isset($key_node_arr[$i+1])) {
- $next_tmp_node = $node_arr[$key_node_arr[$i+1]];
- $ntnn = $next_tmp_node->getName();
- $ntnc = $next_tmp_node->getContent();
- } else {
- $ntnn = FALSE;
- $ntnc = FALSE;
- }
-
- // Checking each node in node array for matrix criteria
- if ($is_mtrx_flg) {
- $is_mtrx_flg = $tmp_node->getName() == 'mrow' &&
- ($i == $node_cnt-1 || $ntnn == 'mo' && $ntnc == ',') &&
- $tnfc == $node_8_cntnt && $tnlc == $node_7_cntnt;
- }
-
- if ($is_mtrx_flg) {
- for ($j = 0;$j < $tmp_node->getNumChild();$j++) {
- $tmp_c_node = $tmp_node->getChildByIdx($j);
-
- if ($tmp_c_node->getContent() == ',') {
- $comma_pos_arr[$i][] = $j;
- }
- }
- }
-
- if ($is_mtrx_flg && $i > 1) {
-
- $cnt_cpan = isset($comma_pos_arr[$i]) ? count($comma_pos_arr[$i]) : NULL;
- $cnt_cpap = isset($comma_pos_arr[$i-2]) ? count($comma_pos_arr[$i-2]) : NULL;
- $is_mtrx_flg = $cnt_cpan == $cnt_cpap;
- }
-
- $i += 2;
- }
-
- // If the node passes the matrix tests
- if ($is_mtrx_flg) {
- $tab_node_arr = array();
-
- for ($i = 0;$i < $node_cnt;$i += 2) {
- $tmp_key_node_arr = array_keys($node_arr);
- if (!($tmp_node = $node_arr[$tmp_key_node_arr[0]])) {
- break;
- }
- $num_child = $tmp_node->getNumChild();
- $k = 0;
-
- $tmp_node->removeFirstChild();
-
- $row_node_arr = array();
- $row_frag_node_arr = array();
-
- for ($j = 1;$j < ($num_child-1);$j++) {
- if (isset($comma_pos_arr[$i][$k]) &&
- $j == $comma_pos_arr[$i][$k]) {
-
- $tmp_node->removeFirstChild();
-
- $tmp_c_node = $this->createNode();
- $tmp_c_node->setName('mtd');
- $tmp_c_node->addChildArr($row_frag_node_arr);
- $row_frag_node_arr = array();
-
- $row_node_arr[$tmp_c_node->getId()] = $tmp_c_node;
-
- $k++;
- } else {
-
- if ($tmp_c_node = $tmp_node->getFirstChild()) {
- $row_frag_node_arr[$tmp_c_node->getId()] = $tmp_c_node;
- $tmp_node->removeFirstChild();
- }
- }
- }
-
- $tmp_c_node = $this->createNode();
- $tmp_c_node->setName('mtd');
- $tmp_c_node->addChildArr($row_frag_node_arr);
-
- $row_node_arr[$tmp_c_node->getId()] = $tmp_c_node;
-
- if (count($node_arr) > 2) {
- $tmp_key_node_arr = array_keys($node_arr);
- unset($node_arr[$tmp_key_node_arr[0]]);
- unset($node_arr[$tmp_key_node_arr[1]]);
- }
-
- $tmp_c_node = $this->createNode();
- $tmp_c_node->setName('mtr');
- $tmp_c_node->addChildArr($row_node_arr);
-
- $tab_node_arr[$tmp_c_node->getId()] = $tmp_c_node;
- }
-
- $tmp_c_node = $this->createNode();
- $tmp_c_node->setName('mtable');
- $tmp_c_node->addChildArr($tab_node_arr);
-
- if (isset($sym['invisible'])) {
- $tmp_c_node->setAttr('columnalign','left');
- }
-
- $key_node_arr = array_keys($node_arr);
- $tmp_c_node->setId($key_node_arr[0]);
-
- $node_arr[$tmp_c_node->getId()] = $tmp_c_node;
- }
- }
- }
- }
-
- $this->chopExpr($sym['symlen']);
- if (!isset($sym['invisible'])) {
- $node_7 = $this->createNode();
- $node_7->setName('mo');
- $node_7->setContent($sym['output']);
- $node_arr[$node_7->getId()] = $node_7;
- }
- }
-
- return($node_arr);
- }
-
- function parseSmplExpr()
- {
- $sym = $this->getSymbol();
-
- if (!$sym || isset($sym['right_bracket'])) //return FALSE;
- return $this->emptyNode();
-
- $this->chopExpr($sym['symlen']);
-
- // 2005-06-11 wes: add definition type support
- if(isset($sym['definition'])) {
- $this->pushExpr($sym['output']);
- $sym = $this->getSymbol();
- $this->chopExpr($sym['symlen']);
- }
-
- if (isset($sym['left_bracket'])) {
- $node_arr = $this->parseExpr();
-
- if (isset($sym['invisible'])) {
- $node_0 = $this->createNode();
- $node_0->setName('mrow');
- $node_0->addChildArr($node_arr);
-
- return($node_0);
- } else {
- $node_0 = $this->createNode();
- $node_0->setName('mo');
- $node_0->setContent($sym['output']);
-
- $node_1 = $this->createNode();
- $node_1->setName('mrow');
- $node_1->addChild($node_0);
- $node_1->addChildArr($node_arr);
-
- return($node_1);
- }
- } elseif (isset($sym['unary'])) {
-
- if ($sym['input'] == 'sqrt') {
- $node_0 = $this->parseSmplExpr();
- $node_0->removeBrackets();
-
- $node_1 = $this->createNode();
- $node_1->setName($sym['tag']);
- $node_1->addChild($node_0);
-
- return($node_1);
- } elseif (isset($sym['func'])) { //added 2006-9-7 David Lippman
- $expr = ltrim($this->getCurrExpr());
- $st = $expr{0};
- $node_0 = $this->parseSmplExpr();
- //$node_0->removeBrackets();
- if ($st=='^' || $st == '_' || $st=='/' || $st=='|' || $st==',') {
- $node_1 = $this->createNode();
- $node_1->setName($sym['tag']);
- $node_1->setContent($sym['output']);
- $this->setCurrExpr($expr);
- return($node_1);
- } else {
- $node_1 = $this->createNode();
- $node_1->setName('mrow');
- $node_2 = $this->createNode();
- $node_2->setName($sym['tag']);
- $node_2->setContent($sym['output']);
- $node_1->addChild($node_2);
- $node_1->addChild($node_0);
- return($node_1);
- }
- } elseif ($sym['input'] == 'text' || $sym['input'] == 'mbox' || $sym['input'] == '"') {
- $expr = ltrim($this->getCurrExpr());
- if ($sym['input']=='"') {
- $end_brckt = '"';
- $txt = substr($expr,0,strpos($expr,$end_brckt));
- } else {
- switch($expr{0}) {
- case '(':
- $end_brckt = ')';
- break;
- case '[':
- $end_brckt = ']';
- break;
- case '{':
- $end_brckt = '}';
- break;
- default:
- $end_brckt = chr(11); // A character that will never be matched.
- break;
- }
- $txt = substr($expr,1,strpos($expr,$end_brckt)-1);
- }
-
- //$txt = substr($expr,1,strpos($expr,$end_brckt)-1);
- $len = strlen($txt);
-
- $node_0 = $this->createNode();
- $node_0->setName('mrow');
-
- if ($len > 0) {
- if ($txt{0} == " ") {
- $node_1 = $this->createNode();
- $node_1->setName('mspace');
- $node_1->setAttr('width','1ex');
-
- $node_0->addChild($node_1);
- }
-
- $node_3 = $this->createNode();
- $node_3->setName($sym['tag']);
- $node_3->setContent(trim($txt));
-
- $node_0->addChild($node_3);
-
- if ($len > 1 && $txt{$len-1} == " ") {
- $node_2 = $this->createNode();
- $node_2->setName('mspace');
- $node_2->setAttr('width','1ex');
-
- $node_0->addChild($node_2);
- }
-
- $this->chopExpr($len+2);
- }
- return($node_0);
-
- } elseif (isset($sym['acc'])) {
- $node_0 = $this->parseSmplExpr();
- $node_0->removeBrackets();
-
- $node_1 = $this->createNode();
- $node_1->setName($sym['tag']);
- $node_1->addChild($node_0);
-
- $node_2 = $this->createNode();
- $node_2->setName('mo');
- $node_2->setContent($sym['output']);
-
- $node_1->addChild($node_2);
- return($node_1);
- } else {
- // Font change commands -- to complete
- }
- } elseif (isset($sym['binary'])) {
- $node_arr = array();
-
- $node_0 = $this->parseSmplExpr();
- $node_0->removeBrackets();
-
- $node_1 = $this->parseSmplExpr();
- $node_1->removeBrackets();
-
- /* 2005-06-05 wes: added stackrel */
- if ($sym['input'] == 'root' || $sym['input'] == 'stackrel') {
- $node_arr[$node_1->getId()] = $node_1;
- $node_arr[$node_0->getId()] = $node_0;
- } elseif ($sym['input'] == 'frac') {
- $node_arr[$node_0->getId()] = $node_0;
- $node_arr[$node_1->getId()] = $node_1;
- }
-
- $node_2 = $this->createNode();
- $node_2->setName($sym['tag']);
- $node_2->addChildArr($node_arr);
-
- return($node_2);
- } elseif (isset($sym['infix'])) {
- $node_0 = $this->createNode();
- $node_0->setName('mo');
- $node_0->setContent($sym['output']);
-
- return($node_0);
- } elseif (isset($sym['space'])) {
- $node_0 = $this->createNode();
- $node_0->setName('mrow');
-
- $node_1 = $this->createNode();
- $node_1->setName('mspace');
- $node_1->setAttr('width',$sym['space']);
-
- $node_2 = $this->createNode();
- $node_2->setName($sym['tag']);
- $node_2->setContent($sym['output']);
-
- $node_3 = $this->createNode();
- $node_3->setName('mspace');
- $node_3->setAttr('width',$sym['space']);
-
- $node_0->addChild($node_1);
- $node_0->addChild($node_2);
- $node_0->addChild($node_3);
-
- return($node_0);
- } else {
-
- // A constant
- $node_0 = $this->createNode();
- $node_0->setName($sym['tag']);
- $node_0->setContent($sym['output']);
- return($node_0);
- }
-
- // Return an empty node
- return $this->emptyNode();
- }
-
- function getMathML()
- {
- $root = $this->_node_arr[0];
- return($root->dumpXML());
- }
-
- function getCurrExpr()
- {
- return($this->_curr_expr);
- }
-
- function setCurrExpr($str)
- {
- $this->_curr_expr = $str;
- }
-
- function getExpr()
- {
- return($this->_expr);
- }
-
- function getPrevExpr()
- {
- return($this->_prev_expr);
- }
-
- function createNode()
- {
- $node = new MathMLNode($this->_node_cntr);
- // $node->setNamespaceAlias('m');
- $this->_node_arr[$this->_node_cntr] = $node;
- $this->_node_cntr++;
- return($node);
- }
-
- /**
- * Gets the largest symbol in the expression (greedy). Changed from non-greedy 26-Apr-2006
- *
- * @parameter boolean[optional] Chop original string?
- *
- * @return mixed
- *
- * @access private
- */
- function getSymbol($chop_flg = FALSE)
- {
- // Implemented a reverse symbol matcher.
- // Instead of going front to back, it goes back to front. Steven 26-Apr-2006
- $chr_cnt = strlen($this->_curr_expr);
-
- if ($chr_cnt == 0) return FALSE;
-
- for ($i = $chr_cnt; $i > 0; $i--) {
- $sym_0 = substr($this->_curr_expr,0,$i);
-
- // Reading string for numeric values
- if (is_numeric($sym_0)) {
-
- if ($chop_flg) $this->chopExpr($i);
- return array('input'=>$sym_0, 'tag'=>'mn', 'output'=>$sym_0, 'symlen'=>$i);
-
- } elseif (isset($this->_symbol_arr[$sym_0])) {
-
- if ($chop_flg) $this->chopExpr($i);
- $sym_arr = $this->_symbol_arr[$sym_0];
- $sym_arr['symlen'] = $i;
- return $sym_arr;
- }
- }
-
- // Reading string for alphabetic constants and the minus sign
- $char = $this->_curr_expr{0};
- $len_left = $chop_flg ? $this->chopExpr(1) : strlen($this->_curr_expr)-1;
-
- // Deals with expressions of length 1
- if ($len_left == 0 && isset($this->_symbol_arr[$char])) {
- $sym_arr = $this->_symbol_arr[$char];
- $sym_arr['symlen'] = 1;
- return $sym_arr;
- } else {
- $tag = preg_match('/[a-z]/i',$char) ? 'mi' : 'mo';
- return array('input'=>$char, 'tag'=>$tag, 'output'=>$char, 'symlen'=>1);
- }
- }
-
- function chopExpr($strlen)
- {
- $this->_prev_expr = $this->_curr_expr;
-
- if ($strlen == strlen($this->_curr_expr)) {
- $this->_curr_expr = '';
- return(0);
- } else {
- $this->_curr_expr = ltrim(substr($this->_curr_expr,$strlen));
- return(strlen($this->_curr_expr));
- }
- }
-}
-?> \ No newline at end of file