version 1.5, 2010/03/20 17:23:42
|
version 1.7, 2010/03/21 18:19:59
|
Line 7 class DbField {
|
Line 7 class DbField {
|
protected $value; |
protected $value; |
protected $number; |
protected $number; |
protected $html; |
protected $html; |
|
protected $paragraphs; |
|
protected $fb2; |
|
protected $poems; |
|
protected $codes; |
|
|
public function __construct($field, $value, $number = false) { |
public function __construct($field, $value, $number = false) { |
$this->field = $field; |
$this->field = $field; |
$this->value = $value; |
$this->value = $value; |
Line 23 class DbField {
|
Line 28 class DbField {
|
$this->formatHtml(); |
$this->formatHtml(); |
return $this->html; |
return $this->html; |
} |
} |
|
|
|
protected function updateFirstParagraph() { |
|
$this->paragraphs[0] = |
|
'<strong>'.$this->getName(). |
|
':</strong> '. $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 .= "<poem><stranza>\n"; |
|
} |
|
if (in_array($k, $codeStarts)) { |
|
$incode = TRUE; |
|
$result .= "<poem><stranza>\n"; |
|
} |
|
|
|
if ($incode) { |
|
$result .= "<v>$p</v>\n"; |
|
} elseif ($inpoem) { |
|
$result.="<v>$p</v>\n"; |
|
} else { |
|
$result.="<p>$p</p>\n"; |
|
} |
|
if (in_array($k, $poemEnds)) { |
|
$result .= "</stranza></poem>"; |
|
|
|
$inpoem = FALSE; |
|
} |
|
|
|
if (in_array($k, $codeEnds)) { |
|
$incode = FALSE; |
|
$result .= "</stranza></poem>\n"; |
|
} |
|
|
|
} |
|
$this->fb2 = $result; |
|
$this->fb2 = preg_replace('/ -+(\s+)/',' —$1', $this->fb2); |
|
$this->fb2 = preg_replace('/\(pic: ([^\)]*)\)/','<image l:href="#$1" />', $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; |
|
} 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() { |
public function formatHtml() { |
$this->html = preg_replace('/(\s+)-+(\s+)/','\1—$2', $this->html); |
$this->html = preg_replace('/(\s+)-+(\s+)/','\1—$2', $this->html); |
|
|
Line 58 class DbField {
|
Line 183 class DbField {
|
public function getValue() { |
public function getValue() { |
return $this->value; |
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; |
|
} |
} |
} |