예제 #1
0
        public override bool Execute(string[] arguments)
        {
            Md2HtmlParameters args = new Md2HtmlParameters();

            if (!ArgumentParser.ParseArguments(arguments, args))
            {
                return(false);
            }

            var log = new ConsoleLog(LogLevel.Info);

            string md = args.InputFile.ReadFile(log);

            string pageTemplate = ResourceHandler.GetFile(KnownFile.TemplateSinglePageHtml);

            string cssForInline = "";

            if (args.Css.IsExisting)
            {
                cssForInline = args.Css.ReadFile(log);
            }

            using var pipeline = new BookGenPipeline(BookGenPipeline.Preview);
            pipeline.InjectPath(args.InputFile.GetDirectory());
            pipeline.SetSyntaxHighlightTo(!args.NoSyntax);

            var mdcontent = pipeline.RenderMarkdown(md);

            string rendered;

            if (args.RawHtml)
            {
                rendered = mdcontent;
            }
            else
            {
                rendered = pageTemplate.Replace("<!--{css}-->", cssForInline);
                rendered = rendered.Replace("<!--{content}-->", mdcontent);
            }

            if (args.OutputFile == new FsPath("con"))
            {
                Console.WriteLine(rendered);
            }
            else
            {
                args.OutputFile.WriteFile(log, rendered);
            }

            return(true);
        }
예제 #2
0
        private void Preview(HttpListenerRequest request, HttpListenerResponse response)
        {
            Dictionary <string, string> parameters = request.ParsePostParameters();

            if (parameters.ContainsKey("content"))
            {
                string base64content = Uri.UnescapeDataString(parameters["content"]);

                byte[] contentBytes = Convert.FromBase64String(base64content);
                string rawContent   = Encoding.UTF8.GetString(contentBytes);

                using (var pipeline = new BookGenPipeline(BookGenPipeline.Preview))
                {
                    pipeline.InjectPath(new FsPath(_workdir));

                    string rendered = pipeline.RenderMarkdown(rawContent);
                    response.WriteString(rendered, "text/html");
                }
            }
        }