Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * Класс для добавления весячей пунктуации
- */
- class Hanging extends CApplicationComponent {
- // Константы классов
- const CLASS_QUOTE_LEFT = 1;
- const CLASS_QUOTE_RIGHT = 2;
- const CLASS_BKT_LEFT = 3;
- const CLASS_BKT_RIGHT = 4;
- // HTML-классы
- public $class_quote_left = 'punct-ql';
- public $class_quote_right = 'punct-qr';
- public $class_bkt_left = 'punct-ls';
- public $class_bkt_right = 'punct-rs';
- // Хэш классов
- protected $classes_array = array();
- /**
- * Выполняем обработку
- * @param string $text
- * @return string
- */
- public function process($text) {
- $this->classes_array = array(
- self::CLASS_QUOTE_LEFT => $this->class_quote_left,
- self::CLASS_QUOTE_RIGHT => $this->class_quote_right,
- self::CLASS_BKT_LEFT => $this->class_bkt_left,
- self::CLASS_BKT_RIGHT => $this->class_bkt_right,
- );
- $lines = explode(PHP_EOL, $text);
- $words = array();
- $classes = array();
- foreach ($lines as $num=>$line){
- $words[$num] = explode(' ', $line);
- $classes[$num] = array();
- }
- foreach ($words as $line_num => $line){
- foreach ($line as $word_num => $word){
- $first_letter = mb_substr($word, 0, 1, 'utf-8');
- if (!isset ($classes[$line_num][$word_num]))
- $classes[$line_num][$word_num] = array();
- if (in_array($first_letter, array('«', '«', '('))){
- $quote = in_array($first_letter, array('«', '«'));
- $classes[$line_num][$word_num][] = $quote ? self::CLASS_QUOTE_LEFT : self::CLASS_BKT_LEFT;
- if ($word_num){
- $classes[$line_num][$word_num-1][] = $quote ? self::CLASS_QUOTE_RIGHT : self::CLASS_BKT_RIGHT;
- }
- }
- }
- }
- $text = '';
- foreach ($words as $line_num => $line){
- foreach ($line as $word_num => $word){
- if (!empty($classes[$line_num][$word_num])){
- $words[$line_num][$word_num] = $this->wrapWord($words[$line_num][$word_num], $classes[$line_num][$word_num]);
- }
- }
- $text .= implode(' ', $words[$line_num]);
- }
- return $text;
- }
- /**
- * Обварачиваем слова
- * @param string $word
- * @param array $classes
- * @return string
- */
- protected function wrapWord($word, Array $classes){
- $html = '<span class="';
- $cls = array();
- foreach ($classes as $class){
- $cls[] = $this->classes_array[$class];
- }
- $html = $html . implode(' ', $cls);
- $html = $html . '">' . $word . '</span>';
- return $html;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment