/** * Constructor * * @param Analyzer $analyzer Analyzer * @param DataSourceInterface $dataSource Data Source * @param SplFileInfo $file File * @param bool $isRaw Should be treated as raw * @param bool $hasChanged Has the file changed? */ public function __construct(Analyzer $analyzer, DataSourceInterface $dataSource, SplFileInfo $file, $isRaw, $hasChanged = false) { $this->analyzer = $analyzer; $this->sourceId = 'FileSource:' . $dataSource->dataSourceId() . ':' . $file->getRelativePathname(); $this->relativePathname = $file->getRelativePathname(); $this->filename = $file->getFilename(); $this->file = $file; $this->isRaw = $isRaw; $this->hasChanged = $hasChanged; $internetMediaTypeFactory = $this->analyzer->getInternetMediaTypeFactory(); $this->applicationXmlType = $internetMediaTypeFactory->createApplicationXml(); $this->init(); }
/** * Run. * * @param DataSourceInterface $dataSource Data source * @param SourceSet $sourceSet Source set * @param IoInterface $io IO Interface */ public function run(DataSourceInterface $dataSource, SourceSet $sourceSet, IoInterface $io = null) { if (null === $io) { $io = new NullIo(); } $found = false; $startTime = microtime(true); $dataSource->refresh($sourceSet); $this->eventDispatcher->dispatch(self::EVENT_BEFORE_RUN, new SourceSetEvent($sourceSet)); if ($updatedSources = array_filter($sourceSet->updatedSources(), function ($source) { return !$source->isGenerated(); })) { if (!$found) { $io->write('Detected new or updated files'); $found = true; } $total = count($updatedSources); $io->write('Generating: ', false); $io->write('', false); $counter = 0; $timer = microtime(true); foreach ($updatedSources as $source) { $this->generatorManager->generate($source, $sourceSet); $io->overwrite(sprintf("%3d%%", 100 * (++$counter / $total)), false); } $io->write(sprintf(" (%d sources / %4.2f seconds)", $total, microtime(true) - $timer)); } foreach ($sourceSet->updatedSources() as $source) { $permalink = $this->permalinkFactory->create($source); $source->setPermalink($permalink); $source->data()->set('url', $permalink->relativeUrlPath()); } if ($updatedSources = $sourceSet->updatedSources()) { if (!$found) { $io->write('Detected new or updated files'); $found = true; } $total = count($updatedSources); $io->write('Converting: ', false); $io->write('', false); $counter = 0; $timer = microtime(true); foreach ($updatedSources as $source) { $this->converterManager->convertSource($source); if ($source->canBeFormatted()) { $source->data()->set('blocks', $this->formatterManager->formatSourceBlocks($source)); } $io->overwrite(sprintf("%3d%%", 100 * (++$counter / $total)), false); } $io->write(sprintf(" (%d sources / %4.2f seconds)", $total, microtime(true) - $timer)); } if ($updatedSources = $sourceSet->updatedSources()) { if (!$found) { $io->write('Detected new or updated files'); $found = true; } $total = count($updatedSources); $io->write('Formatting: ', false); $io->write('', false); $counter = 0; $timer = microtime(true); foreach ($updatedSources as $source) { if ($source->canBeFormatted()) { $source->setFormattedContent($this->formatterManager->formatSourcePage($source)); } else { $source->setFormattedContent($source->content()); } $io->overwrite(sprintf("%3d%%", 100 * (++$counter / $total)), false); } $this->eventDispatcher->dispatch(self::EVENT_AFTER_FORMAT, new SourceSetEvent($sourceSet)); $io->write(sprintf(" (%d sources / %4.2f seconds)", $total, microtime(true) - $timer)); } foreach ($sourceSet->updatedSources() as $source) { if ($source->isGenerator() || $source->shouldBeSkipped()) { continue; } $this->writer->write(new SourceOutput($source)); $io->write(' + ' . $source->sourceId()); } $this->eventDispatcher->dispatch(self::EVENT_AFTER_RUN, new SourceSetEvent($sourceSet)); if ($found) { $io->write(sprintf("Processing completed in %4.2f seconds", microtime(true) - $startTime)); } }