Beispiel #1
0
        public string Run(RazorRenderer razorRenderer, Site site, object model)
        {
            this.InitGatsbyRazorTemplate(razorRenderer, site);

            this.Model = new DynamicValue(model);

            return this.ExecuteTemplate();
        }
Beispiel #2
0
        public string Run(string content, SiteContent page, RazorRenderer razorRenderer, Site site)
        {
            this.Content = content;
            this.Model = new DynamicValue(page);

            this.InitGatsbyRazorTemplate(razorRenderer, site);

            return this.ExecuteTemplate();
        }
Beispiel #3
0
        public string LayoutContent(string layoutName, string content, SiteContent page, Site site)
        {
            if (!this.layouts.ContainsKey(layoutName))
                throw new GatsbyException(string.Format("Layout \"{0}\" was not found.", layoutName));

            var layout = this.layouts[layoutName];

            try
            {
                content = layout.Run(content, page, this, site);
            }
            catch (Exception ex)
            {
                throw new GatsbyException(string.Format("Failed while rendering layout \"{0}\":\n\t{1}", layoutName, ex.Message));
            }

            if (string.IsNullOrEmpty(layout.Parent))
                return content;

            return this.LayoutContent(layout.Parent, content, page, site);
        }
Beispiel #4
0
        internal override void Run(
            Config config,
            MarkdownTransformer markdownTransformer,
            string relativePath,
            RazorRenderer razorRenderer,
            Site site)
        {
            base.Run(config, markdownTransformer, relativePath, razorRenderer, site);

            if (!string.IsNullOrEmpty(config.ExcerptSeparator))
            {
                if (this.Content.Contains(config.ExcerptSeparator))
                {
                    this.Excerpt = this.Content.Substring(0, this.Content.IndexOf(config.ExcerptSeparator));
                }
                else
                {
                    this.Excerpt = this.Content;
                }
            }
        }
Beispiel #5
0
        public Post RenderPost(Config config, SourceFilePath path, Site site)
        {
            Post post = null;

            try
            {
                post = this.compiler.Compile<Post>(File.ReadAllText(path.AbsolutePath));
                post.Run(config, this.markdownTransformer, path.RelativePath, this, site);
            }
            catch (RazorCompilationException ex)
            {
                throw new GatsbyException(string.Format("Failed while compiling post {0}:\n\t{1}", path.AbsolutePath, string.Join("\n\t", ex.Errors)));
            }

            return post;
        }
Beispiel #6
0
        public List<Generator> RenderPaginator(Config config, SourceFilePath path, Site site)
        {
            List<Generator> pagintors = new List<Generator>();
            RazorTemplateFactory<Generator> factory = null;

            try
            {
                factory = this.compiler.CompileFactory<Generator>(File.ReadAllText(path.AbsolutePath));
            }
            catch (RazorCompilationException ex)
            {
                throw new GatsbyException(string.Format("Failed while compiling paginator {0}:\n\t{1}", path.AbsolutePath, string.Join("\n\t", ex.Errors)));
            }

            int pageNumber = 1;

            while (true)
            {
                var template = factory.Create();
                template.PageNumber = pageNumber;
                template.Run(config, this.markdownTransformer, path.RelativePath, this, site);

                pagintors.Add(template);

                if (template.GeneratorFinished)
                    break;

                pageNumber++;
            }

            return pagintors;
        }
Beispiel #7
0
        public string RenderInclude(string includeName, Site site, object model)
        {
            if (!this.includes.ContainsKey(includeName))
                throw new GatsbyException(string.Format("Include \"{0}\" was not found.", includeName));

            var include = this.includes[includeName];

            string output = null;

            try
            {
                output = include.Run(this, site, model);
            }
            catch (Exception ex)
            {
                throw new GatsbyException(string.Format("Failed while rendering include \"{0}\":\n\t{1}", includeName, ex.Message));
            }

            return output;
        }
