예제 #1
0
        internal static string Render(SdmlTag element, RenderOptions options, RenderAccumulator acc)
        {
            IRenderer renderer;

            if (options.RenderType == RenderTypes.Escaped)
            {
                renderer = GetRenderer(escapedFactory, options);
            }

            else
            {
                renderer = GetRenderer(plainFactory, options);
            }

            element.Tabs = acc.Tabs.GetAll();

            if (renderer != null)
            {
                return(renderer.Render(element));
            }

            else
            {
                throw new NullReferenceException("Renderer is null!");
            }
        }
예제 #2
0
 public string Render(SdmlTag element) =>
 $"{element.Tabs}{element.OpenTag}{Constants.EscapeNewLineChar}";
 public string Render(SdmlTag element) =>
 $"{element.Tabs}{element.OpenTag}{Constants.EscapeNewLineChar}" +
 $"{element.Tabs}{Constants.EscapeTabChar}{element.Object.Value}{Constants.EscapeNewLineChar}" +
 $"{element.Tabs}{element.ClosedTag}{Constants.EscapeNewLineChar}";
 public string Render(SdmlTag element) =>
 $"{element.ClosedTag}";
예제 #5
0
        // Builds tree and parses each element
        private static ElementTree BuildTree(DataElementDTO data, RenderOptions options, RenderAccumulator accumulator = null)
        {
            var tree = new ElementTree();

            var acc = accumulator;

            if (accumulator == null)
            {
                acc = new RenderAccumulator();
            }

            if (!string.IsNullOrEmpty(data.Value))
            {
                var tag = new SdmlTag(data);
                options.TargetType = RenderTargetTypes.Value;

                tree.Add(new ElementNode()
                {
                    Data    = RenderManager.Render(tag, options, acc),
                    Element = tag,
                    Parent  = new SdmlTag(data.Parent)
                });
            }

            else if (data.Childs.Any())
            {
                var tag = new SdmlTag(data);
                options.TargetType = RenderTargetTypes.OpenTag;

                var elementNode = new ElementNode()
                {
                    Data    = RenderManager.Render(tag, options, acc),
                    Element = tag,
                    Parent  = new SdmlTag(data.Parent)
                };

                RenderManager.AddTab(acc);

                foreach (var item in data.Childs)
                {
                    var temp = BuildTree(item, options, acc);

                    foreach (var node in temp.Elements)
                    {
                        elementNode.Childs.Add(node);
                        elementNode.Data += node.Data;
                    }
                }

                options.TargetType = RenderTargetTypes.ClosedTag;

                elementNode.Data += RenderManager.Render(tag, options, acc);
                tree.Add(elementNode);
            }

            else
            {
                var tag = new SdmlTag(data);
                options.TargetType = RenderTargetTypes.BodylessTag;

                tree.Add(new ElementNode()
                {
                    Data    = RenderManager.Render(tag, options, acc),
                    Element = tag,
                    Parent  = new SdmlTag(data.Parent)
                });
            }

            RenderManager.RemoveTab(acc);

            return(tree);
        }
 public string Render(SdmlTag element) =>
 $"{element.OpenTag}{element.Object.Value}{element.ClosedTag}";
예제 #7
0
        // Builds tree and parses each element
        private static ElementTree BuildTree(DataElementDTO data, RenderOptions options, RenderAccumulator accumulator = null)
        {
            // Tree, that will exported to SdmlGenerator and will be containing all elements
            var tree = new ElementTree();

            // Recursion accumulator. Allows to render tabulations, based on layer count
            var acc = accumulator;

            if (accumulator == null)
            {
                acc = new RenderAccumulator();
            }

            // If data has value that means this element donesn't have childs
            if (!string.IsNullOrEmpty(data.Value))
            {
                var tag = new SdmlTag(data);
                options.TargetType = RenderTargetTypes.Value;

                tree.Add(new ElementNode()
                {
                    Data    = RenderManager.Render(tag, options, acc),
                    Element = tag,
                    Parent  = new SdmlTag(data.Parent)
                });
            }

            // If data contains at least one child it has to be serialized in a different way than value element
            else if (data.Childs.Any())
            {
                var tag = new SdmlTag(data);
                options.TargetType = RenderTargetTypes.OpenTag;

                var elementNode = new ElementNode()
                {
                    Data    = RenderManager.Render(tag, options, acc),
                    Element = tag,
                    Parent  = new SdmlTag(data.Parent)
                };

                // Add tab to accumulator
                RenderManager.AddTab(acc);

                foreach (var item in data.Childs)
                {
                    var temp = BuildTree(item, options, acc);

                    foreach (var node in temp.Elements)
                    {
                        elementNode.Childs.Add(node);
                        elementNode.Data += node.Data;
                    }
                }

                options.TargetType = RenderTargetTypes.ClosedTag;

                elementNode.Data += RenderManager.Render(tag, options, acc);
                tree.Add(elementNode);
            }

            // If data has no value and no childs it will be rendered as bodyless tag
            else
            {
                var tag = new SdmlTag(data);
                options.TargetType = RenderTargetTypes.BodylessTag;

                tree.Add(new ElementNode()
                {
                    Data    = RenderManager.Render(tag, options, acc),
                    Element = tag,
                    Parent  = new SdmlTag(data.Parent)
                });
            }

            // Removes tabs from accumulator
            RenderManager.RemoveTab(acc);

            return(tree);
        }
예제 #8
0
 public string Render(SdmlTag element) =>
 $"{element.OpenTag}";