// ------------------------------------------------------------------------

        public bool Export(TaskList srcTasks, string sDestFilePath, bool bSilent, Preferences prefs, string sKey)
        {
            InitialiseAttributeList(srcTasks);

            BulletedMarkdownContainer mdTasks = new BulletedMarkdownContainer();
            Task task = srcTasks.GetFirstTask();

            while (task.IsValid())
            {
                ExportTask(task, mdTasks, true);

                task = task.GetNextTask();
            }

            StringBuilder mdFile = new StringBuilder();

            mdFile.AppendLine("<meta charset=\"utf-8\">");
            mdFile.AppendLine(mdTasks.ToMarkdown());

            mdFile.AppendLine("<!-- Markdeep: -->");
            mdFile.AppendLine("<style class=\"fallback\">body{visibility:hidden;white-space:pre;font-family:monospace}</style>");
            mdFile.AppendLine("<script src=\"markdeep.min.js\" charset=\"utf-8\"></script>");
            mdFile.AppendLine("<script src=\"https://casual-effects.com/markdeep/latest/markdeep.min.js\" charset=\"utf-8\"></script>");
            mdFile.AppendLine("<script>window.alreadyProcessedMarkdeep||(document.body.style.visibility=\"visible\")</script>");

            Debug.Write(mdFile.ToString());
            System.IO.File.WriteAllText(sDestFilePath, mdFile.ToString(), Encoding.UTF8);

            return(true);
        }
        protected bool ExportTask(Task task, BulletedMarkdownContainer mdParent, bool root)
        {
            // add ourselves
            mdParent.Append(new RawMarkdown(FormatTaskAttributes(task, root)));

            Task subtask = task.GetFirstSubtask();

            if (subtask.IsValid())
            {
                // then our subtasks in a container
                BulletedMarkdownContainer mdSubtasks = new BulletedMarkdownContainer();

                while (subtask.IsValid())
                {
                    ExportTask(subtask, mdSubtasks, false);

                    subtask = subtask.GetNextTask();
                }

                mdParent.Append(mdSubtasks);
            }

            return(true);
        }