Esempio n. 1
0
        /* Function: GenerateJSON
         * Generates JSON for all the entries in the passed container.
         */
        protected void GenerateJSON(MenuEntries.Base.Container container)
        {
            ContainerExtraData containerExtraData = new ContainerExtraData(container);

            container.ExtraData = containerExtraData;

            containerExtraData.GenerateJSON(HTMLBuilder, this);

            foreach (var member in container.Members)
            {
                if (member is MenuEntries.Base.Target)
                {
                    TargetExtraData targetExtraData = new TargetExtraData((MenuEntries.Base.Target)member);
                    member.ExtraData = targetExtraData;

                    targetExtraData.GenerateJSON(HTMLBuilder, this);
                }
                else if (member is MenuEntries.Base.Container)
                {
                    GenerateJSON((MenuEntries.Base.Container)member);
                }
            }
        }
Esempio n. 2
0
        /* Function: AppendMembers
         * A support function for <BuildOutput()>.  Appends the output of the container's members to the string, recursively
         * going through sub-containers as well.  This will not include the surrounding brackets, only the comma-separated
         * member entries.  If it finds any sub-containers that start a new data file, it will add them to containersToBuild.
         */
        protected void AppendMembers(MenuEntries.Base.Container container, StringBuilder output, int indent,
                                     Stack <MenuEntries.Base.Container> containersToBuild)
        {
            for (int i = 0; i < container.Members.Count; i++)
            {
                var member = container.Members[i];

                if (!EngineInstance.Config.ShrinkFiles)
                {
                    output.Append(' ', indent * IndentSpaces);
                }

                if (member is MenuEntries.Base.Target)
                {
                    TargetExtraData targetExtraData = (TargetExtraData)member.ExtraData;
                    output.Append(targetExtraData.JSON);
                }
                else if (member is MenuEntries.Base.Container)
                {
                    ContainerExtraData containerExtraData = (ContainerExtraData)member.ExtraData;
                    output.Append(containerExtraData.JSONBeforeMembers);

                    if (containerExtraData.StartsNewDataFile)
                    {
                        output.Append('"');
                        output.StringEscapeAndAppend(containerExtraData.DataFileName);
                        output.Append('"');

                        containersToBuild.Push((MenuEntries.Base.Container)member);
                    }
                    else
                    {
                        output.Append('[');

                        if (!EngineInstance.Config.ShrinkFiles)
                        {
                            output.AppendLine();
                        }

                        AppendMembers((MenuEntries.Base.Container)member, output, indent + 1, containersToBuild);

                        if (!EngineInstance.Config.ShrinkFiles)
                        {
                            output.Append(' ', (indent + 1) * IndentSpaces);
                        }

                        output.Append(']');
                    }

                    output.Append(containerExtraData.JSONAfterMembers);
                }
                                #if DEBUG
                else
                {
                    throw new Exception("Can't append JSON for menu entry " + member.Title + ".");
                }
                                #endif

                if (i < container.Members.Count - 1)
                {
                    output.Append(',');
                }

                if (!EngineInstance.Config.ShrinkFiles)
                {
                    output.AppendLine();
                }
            }
        }