field = $field; $this->value = $value; $this->number = $number; $this->parent = $parent; } public function getHtml() { if ($this->html) { return $this->html; } $this->html = $this->value; $this->formatHtml(); return $this->html; } protected function updateFirstParagraph() { $this->paragraphs[0] = ''.$this->getName(). ': '. $this->paragraphs[0]; } public function getFb2() { if ($this->fb2) { return $this->fb2; } $this->fb2 = $this->value; $this->fb2 = html_entity_decode($this->fb2, ENT_COMPAT, 'UTF-8'); $this->fb2 = htmlspecialchars($this->fb2, ENT_NOQUOTES, 'UTF-8'); $this->split(); $this->updateFirstParagraph(); $poemStarts = $poemEnds = array(); $codeStarts = $codeEnds = array(); foreach ($this->poems as $p) { list($b, $e) = $p; $poemStarts[] = $b; $poemEnds[] = $e; } foreach ($this->codes as $p) { list($b, $e) = $p; $codeStarts[] = $b; $codeEnds[] = $e; } $inpoem = FALSE; $incode = FALSE; $result = ''; foreach ($this->paragraphs as $k=>$p) { if (in_array($k, $poemStarts)) { $inpoem = TRUE; $result .= "\n"; } if (in_array($k, $codeStarts)) { $incode = TRUE; $result .= "\n"; } if ($incode) { $result .= "$p\n"; } elseif ($inpoem) { $result.="$p\n"; } else { $result.="

$p

\n"; } if (in_array($k, $poemEnds)) { $result .= "
"; $inpoem = FALSE; } if (in_array($k, $codeEnds)) { $incode = FALSE; $result .= "
\n"; } } $this->fb2 = $result; // $this->fb2 = preg_replace('/ -+(\s+)/',' —$1', $this->fb2); $this->fb2 = preg_replace('/\(pic: ([^\)]*)\)/','', $this->fb2); return $this->fb2; } protected function split() { $lines = split ("\n", $this->fb2); $this->paragraphs = array(); $current = ''; foreach ($lines as $l) { if (preg_match('/^[\s\|]/', $l)) { $this->paragraphs[] = $current; $current = $l ."\n"; } else { $current .= $l."\n" ; } } $this->paragraphs[] = $current; $sp = ''; $begin = $end = 0; $incode = FALSE; $this->poems = array(); $this->codes = array(); foreach ($this->paragraphs as $k=>$p) { if (preg_match('/^\|/', $p )) { $this->paragraphs[$k] = preg_replace('/^\|/', '', $this->paragraphs[$k]); if (!$incode) { $cbegin = $k; $incode = TRUE; } } else { if ($incode) { $this->codes[] = array($cbegin, $k); } $incode = FALSE; } $csp = preg_replace('/\S.*/', '', $p); if ($csp == $sp) { $end = $k; } else { if ($begin!=$end && $csp) { $this->poems[] = array($begin, $end); } $begin = $end = $k; $sp = $csp; } } if ($incode) { $this->codes[] = array($cbegin, $k); } if ($begin!=$end && $csp) { $this->poems[] = array($begin, $end); } } public function formatHtml() { $this->html = preg_replace('/(\s+)-+(\s+)/','\1—$2', $this->html); $this->html = preg_replace('/\[Раздаточный материал:(.*?)\]\s*\n/sm', "
Раздаточный материал
\\1
\n", $this->html ); $this->html = preg_replace('/^\s*<раздатка>(.*?)<\/раздатка>/sm', "
Раздаточный материал
\\1
\n", $this->html ); $this->html = preg_replace('/^\s+/m', "
\n    ", $this->html); if (!preg_match('/^\|/m',$this->html)) { $this->html = preg_replace('/\s+\–/m',' \–', $this->html); } $this->html = preg_replace('/\(pic: ([^\)]*)\)/','

', $this->html); if ($this->getSearchString()) { $this->highLight(); } } protected function highLight() { $sstr = $this->getSearchString(); setlocale(LC_ALL, 'ru_RU.utf8'); preg_match_all('/[\wа-я]{4,}\*?/iu', $sstr, $matchs); $terms= $matchs[0]; foreach ($terms as $term) { if ( preg_match('/\*$/', $term) ) { $letters=preg_replace('/\*/', '', $term); $this->html = preg_replace("/{$letters}[\wа-я]*/iu", '$0', $this->html); } else { $this->html = str_replace($term, ''.$term."", $this->html); } } } public function getName() { return $this->field; } public function getNumber() { return $this->number; } public function isEmpty() { return $this->value === NULL || $this->value===''; } public function getValue() { return $this->value; } public function getImages() { $m = preg_match_all('/\(pic:\s*(.*?)\)/', $this->value, $matches, PREG_PATTERN_ORDER); $this->images = $matches[1]; return $this->images; } public function getSearchString() { if (!$this->parent) { return ''; } return $this->parent->getSearchString(); } }