示例#1
0
        protected override void Write(TsxRenderer renderer, ListBlock listBlock)
        {
            renderer.EnsureLine();
            if (renderer.EnableHtmlForBlock)
            {
                if (listBlock.IsOrdered)
                {
                    renderer.Write("<mdx.Ol");
                    if (listBlock.BulletType != '1')
                    {
                        renderer.Write(" type=\"").Write(listBlock.BulletType).Write('"');
                    }

                    if (listBlock.OrderedStart is { } and not "1")
                    {
                        renderer.Write(" start={").Write(listBlock.OrderedStart).Write('}');
                    }
                    renderer.WriteProps(listBlock);
                    renderer.Write('>').WriteLine().Indent();
                }
                else
                {
                    renderer.Write("<mdx.Ul");
                    renderer.WriteProps(listBlock);
                    renderer.Write('>').WriteLine().Indent();
                }
            }

            foreach (var item in listBlock)
            {
                var listItem         = (ListItemBlock)item;
                var previousImplicit = renderer.ImplicitParagraph;
                renderer.ImplicitParagraph = !listBlock.IsLoose;

                renderer.EnsureLine();
                if (renderer.EnableHtmlForBlock)
                {
                    renderer.Write("<mdx.Li").WriteProps(listItem).Write('>');
                }

                renderer.WriteChildren(listItem);

                if (renderer.EnableHtmlForBlock)
                {
                    renderer.Write("</mdx.Li>").WriteLine();
                }

                renderer.EnsureLine();
                renderer.ImplicitParagraph = previousImplicit;
            }

            if (renderer.EnableHtmlForBlock)
            {
                renderer.Dedent().Write(listBlock.IsOrdered ? "</mdx.Ol>" : "</mdx.Ul>").WriteLine();
            }

            renderer.EnsureLine();
        }
示例#2
0
文件: MdxToTsx.cs 项目: bobril/bbcore
        public (string content, Dictionary <object, object> metadata) Render()
        {
            var renderer = new TsxRenderer();

            renderer.Write("import * as b from \"bobril\";").WriteLine();
            renderer.Write("import * as mdx from \"@bobril/mdx\";").WriteLine();

            foreach (var importBlock in _document !.Descendants <ImportBlock>())
            {
                renderer.Write(importBlock.Lines.ToSlice()).WriteLine();
            }

            var frontMatterBlock = _document !
                                   .Descendants <YamlFrontMatterBlock>()
                                   .FirstOrDefault();
            Dictionary <object, object>?metadata = null;

            if (frontMatterBlock != null)
            {
                var yaml         = frontMatterBlock.Lines.ToString();
                var deserializer = new DeserializerBuilder().Build();
                var yamlObject   = deserializer.Deserialize(new StringReader(yaml));
                metadata = yamlObject as Dictionary <object, object>;
                frontMatterBlock.Parent !.Remove(frontMatterBlock);
            }

            metadata ??= new();
            renderer.Write("export const metadata = ").Write(TypeConverter.ToAst(metadata)).Write(";").WriteLine();
            metadata.TryGetValue("DataType", out var dataType);
            var dataTypeStr = dataType as string;

            renderer.Write("export default b.component((" + (dataTypeStr != null?"data: " + dataTypeStr:"") + ") => { return (<>").WriteLine()
            .Indent();
            var output = (OutputContext)renderer.Render(_document !);

            renderer.Dedent().EnsureLine().Write("</>);});").WriteLine();
            return(output.ToString(), metadata);
        }
示例#3
0
        protected override void Write(TsxRenderer renderer, ParagraphBlock obj)
        {
            if (!renderer.ImplicitParagraph && renderer.EnableHtmlForBlock)
            {
                if (!renderer.IsFirstInContainer)
                {
                    renderer.EnsureLine();
                }

                renderer.Write("<mdx.P").WriteProps(obj).Write(">").Indent();
            }
            renderer.WriteLeafInline(obj);
            if (!renderer.ImplicitParagraph)
            {
                if (renderer.EnableHtmlForBlock)
                {
                    renderer.Dedent();
                    renderer.Write("</mdx.P>");
                }

                renderer.EnsureLine();
            }
        }