Beispiel #8
0
        public void Build(Config config)
        {
            SourceFiles sourceFiles = this.sourceFileEnumerator.Enumerate(config);

            if (Directory.Exists(config.Destination))
                Directory.Delete(config.Destination, true);

            Directory.CreateDirectory(config.Destination);

            this.pluginCompiler.RegisterAssemblyResolver();

            try
            {
                Site site = new Site(config);

                foreach (var path in sourceFiles.Plugins)
                {
                    string pluginPath = Path.Combine(config.Destination, Path.GetFileNameWithoutExtension(path.AbsolutePath) + ".dll");
                    this.pluginCompiler.Compile(path, pluginPath, site.Plugins);
                    this.razorRenderer.AddPluginPath(pluginPath);
                }

                this.razorRenderer.LoadIncludes(sourceFiles.Includes);
                this.razorRenderer.LoadLayouts(sourceFiles.Layouts);

                foreach (var path in sourceFiles.Posts)
                {
                    var post = this.razorRenderer.RenderPost(config, path, site);
                    this.SetDefaultsForContent(post);
                    site.Posts.Add(post);
                }

                site.Posts.Sort((x, y) => x.Date.CompareTo(y.Date) * -1);

                foreach (var path in sourceFiles.Pages)
                {
                    var page = this.razorRenderer.RenderPage(config, path, site);
                    this.SetDefaultsForContent(page);
                    site.Pages.Add(page);
                }

                site.Plugins.BeforeGenerators(site);

                foreach (var path in sourceFiles.Generators)
                {
                    var pages = this.razorRenderer.RenderPaginator(config, path, site);

                    foreach (var page in pages)
                        this.SetDefaultsForContent(page);

                    site.GeneratorPages.AddRange(pages);
                }

                site.Plugins.AfterGenerators(site);

                foreach (var post in site.Posts)
                {
                    this.WriteContent(config, post, site);
                }

                foreach (var page in site.Pages)
                {
                    this.WriteContent(config, page, site);
                }

                foreach (var page in site.GeneratorPages)
                {
                    this.WriteContent(config, page, site);
                }

                foreach (var staticFile in sourceFiles.StaticFiles)
                {
                    string destination = Path.Combine(config.Destination, staticFile.RelativePath);

                    string directory = Path.GetDirectoryName(destination);
                    if (!string.IsNullOrEmpty(directory))
                        Directory.CreateDirectory(directory);

                    File.Copy(staticFile.AbsolutePath, destination);
                }

                this.pluginCompiler.DeleteAll();
            }
            finally
            {
                this.pluginCompiler.UnregisterAssemblyResolver();
            }
        }
Beispiel #9
0
        private void WriteContent(Config config, SiteContent page, Site site)
        {
            string content = page.Content;

            if (!string.IsNullOrEmpty(page.Layout))
                content = this.razorRenderer.LayoutContent(page.Layout, content, page, site);

            string destination = Path.Combine(config.Destination, page.Permalink);

            string directory = Path.GetDirectoryName(destination);
            if (!string.IsNullOrEmpty(directory))
                Directory.CreateDirectory(directory);

            File.WriteAllText(destination, content);
        }
Beispiel #10
0
        internal virtual void Run(
            Config config,
            MarkdownTransformer markdownTransformer,
            string relativePath,
            RazorRenderer razorRenderer,
            Site site)
        {
            if (this.Content != null)
                throw new InvalidOperationException("Template has already been run.");

            this.RelativePath = relativePath;
            this.InitGatsbyRazorTemplate(razorRenderer, site);

            try
            {
                this.Content = this.ExecuteTemplate();
            }
            catch (Exception ex)
            {
            }

            if (this.IsMarkdown)
                this.Content = markdownTransformer.Transform(this.Content);
        }
Beispiel #11
0
 internal void InitGatsbyRazorTemplate(RazorRenderer razorRenderer, Site site)
 {
     this.razorRenderer = razorRenderer;
     this.Site = site;
 }