public Nustache.Core.Template GetTemplate(string name)
        {
            if (_resourceProvider == null)
            {
                return(null);
            }
            var resourceName = name + PartialTemplateExtension;

            return(_templateCache.GetOrAdd(resourceName, s =>
            {
                lock (_resourceProvider)
                {
                    using (var stream = _resourceProvider.GetResourceStream(s))
                    {
                        if (stream == null)
                        {
                            return null;
                        }

                        var template = new Nustache.Core.Template(name);
                        using (StreamReader reader = new StreamReader(stream))
                        {
                            template.Load(reader);
                        }
                        return template;
                    }
                }
            }));
        }
Beispiel #2
0
        public Nustache.Core.Template GetTemplate(string name)
        {
            if (_resourceProvider == null)
            {
                return(null);
            }
            var resourceName = name + PartialTemplateExtension;

            Nustache.Core.Template template;
            if (!_templateCache.TryGetValue(resourceName, out template))
            {
                using (var stream = _resourceProvider.GetResourceStream(resourceName))
                {
                    if (stream == null)
                    {
                        return(null);
                    }

                    template = new Nustache.Core.Template(name);
                    using (StreamReader reader = new StreamReader(stream))
                    {
                        template.Load(reader);
                    }

                    _templateCache[resourceName] = template;
                }
            }

            return(template);
        }
        private void ProcessDependencies(string outputDirectory)
        {
            if (_resourceProvider == null)
            {
                Logger.Log(LogLevel.Info, "Resource provider is not specified, dependencies will not be processed.");
                return;
            }

            if (_templates != null)
            {
                foreach (var resourceInfo in ExtractDependentFilePaths(_templates).Distinct())
                {
                    try
                    {
                        // TODO: support glob pattern
                        if (resourceInfo.IsRegexPattern)
                        {
                            var regex = new Regex(resourceInfo.ResourceKey, RegexOptions.IgnoreCase);
                            foreach (var name in _resourceProvider.Names)
                            {
                                if (regex.IsMatch(name))
                                {
                                    using (var stream = _resourceProvider.GetResourceStream(name))
                                    {
                                        ProcessSingleDependency(stream, outputDirectory, name);
                                    }
                                }
                            }
                        }
                        else
                        {
                            using (var stream = _resourceProvider.GetResourceStream(resourceInfo.ResourceKey))
                            {
                                ProcessSingleDependency(stream, outputDirectory, resourceInfo.FilePath);
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        Logger.Log(LogLevel.Info, $"Unable to get relative resource for {resourceInfo.FilePath}: {e.Message}");
                    }
                }
            }
        }
        public Nustache.Core.Template GetTemplate(string name)
        {
            if (_resourceProvider == null)
            {
                return(null);
            }
            var resourceName = name + PartialTemplateExtension;

            using (var stream = _resourceProvider.GetResourceStream(resourceName))
            {
                if (stream == null)
                {
                    return(null);
                }
                var template = new Nustache.Core.Template(name);
                using (StreamReader reader = new StreamReader(stream))
                    template.Load(reader);
                return(template);
            }
        }
        public void ProcessTemplateAndTheme(DocumentBuildContext context, string outputDirectory, bool overwrite)
        {
            if (_templateProcessor != null)
            {
                Logger.Log(LogLevel.Verbose, "Template resource found, starting applying template.");
                _templateProcessor.Process(context, outputDirectory);
            }

            if (_themeResource != null)
            {
                Logger.Log(LogLevel.Verbose, "Theme resource found, starting copying theme.");
                foreach (var resourceName in _themeResource.Names)
                {
                    using (var stream = _themeResource.GetResourceStream(resourceName))
                    {
                        var outputPath = Path.Combine(outputDirectory, resourceName);
                        CopyResource(stream, outputPath, overwrite);
                        Logger.Log(LogLevel.Info, $"Theme resource {resourceName} copied to {outputPath}.");
                    }
                }
            }
        }