WMarkDown/PHP/Modules/WMarkDown.Modules.FontFormats.php

53 lines
2.1 KiB
PHP
Executable File

<?php
namespace WMarkDown\Modules;
class FontFormats extends \WMarkDown\Abstracts\Modules{
private $scape = false;
public function get_next_position($string){
if(!$this->more || $this->from >= 0)
return;
$this->more = false;
$last = null;
$item = null;
if(preg_match('/\\\\([_\*\'"\\\\])/', $string, $matches, PREG_OFFSET_CAPTURE)){
$this->more = true;
$this->scape = true;
$this->from = $matches[0][1];
$this->matches = $matches;
};
foreach([
'/(\*)([^\*\\\\]+|\\\\.)\*/', '/(_)([^_\\\\]+|\\\\.)_/',
'/(\*{2})(([^\*\\\\]+|\*[^\*]|\\\\.)+)\*{2}(\*)?/', '/(__)(([^_\\\\]+|_[^_]|\\\\.)+)__(_)?/',
'/(\'{3})(([^\'\\\\]+|\'{1,2}[^\']|\\\\.)+)\'{3}(\'{2})?/', '/(""")(([^"\\\\]+|"{1,2}[^"]|\\\\.)+)"""("")?/',
'/(\'{2})(([^\'\\\\]+|\'[^\']|\\\\.)+)\'{2}/', '/("")(([^"\\\\]+|"[^"]|\\\\.)+)""/'
] as $pattern)
if(preg_match($pattern, $string, $matches, PREG_OFFSET_CAPTURE) && ($last === null || $last > $matches[0][1])){
$this->more = true;
$this->scape = false;
$this->from = $matches[0][1];
$this->matches = $matches;
};
}
public function process($string, $modules, $level){
$this->length = strlen($this->matches[0][0]);
$this->to = $this->from + $this->length;
$this->content = $this->matches[$this->scape ? 1 : 2][0];
$this->html = $this->scape ? $this->matches[1][0] : (
'<' . ($tag = strlen($this->matches[1][0]) == 2 ? "b" : "i") . '>' .
\WMarkDown\Modules::format($this->wmarkdown, $this->matches[2][0] . (isset($this->matches[4]) ? $this->matches[4][0] : ''), ["paragraphs"], $modules)["content"] .
'</' . $tag . '>'
);
}
};