/** * Parse an article description (the part of an inline query that * is in between "[[" and the closing "]]" assuming it is not specifying * a category or property) and create a suitable description. * The first chunk behind the "[[" has already been read and is * passed as a parameter. */ private function getArticleDescription($firstChunk, &$setNS) { $chunk = $firstChunk; $result = null; $continue = true; while ($continue) { if ($chunk == '<q>') { // no subqueries of the form [[<q>...</q>]] (not needed) $this->descriptionProcessor->addErrorWithMsgKey('smw_misplacedsubquery'); return null; } $list = preg_split('/:/', $chunk, 3); // ":Category:Foo" "User:bar" ":baz" ":+" if ($list[0] === '' && count($list) == 3) { $list = array_slice($list, 1); } if (count($list) == 2 && $list[1] == '+') { // try namespace restriction $idx = \SMW\Localizer::getInstance()->getNamespaceIndexByName($list[0]); if ($idx !== false) { $result = $this->descriptionProcessor->getDisjunctiveCompoundDescriptionFrom($result, new NamespaceDescription($idx)); } } else { $result = $this->descriptionProcessor->getDisjunctiveCompoundDescriptionFrom($result, $this->descriptionProcessor->getDescriptionForWikiPageValueChunk($chunk)); } $chunk = $this->readChunk('\\[\\[|\\]\\]|\\|\\||\\|'); if ($chunk == '||') { $chunk = $this->readChunk('\\[\\[|\\]\\]|\\|\\||\\|'); $continue = true; } else { $continue = false; } } return $this->finishLinkDescription($chunk, true, $result, $setNS); }
public function testTryToGetDisjunctiveCompoundDescriptionForNullCurrentDescription() { $instance = new DescriptionProcessor(); $newDescription = $instance->getDescriptionForWikiPageValueChunk('bar'); $this->assertInstanceOf('SMW\\Query\\Language\\ValueDescription', $instance->getDisjunctiveCompoundDescriptionFrom(null, $newDescription)); }