system/View/Parser.php
protected function parsePlugins(string $template)
	{
		foreach ($this->plugins as $plugin => $callable)
		{
			// Paired tags are enclosed in an array in the config array.
			$isPair   = is_array($callable);
			$callable = $isPair ? array_shift($callable) : $callable;

			$pattern = $isPair ? '#{\+\s*' . $plugin . '([\w\d=-_:\+\s()/\"@.]*)?\s*\+}(.+?){\+\s*/' . $plugin . '\s*\+}#ims' : '#{\+\s*' . $plugin . '([\w\d=-_:\+\s()/\"@.]*)?\s*\+}#ims';

			/**
			 * Match tag pairs
			 *
			 * Each match is an array:
			 *   $matches[0] = entire matched string
			 *   $matches[1] = all parameters string in opening tag
			 *   $matches[2] = content between the tags to send to the plugin.
			 */
			preg_match_all($pattern, $template, $matches, PREG_SET_ORDER);

			if (empty($matches))
			{
				continue;
			}

			foreach ($matches as $match)
			{
				$params = [];

				// Split on "words", but keep quoted groups together, accounting for escaped quotes.
				// Note: requires double quotes, not single quotes.
				$parts = str_getcsv($match[1], ' ');

				foreach ($parts as $part)
				{
					if (empty($part))
					{
						continue;
					}

					if (strpos($part, '=') !== false)
					{
						list($a, $b) = explode('=', $part);
						$params[$a]  = $b;
					}
					else
					{
						$params[] = $part;
					}
				}
				unset($parts);

				$template = $isPair ? str_replace($match[0], $callable($match[2], $params), $template) : str_replace($match[0], $callable($params), $template);
			}
		}

		return $template;
	}
protected function parsePlugins(string $template)
	{
		foreach ($this->plugins as $plugin => $callable)
		{
			// Paired tags are enclosed in an array in the config array.
			$isPair   = is_array($callable);
			$callable = $isPair ? array_shift($callable) : $callable;

			$pattern = $isPair ? '#{\+\s*' . $plugin . '([\w\d=-_:\+\s()/\"@.]*)?\s*\+}(.+?){\+\s*/' . $plugin . '\s*\+}#ims' : '#{\+\s*' . $plugin . '([\w\d=-_:\+\s()/\"@.]*)?\s*\+}#ims';

			/**
			 * Match tag pairs
			 *
			 * Each match is an array:
			 *   $matches[0] = entire matched string
			 *   $matches[1] = all parameters string in opening tag
			 *   $matches[2] = content between the tags to send to the plugin.
			 */
			preg_match_all($pattern, $template, $matches, PREG_SET_ORDER);

			if (empty($matches))
			{
				continue;
			}

			foreach ($matches as $match)
			{
				$params = [];

				// Split on "words", but keep quoted groups together, accounting for escaped quotes.
				// Note: requires double quotes, not single quotes.
				$parts = str_getcsv($match[1], ' ');

				foreach ($parts as $part)
				{
					if (empty($part))
					{
						continue;
					}

					if (strpos($part, '=') !== false)
					{
						list($a, $b) = explode('=', $part);
						$params[$a]  = $b;
					}
					else
					{
						$params[] = $part;
					}
				}
				unset($parts);

				$template = $isPair ? str_replace($match[0], $callable($match[2], $params), $template) : str_replace($match[0], $callable($params), $template);
			}
		}

		return $template;
	}
Scans the template for any parser plugins, and attempts to execute them.
Plugins are notated based on {+ +} opening and closing braces.

When encountered,

@param string $template

@return string