%PDF- %PDF-
| Direktori : /www/varak.net/www.varak.net/texy/modules/ |
| Current File : /www/varak.net/www.varak.net/texy/modules/TexyParagraphModule.php |
<?php
/**
* Texy! - web text markup-language
* --------------------------------
*
* Copyright (c) 2004, 2008 David Grudl (http://davidgrudl.com)
*
* This source file is subject to the GNU GPL license that is bundled
* with this package in the file license.txt.
*
* For more information please see http://texy.info
*
* @copyright Copyright (c) 2004, 2008 David Grudl
* @license GNU GENERAL PUBLIC LICENSE version 2 or 3
* @link http://texy.info
* @package Texy
* @version $Id: TexyParagraphModule.php 216 2008-08-22 22:02:07Z David Grudl $
*/
/**
* Paragraph module.
*
* @author David Grudl
* @copyright Copyright (c) 2004, 2008 David Grudl
* @package Texy
*/
final class TexyParagraphModule extends TexyModule
{
public function __construct($texy)
{
$this->texy = $texy;
$texy->addHandler('paragraph', array($this, 'solve'));
}
/**
* @param TexyBlockParser
* @param string text
* @param array
* @param TexyHtml
* @return vois
*/
public function process($parser, $content, $el)
{
$tx = $this->texy;
if ($parser->isIndented()) {
$parts = preg_split('#(\n(?! )|\n{2,})#', $content, -1, PREG_SPLIT_NO_EMPTY);
} else {
$parts = preg_split('#(\n{2,})#', $content, -1, PREG_SPLIT_NO_EMPTY);
}
foreach ($parts as $s)
{
$s = trim($s);
if ($s === '') continue;
// try to find modifier
$mx = $mod = NULL;
if (preg_match('#\A(.*)(?<=\A|\S)'.TEXY_MODIFIER_H.'(\n.*)?()\z#sUm', $s, $mx)) {
list(, $mC1, $mMod, $mC2) = $mx;
$s = trim($mC1 . $mC2);
if ($s === '') continue;
$mod = new TexyModifier;
$mod->setProperties($mMod);
}
$res = $tx->invokeAroundHandlers('paragraph', $parser, array($s, $mod));
if ($res) $el->insert(NULL, $res);
}
}
/**
* Finish invocation.
*
* @param TexyHandlerInvocation handler invocation
* @param string
* @param TexyModifier|NULL
* @return TexyHtml|FALSE
*/
public function solve($invocation, $content, $mod)
{
$tx = $this->texy;
// find hard linebreaks
if ($tx->mergeLines) {
// ....
// ... => \r means break line
$content = preg_replace('#\n +(?=\S)#', "\r", $content);
} else {
$content = preg_replace('#\n#', "\r", $content);
}
$el = TexyHtml::el('p');
$el->parseLine($tx, $content);
$content = $el->getText(); // string
// check content type
// block contains block tag
if (strpos($content, Texy::CONTENT_BLOCK) !== FALSE) {
$el->setName(NULL); // ignores modifier!
// block contains text (protected)
} elseif (strpos($content, Texy::CONTENT_TEXTUAL) !== FALSE) {
// leave element p
// block contains text
} elseif (preg_match('#[^\s'.TEXY_MARK.']#u', $content)) {
// leave element p
// block contains only replaced element
} elseif (strpos($content, Texy::CONTENT_REPLACED) !== FALSE) {
$el->setName($tx->nontextParagraph);
// block contains only markup tags or spaces or nothing
} else {
// if {ignoreEmptyStuff} return FALSE;
if (!$mod) $el->setName(NULL);
}
if ($el->getName()) {
// apply modifier
if ($mod) $mod->decorate($tx, $el);
// add <br />
if (strpos($content, "\r") !== FALSE) {
$key = $tx->protect('<br />', Texy::CONTENT_REPLACED);
$content = str_replace("\r", $key, $content);
};
}
$content = strtr($content, "\r\n", ' ');
$el->setText($content);
return $el;
}
}