public function testAnalyze() { $config = array('MaxTags' => 300, 'MaxNestingLevel' => 2, 'TolerateInvalid' => false); $expects = array(array(array(array(Consts::CONTEXT_ID => '', Consts::CONTEXT_TYPE => Consts::CONTEXT_TYPE_WILDCARD, Consts::CONTEXT_START => 13, Consts::CONTEXT_END => 18, Consts::CONTEXT_CONTEXT => null))), array(array(array(Consts::CONTEXT_ID => '', Consts::CONTEXT_TYPE => Consts::CONTEXT_TYPE_WILDCARD, Consts::CONTEXT_START => 7, Consts::CONTEXT_END => 11, Consts::CONTEXT_CONTEXT => null))), array(array(array(Consts::CONTEXT_ID => '', Consts::CONTEXT_TYPE => Consts::CONTEXT_TYPE_WILDCARD, Consts::CONTEXT_START => 41, Consts::CONTEXT_END => 44, Consts::CONTEXT_CONTEXT => null))), array(array(array(Consts::CONTEXT_ID => '', Consts::CONTEXT_TYPE => Consts::CONTEXT_TYPE_WILDCARD, Consts::CONTEXT_START => 57, Consts::CONTEXT_END => 60, Consts::CONTEXT_CONTEXT => null))), array(array(array(Consts::CONTEXT_ID => '', Consts::CONTEXT_TYPE => Consts::CONTEXT_TYPE_WILDCARD, Consts::CONTEXT_START => 50, Consts::CONTEXT_END => 53, Consts::CONTEXT_CONTEXT => null))), array(array(array(Consts::CONTEXT_ID => '0/0/3/0/0', Consts::CONTEXT_TYPE => Consts::CONTEXT_TYPE_CHILD, Consts::CONTEXT_START => 48, Consts::CONTEXT_END => 54, Consts::CONTEXT_CONTEXT => 'Facula\\Unit\\Formated\\Base\\Analyzer\\Context'), array(Consts::CONTEXT_ID => '', Consts::CONTEXT_TYPE => Consts::CONTEXT_TYPE_WILDCARD, Consts::CONTEXT_START => 54, Consts::CONTEXT_END => 55, Consts::CONTEXT_CONTEXT => null), array(Consts::CONTEXT_ID => '0/0/3/0/1', Consts::CONTEXT_TYPE => Consts::CONTEXT_TYPE_CHILD, Consts::CONTEXT_START => 55, Consts::CONTEXT_END => 61, Consts::CONTEXT_CONTEXT => 'Facula\\Unit\\Formated\\Base\\Analyzer\\Context'))), array(array(array(Consts::CONTEXT_ID => '', Consts::CONTEXT_TYPE => Consts::CONTEXT_TYPE_WILDCARD, Consts::CONTEXT_START => 34, Consts::CONTEXT_END => 37, Consts::CONTEXT_CONTEXT => null)), array(array(Consts::CONTEXT_ID => '0/0/2/1/0', Consts::CONTEXT_TYPE => Consts::CONTEXT_TYPE_CHILD, Consts::CONTEXT_START => 39, Consts::CONTEXT_END => 45, Consts::CONTEXT_CONTEXT => 'Facula\\Unit\\Formated\\Base\\Analyzer\\Context'))), array(array(array(Consts::CONTEXT_ID => '', Consts::CONTEXT_TYPE => Consts::CONTEXT_TYPE_WILDCARD, Consts::CONTEXT_START => 23, Consts::CONTEXT_END => 26, Consts::CONTEXT_CONTEXT => null)), array(array(Consts::CONTEXT_ID => '', Consts::CONTEXT_TYPE => Consts::CONTEXT_TYPE_WILDCARD, Consts::CONTEXT_START => 28, Consts::CONTEXT_END => 31, Consts::CONTEXT_CONTEXT => null))), array(array(array(Consts::CONTEXT_ID => '0/0/0/0/0', Consts::CONTEXT_TYPE => Consts::CONTEXT_TYPE_CHILD, Consts::CONTEXT_START => 6, Consts::CONTEXT_END => 12, Consts::CONTEXT_CONTEXT => 'Facula\\Unit\\Formated\\Base\\Analyzer\\Context'), array(Consts::CONTEXT_ID => '0/0/0/0/1', Consts::CONTEXT_TYPE => Consts::CONTEXT_TYPE_CHILD, Consts::CONTEXT_START => 12, Consts::CONTEXT_END => 19, Consts::CONTEXT_CONTEXT => 'Facula\\Unit\\Formated\\Base\\Analyzer\\Context'))), array(array(array(Consts::CONTEXT_ID => '', Consts::CONTEXT_TYPE => Consts::CONTEXT_TYPE_WILDCARD, Consts::CONTEXT_START => 0, Consts::CONTEXT_END => 4, Consts::CONTEXT_CONTEXT => null), array(Consts::CONTEXT_ID => '0/0/0', Consts::CONTEXT_TYPE => Consts::CONTEXT_TYPE_CHILD, Consts::CONTEXT_START => 4, Consts::CONTEXT_END => 21, Consts::CONTEXT_CONTEXT => 'Facula\\Unit\\Formated\\Base\\Analyzer\\Context'), array(Consts::CONTEXT_ID => '0/0/1', Consts::CONTEXT_TYPE => Consts::CONTEXT_TYPE_CHILD, Consts::CONTEXT_START => 21, Consts::CONTEXT_END => 32, Consts::CONTEXT_CONTEXT => 'Facula\\Unit\\Formated\\Base\\Analyzer\\Context'), array(Consts::CONTEXT_ID => '0/0/2', Consts::CONTEXT_TYPE => Consts::CONTEXT_TYPE_CHILD, Consts::CONTEXT_START => 32, Consts::CONTEXT_END => 46, Consts::CONTEXT_CONTEXT => 'Facula\\Unit\\Formated\\Base\\Analyzer\\Context'), array(Consts::CONTEXT_ID => '0/0/3', Consts::CONTEXT_TYPE => Consts::CONTEXT_TYPE_CHILD, Consts::CONTEXT_START => 46, Consts::CONTEXT_END => 62, Consts::CONTEXT_CONTEXT => 'Facula\\Unit\\Formated\\Base\\Analyzer\\Context'), array(Consts::CONTEXT_ID => '', Consts::CONTEXT_TYPE => Consts::CONTEXT_TYPE_WILDCARD, Consts::CONTEXT_START => 62, Consts::CONTEXT_END => 63, Consts::CONTEXT_CONTEXT => null)))); $t = new Tags(); $t->register(new FakeTags\BoldTag($config)); $t->register(new FakeTags\ItalicTag($config)); $t->register(new FakeTags\VariableShortTag($config)); $t->register(new FakeTags\VariableTag($config)); $t->register(new FakeTags\PercentTag($config)); $a = new Analyzer($t, $config); $string = 'Some***Bold**Bold2***${AAA}(BBB)${CCC}(${DDD})%{${EEE}F${GGG}}.'; $contexts = $a->analyze($string); foreach ($contexts as $contextKey => $context) { foreach ($context->steps() as $wildcardKey => $wildcardData) { foreach ($wildcardData as $stepsKey => $steps) { /* printf("[%03d, %03d, %03d] => ID: %10s, Type: %03d, Start: %03d, End: %03d => |%s| \r\n", $contextKey, $wildcardKey, $stepsKey, $steps[Consts::CONTEXT_ID], $steps[Consts::CONTEXT_TYPE], $steps[Consts::CONTEXT_START], $steps[Consts::CONTEXT_END], substr( $string, $steps[Consts::CONTEXT_START], $steps[Consts::CONTEXT_END] - $steps[Consts::CONTEXT_START] ) );*/ // Consts::CONTEXT_ID $this->assertSame($expects[$contextKey][$wildcardKey][$stepsKey][Consts::CONTEXT_ID], $steps[Consts::CONTEXT_ID]); // Consts::CONTEXT_TYPE $this->assertSame($expects[$contextKey][$wildcardKey][$stepsKey][Consts::CONTEXT_TYPE], $steps[Consts::CONTEXT_TYPE]); // Consts::CONTEXT_START $this->assertSame($expects[$contextKey][$wildcardKey][$stepsKey][Consts::CONTEXT_START], $steps[Consts::CONTEXT_START]); // Consts::CONTEXT_END $this->assertSame($expects[$contextKey][$wildcardKey][$stepsKey][Consts::CONTEXT_END], $steps[Consts::CONTEXT_END]); // Consts::CONTEXT_CONTEXT if ($expects[$contextKey][$wildcardKey][$stepsKey][Consts::CONTEXT_ID] === '') { $this->assertSame(true, is_null($steps[Consts::CONTEXT_CONTEXT])); } else { $this->assertSame($expects[$contextKey][$wildcardKey][$stepsKey][Consts::CONTEXT_CONTEXT], get_class($steps[Consts::CONTEXT_CONTEXT])); } } } } }
/** * Parse a content * * @param string $content The content which will be parsed * * @return Render Return a render instance. */ public function parse($content) { $config = $this->config->get('Analyzer') + $this->config->get('Common'); $analyzer = new Analyzer($this->tag, $config); return new Render($analyzer->analyze($content), $content); }