Page MenuHomePhorge

PhutilRemarkupQuotedBlockRule.php
No OneTemporary

PhutilRemarkupQuotedBlockRule.php

<?php
abstract class PhutilRemarkupQuotedBlockRule
extends PhutilRemarkupBlockRule {
final public function supportsChildBlocks() {
return true;
}
public function willMarkupChildBlocks() {
$engine = $this->getEngine();
$depth = $engine->getQuoteDepth();
$depth = $depth + 1;
$engine->setQuoteDepth($depth);
}
public function didMarkupChildBlocks() {
$engine = $this->getEngine();
$depth = $engine->getQuoteDepth();
$depth = $depth - 1;
$engine->setQuoteDepth($depth);
}
final protected function normalizeQuotedBody($text) {
$text = phutil_split_lines($text, true);
foreach ($text as $key => $line) {
$text[$key] = substr($line, 1);
}
// If every line in the block is empty or begins with at least one leading
// space, strip the initial space off each line. When we quote text, we
// normally add "> " (with a space) to the beginning of each line, which
// can disrupt some other rules. If the block appears to have this space
// in front of each line, remove it.
$strip_space = true;
foreach ($text as $key => $line) {
$len = strlen($line);
if (!$len) {
// We'll still strip spaces if there are some completely empty
// lines, they may have just had trailing whitespace trimmed.
continue;
}
// If this line is part of a nested quote block, just ignore it when
// realigning this quote block. It's either an author attribution
// line with ">>!", or we'll deal with it in a subrule when processing
// the nested quote block.
if ($line[0] == '>') {
continue;
}
if ($line[0] == ' ' || $line[0] == "\n") {
continue;
}
// The first character of this line is something other than a space, so
// we can't strip spaces.
$strip_space = false;
break;
}
if ($strip_space) {
foreach ($text as $key => $line) {
$len = strlen($line);
if (!$len) {
continue;
}
if ($line[0] !== ' ') {
continue;
}
$text[$key] = substr($line, 1);
}
}
// Strip leading empty lines.
foreach ($text as $key => $line) {
if (!strlen(trim($line))) {
unset($text[$key]);
} else {
break;
}
}
return implode('', $text);
}
final protected function getQuotedText($text) {
$text = rtrim($text, "\n");
$no_whitespace = array(
// For readability, we render nested quotes as ">> quack",
// not "> > quack".
'>' => true,
// If the line is empty except for a newline, do not add an
// unnecessary dangling space.
"\n" => true,
);
$text = phutil_split_lines($text, true);
foreach ($text as $key => $line) {
$c = null;
if (isset($line[0])) {
$c = $line[0];
} else {
$c = null;
}
if (isset($no_whitespace[$c])) {
$text[$key] = '>'.$line;
} else {
$text[$key] = '> '.$line;
}
}
$text = implode('', $text);
return $text;
}
}

File Metadata

Mime Type
text/x-php
Expires
Sun, Jan 19, 15:44 (3 w, 8 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1126121
Default Alt Text
PhutilRemarkupQuotedBlockRule.php (3 KB)

Event Timeline