upload/src/library/utility/PwHighlight.php
<?php
defined('WEKIT_VERSION') || exit('Forbidden');

/**
 * @author peihong <jhqblxt@gmail.com> Dec 26, 2011
 * @link
 * @copyright
 * @license
 */

class PwHighlight {
	
	protected $color;
	protected $italic;
	protected $bold;
	protected $underline;
	
	public function setColor($color){
		if (!$color || !preg_match('/^#[0-9a-f]{3}([0-9a-f]{3})?$/i',$color)) return false;
		$this->color = strtoupper($color);
	}
	
	public function setBold($bold){
		$this->bold = intval($bold);
	}
	
	public function setItalic($italic){
		$this->italic = intval($italic);
	}
	
	public function setUnderline($underline){
		$this->underline = intval($underline);
	}
	
	//end set method
	
	/**
	 * 
	 * get highlight string for database saving
	 */
	public function getHighlight(){
		$highlight = '';
		$highlight = sprintf(
			'%s~%s~%s~%s',
			$this->color ? $this->color : '',
			$this->bold ? 1 : '',
			$this->italic ? 1 : '',
			$this->underline ? 1 : ''
		);
		return $highlight;
	}
	
	/**
	 * 
	 * explode highlight format to array
	 * 
	 * @param string $highlight
	 * @return array
	 */
	public function parseHighlight($highlight){
		$value = array();
		if (preg_match('/^(#[0-9a-f]{3}([0-9a-f]{3})?)?~(1?)~(1?)~(1?)$/i', $highlight, $m)){
			$value = array(
				'color' => $m[1],
				'bold'	=> $m[3],
				'italic'=> $m[4],
				'underline'=>$m[5]
			);
		}
		return $value;
	}
	
	/**
	 * 
	 * explode highlight string to CSS
	 * @param string $highlight
	 */
	public function getStyle($highlight){
		$hightlightArray = $this->parseHighlight($highlight);
		$styleString = '';
		foreach ($hightlightArray as $k=>$v) {
			if (!$v) continue;
			switch ($k) {
				case 'color':
					$styleString .= ';color:' . $v;
				break;
				case 'bold' :
					$styleString .= ';font-weight:bold';
				break;
				case 'italic':
					$styleString .= ';font-style:italic';
				break;
				case 'underline':
					$styleString .= ';text-decoration:underline';
				break;
			}
		}
		return ltrim($styleString,';');
	}
}