예제 #1
0
        private async Task EnrichTemplatePackage(TemplatePackage templatePackage)
        {
            IDeserializer    deserializer = new DeserializerBuilder().IgnoreUnmatchedProperties().IgnoreFields().Build();
            MarkdownPipeline pipeline     = new MarkdownPipelineBuilder()
                                            .UseYamlFrontMatter()
                                            .Build();

            foreach (Template template in templatePackage.Templates)
            {
                string filePath = Path.GetFullPath(Path.Combine(templatePackage.InstalltionPath, template.NestedFilePath));
                string content  = await File.ReadAllTextAsync(filePath).ConfigureAwait(false);

                MarkdownDocument     doc       = Markdown.Parse(content, pipeline);
                YamlFrontMatterBlock yamlBlock = doc.Descendants <YamlFrontMatterBlock>().FirstOrDefault();

                if (yamlBlock != null)
                {
                    string yaml = string.Join(Environment.NewLine, yamlBlock.Lines.Lines.Select(stringLine => stringLine.ToString()).Where(value => !string.IsNullOrEmpty(value)));
                    Dictionary <string, dynamic> frontMatter = deserializer.Deserialize <Dictionary <string, dynamic> >(yaml);

                    if (frontMatter.TryGetValue("ContentType", out dynamic contentType))
                    {
                        template.ContentType = contentType;
                    }
                }
            }
        }
예제 #2
0
        private static (string?Name, string?Id) ReadYamlMatter(YamlFrontMatterBlock yaml)
        {
            string?name = null, id = null;

            foreach (var line in yaml.Lines)
            {
                if (line is StringLine str && str.Slice.Text != null)
                {
                    int colon = str.Slice.IndexOf(':');
                    var key   = str.Slice.Text[str.Slice.Start..colon];
        public static FrontMatterBlock Parse(this YamlFrontMatterBlock block)
        {
            var lines = new Dictionary <string, string>();

            foreach (var l in block.Lines.Lines.Select(l => l.ToString()))
            {
                if (l.IndexOf(':') > 0)
                {
                    lines[l.Substring(0, l.IndexOf(':'))] = l.Substring(l.IndexOf(':') + 1);
                }
            }
            return(new FrontMatterBlock(lines));
        }
예제 #4
0
        protected override void Write(HtmlRenderer renderer, YamlFrontMatterBlock block)
        {
            try {
                var yaml = new YamlStream();
                yaml.Load(new StringReader(block.GetText()));
                var root = (YamlMappingNode)yaml.Documents[0].RootNode;
                WriteCss(renderer, root);
                WriteTitle(renderer, root);
            } catch (Exception ex) when(!ex.IsCriticalException())
            {
            }

            base.Write(renderer, block);
        }
예제 #5
0
        public WikiNoticeContainer(YamlFrontMatterBlock yamlFrontMatterBlock)
        {
            RelativeSizeAxes = Axes.X;
            AutoSizeAxes     = Axes.Y;
            Direction        = FillDirection.Vertical;

            foreach (object line in yamlFrontMatterBlock.Lines)
            {
                switch (line.ToString())
                {
                case "outdated: true":
                    isOutdated = true;
                    break;

                case "needs_cleanup: true":
                    needsCleanup = true;
                    break;
                }
            }
        }