Location: PHPKode > projects > Mocovie web framework > webs/common/controls/code.php
<?php
/**
 *  Copyright (C) 2010  Kai Dorschner
 *
 *  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 3 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 for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * @author Kai Dorschner <the-hide@address.com>
 * @copyright Copyright 2010, Kai Dorschner
 * @license http://www.gnu.org/licenses/gpl.html GPLv3
 * @package mocovi
 * @subpackage controls
 */

/**
 * Including the text control
 */
ControlFactory::load('text');

/**
 * This is a prototype control.
 *
 * From this class all other controls can be derived.
 *
 * @package mocovi
 * @subpackage controls
 */
class code_control extends text_control
{
	protected $defaultOptions = array
		( 'type'	=> 'php'
		);
	protected function _beforeLoadChilds(DomNode $parent)
	{
		return false;
	}

	protected function program()
	{
		$string = $this->sourceNode->childNodes->item(0)->nodeValue;
		$lineCounter = 1;
		switch($this->getOption('type'))
		{
			case 'xml':
			case 'html':
				$dom = new DomDocument();
				$dom->preserveWhiteSpace = false;
				$dom->formatOutput = true;
				$dom->loadXML($string);
				$formatted = $dom->saveXML();
				$line = new DomElement('line');
				$this->node->appendChild($line);
				$mode = null;
				for($i = 0; $i < strlen($formatted); $i++)
				{
					$character = substr($formatted, $i, 1);
					if($character == '<') // Tag open
					{
						$mode = 'element';
						$element = $this->dom->createElement('element');
						$element->setAttribute('name', 'element');
					}
					if($character == ' ' && $mode == 'element')
					{
						$mode = 'attributename';
						$attribute = $this->dom->createElement('element');
						$attribute->setAttribute('name', 'attribute');
					}
					// case '?':
						// if($mode == 'element')
							// $mode = 'xml-definition';
							// $element->setAttribute('name', 'xml-definition');
							// $element->appendChild($this->dom->createTextNode($character));
					// break;
					if($character == "\n")
					{
						$line = $this->dom->createElement('line');
						$this->node->appendChild($line);
					}
					// if($mode == 'attributename' && $character != ' ')
					// {
						// $attribute->appendChild($this->dom->createTextNode($character));
					// }
					if(!is_null($mode))
						$element->appendChild($this->dom->createTextNode($character));
					else
						$line->appendChild($this->dom->createTextNode($character));
					
					if($character == '>') // Tag close
					{
						$mode = null;
						$line->appendChild($element);
						unset($element);
					}
					// if($mode = 'attribute')
						// $element = $this->dom->createElement('element', $character);
						// $element->setAttribute('name', 'attribute');
				}
			break;
			case 'php':
				echo 'PHPHPHPHP';
			break;
			default:
				echo $this->getOption('type');
		}
	}
}
Return current item: Mocovie web framework