Example #1
0
 public function generate(Page $page)
 {
     $template = $this->blazon->getTwig()->loadTemplate($page->getSrc());
     $site = $this->blazon->getSite();
     $data = ['site' => $site, 'page' => $page];
     $output = $template->render($data);
     file_put_contents($page->getBaseDir() . '/' . $page->getName() . '.html', $output);
 }
Example #2
0
 protected function cmdNameToResourceName(Command $command, Page $parentPage)
 {
     $conf = $parentPage->getConfig();
     $strategy = self::CHILDNAME_STRATEGY_PREFIX;
     if (array_key_exists(self::CONF_CHILDNAME_STRATEGY, $conf)) {
         $strategy = $conf[self::CONF_CHILDNAME_STRATEGY];
     }
     if ($strategy === self::CHILDNAME_STRATEGY_PREFIX) {
         return sprintf('%s__%s.html', $parentPage->getName(), str_replace(':', '__', $command->getName()));
     } else {
         return sprintf('%s.html', str_replace(':', '__', $command->getName()));
     }
 }
Example #3
0
 public function generate(Page $page)
 {
     $parsedown = new Parsedown();
     $html = $parsedown->text($this->content);
     $layout = $page->getLayout();
     if (!$layout) {
         $layout = 'default';
     }
     $template = $this->blazon->getTwig()->loadTemplate('templates/' . $layout . '.html.twig');
     $site = $this->blazon->getSite();
     $data = ['content' => $html, 'site' => $site, 'page' => $page];
     $output = $template->render($data);
     file_put_contents($page->getBaseDir() . '/' . $page->getName() . '.html', $output);
 }
Example #4
0
 public function load()
 {
     $this->site = new Site();
     $parser = new YamlParser();
     $config = $parser->parse(file_get_contents($this->src . '/blazon.yml'));
     if (!$this->dest) {
         if (isset($config['dest'])) {
             $dest = rtrim($config['dest'], '/');
             if ($dest[0] != '/') {
                 $this->dest = $this->src . '/' . $dest;
             } else {
                 $this->dest = $dest;
             }
         }
         if (!$this->dest) {
             $this->dest = dirname($this->filename) . '/build';
         }
     }
     if (isset($config['src'])) {
         $src = rtrim($config['src'], '/');
         if ($src[0] != '/') {
             $this->src .= '/' . $src;
         } else {
             $this->src = $src;
         }
     }
     if (isset($config['site']['properties'])) {
         foreach ($config['site']['properties'] as $key => $value) {
             $this->site->setProperty($key, $value);
         }
     }
     $pageDirs = array();
     if (isset($config['pages'])) {
         $pagePathPattern = sprintf('@^(.+)%s([^%s]*)$@', DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR);
         foreach ($config['pages'] as $name => $pageNode) {
             $page = new Page($name, $pageNode);
             // handle directory structure in the page 'name'
             $pathMatches = array();
             if (preg_match($pagePathPattern, $name, $pathMatches)) {
                 $pageDirs[] = $pathMatches[1];
                 $page->setBaseDir($this->dest . DIRECTORY_SEPARATOR . $pathMatches[1]);
                 $page->setName($pathMatches[2]);
             } else {
                 $page->setBaseDir($this->dest);
             }
             $handler = null;
             if (isset($pageNode['src'])) {
                 $pageSrc = $this->src . '/' . $pageNode['src'];
                 if (!file_exists($pageSrc)) {
                     throw new RuntimeException("Page src does not exist: " . $pageSrc);
                 }
                 $page->setSrc($pageNode['src']);
             }
             if (isset($pageNode['layout'])) {
                 $page->setLayout($pageNode['layout']);
             }
             if (isset($pageNode['handler'])) {
                 $handlerClassName = $pageNode['handler'];
                 $handler = new $handlerClassName($this);
             }
             if (!$handler) {
                 if ($page->getSrc() == '') {
                     throw new RuntimeException("No handler and no src specified for page: " . $page->getName());
                 }
                 // guess handler based on file-extension
                 if (substr($pageSrc, -3) == '.md') {
                     $handler = new \Blazon\Handler\MarkdownHandler($this);
                 }
                 if (substr($pageSrc, -5) == '.twig') {
                     $handler = new \Blazon\Handler\TwigHandler($this);
                 }
                 if (substr($pageSrc, -5) == '.html') {
                     $handler = new \Blazon\Handler\HtmlHandler($this);
                 }
             }
             if (!$handler) {
                 throw new RuntimeException("No handler for src file of page " . $page->getName());
             }
             $page->setHandler($handler);
             $handler->init($page, $config);
             if (isset($pageNode['properties'])) {
                 foreach ($pageNode['properties'] as $key => $value) {
                     $page->setProperty($key, $value);
                 }
             }
             if (isset($pageNode['title'])) {
                 $page->setTitle($pageNode['title']);
             }
             $this->addPage($page);
         }
     }
     if (!file_exists($this->src)) {
         throw new RuntimeException("Source directory does not exist: " . $this->src);
     }
     if (!file_exists($this->dest)) {
         mkdir($this->dest, 0755);
     }
     $this->makeOutputDirectories($pageDirs, $this->dest, 0755);
     $loader = new \Twig_Loader_Filesystem($this->src);
     $loader->addPath($this->src . '/templates', 'Templates');
     $this->twig = new \Twig_Environment($loader, []);
     $filter = new \Twig_SimpleFilter('urlsafe_command_name', function (\Twig_Environment $env, $string) {
         // get the current charset for instance
         $string = str_replace(':', '__', $string);
         return $string;
     }, array('needs_environment' => true));
     $this->twig->addFilter($filter);
     return $this;
 }