bbcodeMonkey = new BBCodeMonkey($this->configurator); $this->collection = new BBCodeCollection; $this->repositories = new RepositoryCollection($this->bbcodeMonkey); $this->repositories->add('default', __DIR__ . '/Configurator/repository.xml'); } public function addCustom($usage, $template, array $options = []) { $config = $this->bbcodeMonkey->create($usage, $template); if (isset($options['tagName'])) $config['bbcode']->tagName = $options['tagName']; if (isset($options['rules'])) $config['tag']->rules->merge($options['rules']); return $this->addFromConfig($config); } public function addFromRepository($name, $repository = 'default', array $vars = []) { if (!($repository instanceof Repository)) { if (!$this->repositories->exists($repository)) throw new InvalidArgumentException("Repository '" . $repository . "' does not exist"); $repository = $this->repositories->get($repository); } return $this->addFromConfig($repository->get($name, $vars)); } protected function addFromConfig(array $config) { $bbcodeName = $config['bbcodeName']; $bbcode = $config['bbcode']; $tag = $config['tag']; if (!isset($bbcode->tagName)) $bbcode->tagName = $bbcodeName; $this->configurator->templateNormalizer->normalizeTag($tag); $this->configurator->templateChecker->checkTag($tag); $this->collection->add($bbcodeName, $bbcode); $this->configurator->tags->add($bbcode->tagName, $tag); return $bbcode; } public function asConfig() { if (!\count($this->collection)) return; return [ 'bbcodes' => $this->collection->asConfig(), 'quickMatch' => $this->quickMatch, 'regexp' => $this->regexp ]; } }