/** * @see \wcf\system\bbcode\IBBCode::getParsedTag() */ public function getParsedTag(array $openingTag, $content, array $closingTag, BBCodeParser $parser) { if ($parser->getOutputType() == 'text/html') { $quoteLink = !empty($openingTag['attributes'][1]) ? $openingTag['attributes'][1] : ''; $externalQuoteLink = !empty($openingTag['attributes'][1]) ? !ApplicationHandler::getInstance()->isInternalURL($openingTag['attributes'][1]) : false; if (!$externalQuoteLink) { $quoteLink = preg_replace('~^https?://~', RouteHandler::getProtocol(), $quoteLink); } $quoteAuthor = !empty($openingTag['attributes'][0]) ? $openingTag['attributes'][0] : ''; $quoteAuthorObject = null; if ($quoteAuthor && !$externalQuoteLink) { $quoteAuthorLC = mb_strtolower(StringUtil::decodeHTML($quoteAuthor)); foreach (MessageEmbeddedObjectManager::getInstance()->getObjects('com.woltlab.wcf.quote') as $user) { if (mb_strtolower($user->username) == $quoteAuthorLC) { $quoteAuthorObject = $user; break; } } } WCF::getTPL()->assign(array('content' => $content, 'quoteLink' => $quoteLink, 'quoteAuthor' => $quoteAuthor, 'quoteAuthorObject' => $quoteAuthorObject, 'isExternalQuoteLink' => $externalQuoteLink)); return WCF::getTPL()->fetch('quoteBBCodeTag'); } else { if ($parser->getOutputType() == 'text/simplified-html') { return WCF::getLanguage()->getDynamicVariable('wcf.bbcode.quote.text', array('content' => $content, 'cite' => !empty($openingTag['attributes'][0]) ? $openingTag['attributes'][0] : '')) . "\n"; } } }
/** * @see \wcf\system\bbcode\IBBCode::getParsedTag() */ public function getParsedTag(array $openingTag, $content, array $closingTag, BBCodeParser $parser) { $src = ''; if (isset($openingTag['attributes'][0])) { $src = $openingTag['attributes'][0]; } if ($parser->getOutputType() == 'text/html') { $float = ''; if (isset($openingTag['attributes'][1])) { $float = $openingTag['attributes'][1]; } $style = ''; if ($float == 'left' || $float == 'right') { $style = 'float: ' . $float . '; margin: ' . ($float == 'left' ? '0 15px 7px 0' : '0 0 7px 15px') . ';'; } $width = 0; if (isset($openingTag['attributes'][2])) { $width = $openingTag['attributes'][2]; $style .= 'width: ' . $width . 'px;'; } return '<img src="' . $src . '" class="jsResizeImage" alt=""' . ($style ? ' style="' . $style . '"' : '') . ' />'; } else { if ($parser->getOutputType() == 'text/simplified-html') { $src = StringUtil::decodeHTML($src); $path = parse_url($src, PHP_URL_PATH); if ($path !== false) { return StringUtil::encodeHTML(basename($path)); } return ''; } } }
/** * @see \wcf\system\bbcode\IBBCode::getParsedTag() */ public function getParsedTag(array $openingTag, $content, array $closingTag, BBCodeParser $parser) { if (mb_strpos($content, '[*]') !== false) { // get list elements $listElements = preg_split('/\\[\\*\\]/', StringUtil::trim($content), -1, PREG_SPLIT_NO_EMPTY); // remove empty elements foreach ($listElements as $key => $val) { $listElements[$key] = StringUtil::trim($val); if (empty($listElements[$key]) || $listElements[$key] == '<br />') { unset($listElements[$key]); } } if (!empty($listElements)) { // get list style type $listType = 'disc'; if (isset($openingTag['attributes'][0])) { $listType = $openingTag['attributes'][0]; } $listType = strtolower($listType); // replace old types if ($listType == '1') { $listType = 'decimal'; } if ($listType == 'a') { $listType = 'lower-latin'; } if ($parser->getOutputType() == 'text/html') { // build list html $listHTML = 'ol'; if ($listType == 'none' || $listType == 'circle' || $listType == 'square' || $listType == 'disc') { $listHTML = 'ul'; } return '<' . $listHTML . ' style="list-style-type: ' . $listType . '" class="nativeList"><li>' . implode('</li><li>', $listElements) . '</li></' . $listHTML . '>'; } else { if ($parser->getOutputType() == 'text/simplified-html') { $result = ''; $i = 1; foreach ($listElements as $listElement) { switch ($listType) { case 'decimal': $result .= $i . '. '; break; default: $result .= '- '; } $result .= $listElement . "\n"; $i++; } return $result; } } } } // no valid list // return bbcode as text return $openingTag['source'] . $content . $closingTag['source']; }
/** * @see \wcf\system\bbcode\IBBCode::getParsedTag() */ public function getParsedTag(array $openingTag, $content, array $closingTag, BBCodeParser $parser) { // copyright TeraliosBBCodesCopyright::callCopyright(); $content = StringUtil::trim($content); if (!empty($content) || mb_strpos($content, '[.]') !== false && mb_strpos($content, '[:]') !== false) { $content = str_replace('[.]', '[*]', $content); // build main list elements $listElements = preg_split('#\\[\\*\\]#', $content, -1, PREG_SPLIT_NO_EMPTY); foreach ($listElements as $key => $val) { $val = StringUtil::trim($val); if (empty($val) || $val == '<br />') { unset($listElements[$key]); } else { $listElements[$key] = $val; } } // build list if (!empty($listElements)) { $listContent = ''; foreach ($listElements as $point) { if (mb_substr_count($point, '[:]') == 1) { // reset key and value. $key = $value = ''; // split list element on [:] in key and definition of key. list($key, $value) = preg_split('#\\[:\\]#', $point, -1); $key = StringUtil::trim($key); $value = StringUtil::trim($value); if (empty($value)) { $value = WCF::getLanguage()->get('wcf.bbcode.dlist.noDefinition'); } // key is not empty. if (!empty($key)) { if ($parser->getOutputType() == 'text/html') { $listContent .= '<dt>' . $key . '</dt><dd>' . $value . '</dd>'; } else { if ($parser->getOutputType() == 'text/simplified-html') { $listContent .= '*' . $key . ': ' . $value . "\n"; } } } } } if (!empty($listContent)) { if ($parser->getOutputType() == 'text/html') { return '<dl class="dlistBBCode">' . $listContent . '</dl><span></span>'; } else { if ($parser->getOutputType() == 'text/simplified-html') { return $listContent; } } } } } return '[dlist]' . $content . '[/dlist]'; }
/** * @see \wcf\system\bbcode\IBBCode::getParsedTag() */ public function getParsedTag(array $openingTag, $content, array $closingTag, BBCodeParser $parser) { if ($parser->getOutputType() == 'text/html') { WCF::getTPL()->assign(array('content' => $content, 'buttonTitle' => !empty($openingTag['attributes'][0]) ? $openingTag['attributes'][0] : '')); return WCF::getTPL()->fetch('spoilerBBCodeTag'); } if ($parser->getOutputType() == 'text/simplified-html') { return WCF::getLanguage()->get('wcf.bbcode.spoiler.text'); } }
/** * @see \wcf\system\bbcode\IBBCode::getParsedTag() */ public function getParsedTag(array $openingTag, $content, array $closingTag, BBCodeParser $parser) { // copyright TeraliosBBCodesCopyright::callCopyright(); $tag = mb_strtolower($openingTag['name']); // heading and subheading tag html. if ($parser->getOutputType() == 'text/html') { // map attributes $this->mapAttributes($openingTag); // assign attributes $anchor = $this->anchor; $noIndex = $this->noIndex; // check anchor and set automark if (BBCODES_HEADLINE_AUTOMARK == 1 && empty($anchor)) { $anchor = substr(md5($content), 0, 10); } else { if (empty($anchor)) { $anchor = ''; } } // check anchor if (!empty($anchor)) { $anchor = sprintf(static::$anchorPrefix, static::anchorExists($anchor, $anchor)); if ($noIndex != true) { $anchor = Directory::getInstance()->addEntry($anchor, StringUtil::decodeHTML($content), $tag == 'h1' ? true : false); } else { $anchor = new Entry($anchor, StringUtil::decodeHTML($content)); } } // assign to template WCF::getTPL()->assign(array('hsTag' => $tag, 'hsEntry' => $anchor, 'hsHeading' => $content, 'hsLinkTitle' => StringUtil::stripHTML($content))); return WCF::getTPL()->fetch('headingBBCode'); } else { if ($parser->getOutputType('text/simplified-html')) { switch ($tag) { case 'h1': $return = '--- ' . $content . ' ---<br />'; break; default: $return = '-- ' . $content . ' --<br />'; break; } return $return; } } }
/** * @see \wcf\system\bbcode\IBBCode::getParsedTag() */ public function getParsedTag(array $openingTag, $content, array $closingTag, BBCodeParser $parser) { $content = StringUtil::trim($content); if ($parser->getOutputType() == 'text/html') { foreach (BBCodeMediaProvider::getCache() as $provider) { if ($provider->matches($content)) { return $provider->getOutput($content); } } } if ($parser->getOutputType() == 'text/simplified-html') { foreach (BBCodeMediaProvider::getCache() as $provider) { if ($provider->matches($content)) { return StringUtil::getAnchorTag($content); } } } return StringUtil::encodeHTML($content); }
/** * @see \wcf\system\bbcode\IBBCode::getParsedTag() */ public function getParsedTag(array $openingTag, $content, array $closingTag, BBCodeParser $parser) { //copyright TeraliosBBCodesCopyright::callCopyright(); // map attributes $this->mapAttributes($openingTag); // assign vattributes $title = $this->title; $position = $this->position; $size = $this->size; // size settings. if ($size <= 0 && ($position == 'left' || $position == 'right')) { $size = 2; } else { if ($size >= 4) { $size = 0; $position = 'none'; } } // parse box with out HTML if ($parser->getOutputType() == 'text/simplified-html') { if (!empty($title)) { $return = '<br />----( ' . $title . ' )----<br />'; } else { $return = '<br />--------<br />'; } $return .= $content; $return .= '<br />--------<br />'; return $return; } else { if ($parser->getOutputType() == 'text/html') { WCF::getTPL()->assign(array('boxTitle' => $title, 'boxPosition' => $position, 'boxSize' => $size, 'boxContent' => $content)); return WCF::getTPL()->fetch('contentBoxBBCode', 'wcf'); } } }
/** * @see \wcf\system\bbcode\IBBCode::getParsedTag() */ public function getParsedTag(array $openingTag, $content, array $closingTag, BBCodeParser $parser) { // copyright counter. TeraliosBBCodesCopyright::callCopyright(); TeraliosUtil::easterEgg(16); // map attributes $this->mapAttributes($openingTag); // assign values $title = $this->title; $position = $this->position; $points = array(); // build array $content = str_replace('[.]', '[*]', $content); if (preg_match(self::SPLIT_PATTERN, $content)) { // split on [+] [-] or [*] $elements = array(); $elements = preg_split(self::SPLIT_PATTERN, $content, -1, PREG_SPLIT_DELIM_CAPTURE); // remove first element. unset($elements[0]); // build array for points. if (!empty($elements)) { $i = 1; $count = count($elements); while ($i < $count) { $sign = $elements[$i]; $value = StringUtil::trim($elements[$i + 1]); // check value, when is not empty, add. if (!empty($value) && $value != '<br />') { if (!isset($points[$sign])) { $points[$sign] = array(); } $points[$sign][] = $value; } // current index + 2 $i = $i + 2; } } } // output if (empty($points)) { return '[procontra]' . $content . '[/procontra]'; } else { if ($parser->getOutputType() == 'text/html') { // assign variables WCF::getTPL()->assign(array('pcTitle' => $title, 'pcPoints' => $points, 'pcPosition' => $position)); return WCF::getTPL()->fetch('proContraBBCodeTag'); } else { if ($parser->getOutputType() == 'text/simplified-html') { // no supports simplified html. $return = $title . '<br />'; $return .= str_repeat('-', mb_strlen($title)) . '<br />'; foreach ($points as $sign => $values) { $length = count($values); if ($length > 0) { $length--; for ($i = 0; $i <= $length; $i++) { $return .= $sign . ' ' . $values[$i] . '<br />'; } } } return $return; } } } }
/** * @see \wcf\system\bbcode\IBBCode::getParsedTag() */ public function getParsedTag(array $openingTag, $content, array $closingTag, BBCodeParser $parser) { // get attachment id $attachmentID = 0; if (isset($openingTag['attributes'][0])) { $attachmentID = $openingTag['attributes'][0]; } // get embedded object $attachment = MessageEmbeddedObjectManager::getInstance()->getObject('com.woltlab.wcf.attachment', $attachmentID); if ($attachment === null) { if (self::$attachmentList !== null) { $attachments = self::$attachmentList->getGroupedObjects(self::$objectID); if (isset($attachments[$attachmentID])) { $attachment = $attachments[$attachmentID]; // mark attachment as embedded $attachment->markAsEmbedded(); } } } if ($attachment !== null) { if ($attachment->showAsImage() && $attachment->canViewPreview() && $parser->getOutputType() == 'text/html') { // image $alignment = isset($openingTag['attributes'][1]) ? $openingTag['attributes'][1] : ''; $width = isset($openingTag['attributes'][2]) ? $openingTag['attributes'][2] : 0; // check if width is valid and the original is accessible by viewer if ($width > 0) { if ($attachment->canDownload()) { // check if width exceeds image width if ($width > $attachment->width) { $width = $attachment->width; } } else { $width = 0; } } $result = ''; if ($width > 0) { $class = ''; if ($alignment == 'left' || $alignment == 'right') { $class = 'messageFloatObject' . ucfirst($alignment); } $source = StringUtil::encodeHTML(LinkHandler::getInstance()->getLink('Attachment', array('object' => $attachment))); $title = StringUtil::encodeHTML($attachment->filename); $result = '<a href="' . $source . '" title="' . $title . '" class="embeddedAttachmentLink jsImageViewer' . ($class ? ' ' . $class : '') . '"><img src="' . $source . '" style="width: ' . $width . 'px" alt="" /></a>'; } else { $linkParameters = array('object' => $attachment); if ($attachment->hasThumbnail()) { $linkParameters['thumbnail'] = 1; } $class = ''; if ($alignment == 'left' || $alignment == 'right') { $class = 'messageFloatObject' . ucfirst($alignment); } $imageClasses = ''; if (!$attachment->hasThumbnail()) { $imageClasses = 'embeddedAttachmentLink jsResizeImage'; } if ($class && (!$attachment->hasThumbnail() || !$attachment->canDownload())) { $imageClasses .= ' ' . $class; } $result = '<img src="' . StringUtil::encodeHTML(LinkHandler::getInstance()->getLink('Attachment', $linkParameters)) . '"' . ($imageClasses ? ' class="' . $imageClasses . '"' : '') . ' style="width: ' . ($attachment->hasThumbnail() ? $attachment->thumbnailWidth : $attachment->width) . 'px; height: ' . ($attachment->hasThumbnail() ? $attachment->thumbnailHeight : $attachment->height) . 'px;" alt="" />'; if ($attachment->hasThumbnail() && $attachment->canDownload()) { $result = '<a href="' . StringUtil::encodeHTML(LinkHandler::getInstance()->getLink('Attachment', array('object' => $attachment))) . '" title="' . StringUtil::encodeHTML($attachment->filename) . '" class="embeddedAttachmentLink jsImageViewer' . ($class ? ' ' . $class : '') . '">' . $result . '</a>'; } } return $result; } else { // file return StringUtil::getAnchorTag(LinkHandler::getInstance()->getLink('Attachment', array('object' => $attachment)), !empty($content) && $content != $attachmentID ? $content : $attachment->filename); } } // fallback return StringUtil::getAnchorTag(LinkHandler::getInstance()->getLink('Attachment', array('id' => $attachmentID))); }
/** * @see \wcf\system\bbcode\IBBCode::getParsedTag() */ public function getParsedTag(array $openingTag, $content, array $closingTag, BBCodeParser $parser) { if ($parser->getOutputType() == 'text/html') { $parsedContent = Regex::compile('(?:\\s|<br />)*(\\[tr\\].*\\[/tr\\])(?:\\s|<br />)*', Regex::CASE_INSENSITIVE | Regex::DOT_ALL)->replace($content, '\\1'); // check syntax $regex = new Regex('\\[/?t[rd]\\]', Regex::CASE_INSENSITIVE); if ($regex->match($parsedContent, true)) { $matches = $regex->getMatches(); $openTags = array(); $openTDs = 0; $firstRowTDs = 0; // parse tags foreach ($matches[0] as $match) { switch ($match) { case '[td]': if (end($openTags) !== '[tr]') { return; } $openTags[] = $match; $openTDs++; break; case '[/td]': if (end($openTags) !== '[td]') { return; } array_pop($openTags); break; case '[tr]': if (!empty($openTags)) { return; } $openTags[] = $match; break; case '[/tr]': if (end($openTags) !== '[tr]') { return; } array_pop($openTags); // check that every row has got the same number of tds if ($firstRowTDs === 0) { $firstRowTDs = $openTDs; } if ($openTDs !== $firstRowTDs) { return; } $openTDs = 0; break; } } if (!empty($openTags)) { return; } } else { return ''; } // tr $parsedContent = Regex::compile('\\[tr\\](?:\\s|<br />)*', Regex::CASE_INSENSITIVE)->replace($parsedContent, '<tr>'); // td $parsedContent = str_ireplace('[td]', '<td>', $parsedContent); // /td $parsedContent = Regex::compile('\\[/td\\](?:\\s|<br />)*', Regex::CASE_INSENSITIVE)->replace($parsedContent, '</td>'); // /tr $parsedContent = Regex::compile('\\[/tr\\](?:\\s|<br />)*', Regex::CASE_INSENSITIVE)->replace($parsedContent, '</tr>'); return '<div class="container bbcodeTable"><table class="table responsiveTable"><tbody>' . $parsedContent . '</tbody></table></div>'; } else { if ($parser->getOutputType() == 'text/simplified-html') { // remove table tags $content = str_ireplace('[td]', '* ', $content); $content = str_ireplace('[/td]', ' ', $content); $content = str_ireplace('[tr]', '', $content); $content = str_ireplace('[/tr]', '', $content); return $content; } } }
/** * @see \wcf\system\bbcode\IBBCode::getParsedTag() */ public function getParsedTag(array $openingTag, $content, array $closingTag, BBCodeParser $parser) { // call copyright TeraliosBBCodesCopyright::callCopyright(); // default values $attachmentID = 0; $float = 'none'; $type = 'default'; $link = ''; $text = ''; $isImage = false; // parameter values $attachmentID = isset($openingTag['attributes'][0]) ? intval($openingTag['attributes'][0]) : 0; $float = isset($openingTag['attributes'][1]) ? mb_strtolower($openingTag['attributes'][1]) : 'none'; switch ($float) { case 'left': case 'right': case 'none': break; default: $float = 'none'; } $text = StringUtil::trim($content); $title = WCF::getLanguage()->getDynamicVariable('wcf.bbcode.xattach.title', array('xaID' => $attachmentID)); // get attachment $attachment = MessageEmbeddedObjectManager::getInstance()->getObject('de.teralios.bbcodes.attachment', $attachmentID); if ($attachment === null) { if (static::$attachmentList !== null) { $attachments = static::$attachmentList->getGroupedObjects(static::$objectID); if (isset($attachments[$attachmentID])) { $attachment = $attachments[$attachmentID]; $attachment->markAsEmbedded(); } } } // Attachment if ($attachment !== null) { $title = !empty($attachment->filename) ? WCF::getLanguage()->getDynamicVariable('wcf.bbcode.xattach.title.full', array('xaFilename' => $attachment->filename, 'xaDownloads' => $attachment->downloads)) : $title; $linkParameters = array('object' => $attachment); // can view image if ($attachment->showAsImage() && $attachment->canViewPreview()) { if ($attachment->hasThumbnail()) { $linkParameters['thumbnail'] = 1; } $isImage = true; $link = '<img src="' . StringUtil::encodeHTML(LinkHandler::getInstance()->getLink('Attachment', $linkParameters)) . '"' . (!$attachment->hasThumbnail() ? ' class="embeddedAttachmentLink jsResizeImage"' : '') . ' style="width: ' . ($attachment->hasThumbnail() ? $attachment->thumbnailWidth : $attachment->width) . 'px; height: ' . ($attachment->hasThumbnail() ? $attachment->thumbnailHeight : $attachment->height) . 'px" alt="" />'; if ($attachment->hasThumbnail() && $attachment->canDownload()) { $link = '<a href="' . StringUtil::encodeHTML(LinkHandler::getInstance()->getLink('Attachment', array('object' => $attachment))) . '" title="' . $title . '" class="embeddedAttachmentLink jsImageViewer">' . $link . '</a>'; } } else { if ($attachment->showAsImage()) { $link = StringUtil::encodeHTML(LinkHandler::getInstance()->getLink('Attachment', array('object' => $attachment))); $type = 'image'; } else { $link = StringUtil::encodeHTML(LinkHandler::getInstance()->getLink('Attachment', array('object' => $attachment))); $type = self::getType($attachment); } } } else { $link = StringUtil::encodeHTML(LinkHandler::getInstance()->getLink('Attachment', array('id' => $attachmentID))); } if ($parser->getOutputType() == 'text/html') { WCF::getTPL()->assign(array('xaLink' => $link, 'xaTitle' => $title, 'xaIcon' => self::choseIcon($type), 'xaIsImage' => $isImage, 'xaText' => $text, 'xaFloat' => $float, 'xaNoBorder' => BBCODES_XATTACH_FREESTYLE)); $result = WCF::getTPL()->fetch('xAttachBBCode'); } else { $result = StringUtil::getAnchorTag($link, $title) . (!empty($text) ? ' (' . $text . ')' : ''); } return $result; }
/** * @see \wcf\system\bbcode\IBBCode::getParsedTag() */ public function getParsedTag(array $openingTag, $content, array $closingTag, BBCodeParser $parser) { // encode html $content = self::trim($content); // get attributes $this->mapAttributes($openingTag); // fetch highlighter-classname $className = '\\wcf\\system\\bbcode\\highlighter\\PlainHighlighter'; // no highlighting for strings over a certain size, to prevent DoS // this serves as a safety net in case one of the regular expressions // in a highlighter causes PCRE to exhaust resources, such as the stack if (strlen($content) < 16384) { if ($this->codeType) { $className = '\\wcf\\system\\bbcode\\highlighter\\' . StringUtil::firstCharToUpperCase(mb_strtolower($this->codeType)) . 'Highlighter'; switch (mb_substr($className, strlen('\\wcf\\system\\bbcode\\highlighter\\'))) { case 'ShellHighlighter': $className = '\\wcf\\system\\bbcode\\highlighter\\BashHighlighter'; break; case 'C++Highlighter': $className = '\\wcf\\system\\bbcode\\highlighter\\CHighlighter'; break; case 'JavascriptHighlighter': $className = '\\wcf\\system\\bbcode\\highlighter\\JsHighlighter'; break; case 'LatexHighlighter': $className = '\\wcf\\system\\bbcode\\highlighter\\TexHighlighter'; break; } } else { // try to guess highlighter if (mb_strpos($content, '<?php') !== false) { $className = '\\wcf\\system\\bbcode\\highlighter\\PhpHighlighter'; } else { if (mb_strpos($content, '<html') !== false) { $className = '\\wcf\\system\\bbcode\\highlighter\\HtmlHighlighter'; } else { if (mb_strpos($content, '<?xml') === 0) { $className = '\\wcf\\system\\bbcode\\highlighter\\XmlHighlighter'; } else { if (mb_strpos($content, 'SELECT') === 0 || mb_strpos($content, 'UPDATE') === 0 || mb_strpos($content, 'INSERT') === 0 || mb_strpos($content, 'DELETE') === 0) { $className = '\\wcf\\system\\bbcode\\highlighter\\SqlHighlighter'; } else { if (mb_strpos($content, 'import java.') !== false) { $className = '\\wcf\\system\\bbcode\\highlighter\\JavaHighlighter'; } else { if (mb_strpos($content, "---") !== false && mb_strpos($content, "\n+++") !== false) { $className = '\\wcf\\system\\bbcode\\highlighter\\DiffHighlighter'; } else { if (mb_strpos($content, "\n#include ") !== false) { $className = '\\wcf\\system\\bbcode\\highlighter\\CHighlighter'; } else { if (mb_strpos($content, '#!/usr/bin/perl') === 0) { $className = '\\wcf\\system\\bbcode\\highlighter\\PerlHighlighter'; } else { if (mb_strpos($content, 'def __init__(self') !== false) { $className = '\\wcf\\system\\bbcode\\highlighter\\PythonHighlighter'; } else { if (Regex::compile('^#!/bin/(ba|z)?sh')->match($content)) { $className = '\\wcf\\system\\bbcode\\highlighter\\BashHighlighter'; } else { if (mb_strpos($content, '\\documentclass') !== false) { $className = '\\wcf\\system\\bbcode\\highlighter\\TexHighlighter'; } else { if (Regex::compile('[-\\+\\.,\\[\\]\\>\\<]{9}')->match($content)) { // 9 times a brainfuck char in a row -> seems to be brainfuck $className = '\\wcf\\system\\bbcode\\highlighter\\BrainfuckHighlighter'; } } } } } } } } } } } } } } if (!class_exists($className)) { $className = '\\wcf\\system\\bbcode\\highlighter\\PlainHighlighter'; } if ($parser->getOutputType() == 'text/html') { $highlightedContent = self::fixMarkup(explode("\n", $className::getInstance()->highlight($content))); // show template WCF::getTPL()->assign(array('lineNumbers' => self::makeLineNumbers($content, $this->startLineNumber), 'startLineNumber' => $this->startLineNumber, 'content' => $highlightedContent, 'highlighter' => $className::getInstance(), 'filename' => $this->filename, 'lines' => substr_count($content, "\n") + 1)); return WCF::getTPL()->fetch('codeBBCodeTag'); } else { if ($parser->getOutputType() == 'text/simplified-html') { return WCF::getLanguage()->getDynamicVariable('wcf.bbcode.code.text', array('highlighterTitle' => $className::getInstance()->getTitle(), 'lines' => substr_count($content, "\n") + 1)); } } }