Path: blob/master/src/applications/macro/markup/PhabricatorMemeRemarkupRule.php
12241 views
<?php12final class PhabricatorMemeRemarkupRule extends PhutilRemarkupRule {34private $images;56public function getPriority() {7return 200.0;8}910public function apply($text) {11return preg_replace_callback(12'@{meme,((?:[^}\\\\]+|\\\\.)+)}@m',13array($this, 'markupMeme'),14$text);15}1617public function markupMeme(array $matches) {18if (!$this->isFlatText($matches[0])) {19return $matches[0];20}2122$options = array(23'src' => null,24'above' => null,25'below' => null,26);2728$parser = new PhutilSimpleOptions();29$options = $parser->parse($matches[1]) + $options;3031$engine = id(new PhabricatorMemeEngine())32->setViewer(PhabricatorUser::getOmnipotentUser())33->setTemplate($options['src'])34->setAboveText($options['above'])35->setBelowText($options['below']);3637$asset = $engine->loadCachedFile();3839$is_html_mail = $this->getEngine()->isHTMLMailMode();40$is_text = $this->getEngine()->isTextMode();41$must_inline = ($is_html_mail || $is_text);4243if ($must_inline) {44if (!$asset) {45try {46$asset = $engine->newAsset();47} catch (Exception $ex) {48return $matches[0];49}50}51}5253if ($asset) {54$uri = $asset->getViewURI();55} else {56$uri = $engine->getGenerateURI();57}5859if ($is_text) {60$parts = array();6162$above = $options['above'];63if (strlen($above)) {64$parts[] = pht('"%s"', $above);65}6667$parts[] = $options['src'].' <'.$uri.'>';6869$below = $options['below'];70if (strlen($below)) {71$parts[] = pht('"%s"', $below);72}7374$parts = implode("\n", $parts);75return $this->getEngine()->storeText($parts);76}7778$alt_text = pht(79'Macro %s: %s %s',80$options['src'],81$options['above'],82$options['below']);8384if ($asset) {85$img = $this->newTag(86'img',87array(88'src' => $uri,89'class' => 'phabricator-remarkup-macro',90'alt' => $alt_text,91));92} else {93$img = id(new PHUIRemarkupImageView())94->setURI($uri)95->addClass('phabricator-remarkup-macro')96->setAlt($alt_text);97}9899return $this->getEngine()->storeText($img);100}101102}103104105