Beispiel #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!");
            }
        }
Beispiel #2
0
 internal static void RemoveTab(RenderAccumulator acc) => acc.Tabs.Remove(Constants.EscapeTabChar);
Beispiel #3
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);
        }
Beispiel #4
0
 internal static void AddTab(RenderAccumulator acc) => acc.Tabs.Add(Constants.EscapeTabChar);
Beispiel #5
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);
        }