getConfig(); $this->daux = $daux; $this->templateRenderer = new Template($config); $config->templateRenderer = $this->templateRenderer; } /** * @return array */ public function getContentTypes() { return [ 'markdown' => new ContentType($this->daux->getConfig()), ]; } public function generateAll(InputInterface $input, OutputInterface $output, $width) { $destination = $input->getOption('destination'); $config = $this->daux->getConfig(); if (is_null($destination)) { $destination = $config->getLocalBase() . DIRECTORY_SEPARATOR . 'static'; } $this->runAction( 'Copying Static assets ...', $width, function() use ($destination, $config) { $this->ensureEmptyDestination($destination); $this->copyThemes($destination, $config->getThemesPath()); } ); $output->writeLn('Generating ...'); $this->generateRecursive($this->daux->tree, $destination, $config, $output, $width, $config->getHTML()->hasSearch()); GeneratorHelper::copyRecursive( $config->getLocalBase() . DIRECTORY_SEPARATOR . 'daux_libraries' . DIRECTORY_SEPARATOR, $destination . DIRECTORY_SEPARATOR . 'daux_libraries' ); if ($config->getHTML()->hasSearch()) { file_put_contents( $destination . DIRECTORY_SEPARATOR . 'daux_search_index.json', json_encode(['pages' => $this->indexed_pages]) ); if (json_last_error()) { echo "Could not write search index: \n" . json_last_error_msg() . "\n"; } } } /** * Remove HTML tags, including invisible text such as style and * script code, and embedded objects. Add line breaks around * block-level tags to prevent word joining after tag removal. * Also collapse whitespace to single space and trim result. * modified from: http://nadeausoftware.com/articles/2007/09/php_tip_how_strip_html_tags_web_page * * @param string $text * @return string */ private function sanitize($text) { $text = preg_replace( [ // Remove invisible content '@]*?>.*?@siu', '@]*?>.*?@siu', '@]*?.*?@siu', '@]*?.*?@siu', '@]*?.*?@siu', '@]*?.*?@siu', '@]*?.*?@siu', '@]*?.*?@siu', '@]*?.*?@siu', // Add line breaks before and after blocks '@hasEntryPage()) { $config->setEntryPage($tree->getFirstPage()); } foreach ($tree->getEntries() as $key => $node) { if ($node instanceof Directory) { $new_output_dir = $output_dir . DIRECTORY_SEPARATOR . $key; mkdir($new_output_dir); $this->generateRecursive($node, $new_output_dir, $config, $output, $width, $index_pages, '../' . $base_url); // Rebase configuration again as $config is a shared object DauxHelper::rebaseConfiguration($config, $base_url); } else { $this->runAction( '- ' . $node->getUrl(), $width, function() use ($node, $output_dir, $key, $config, $index_pages) { if ($node instanceof Raw) { copy($node->getPath(), $output_dir . DIRECTORY_SEPARATOR . $key); return; } $this->daux->tree->setActiveNode($node); $generated = $this->generateOne($node, $config); file_put_contents($output_dir . DIRECTORY_SEPARATOR . $key, $generated->getContent()); if ($index_pages) { $this->indexed_pages[] = [ 'title' => $node->getTitle(), 'text' => $this->sanitize($generated->getPureContent()), 'tags' => '', 'url' => $node->getUrl(), ]; } } ); } } } /** * @param Entry $node * @param Config $config * @return \Todaymade\Daux\Format\Base\Page */ public function generateOne(Entry $node, Config $config) { if ($node instanceof Raw) { return new RawPage($node->getPath()); } if ($node instanceof ComputedRaw) { return new ComputedRawPage($node); } $config->setRequest($node->getUrl()); $contentPage = ContentPage::fromFile($node, $config, $this->daux->getContentTypeHandler()->getType($node)); $contentPage->templateRenderer = $this->templateRenderer; return $contentPage; } }