private static void Main(string[] args) { if (args.Length < 3) { Console.WriteLine("usage: MarkdownParser input_file html_output_file text_output_file"); Environment.Exit(-1); } if (!File.Exists(args[0])) { Console.WriteLine("{0} does not exist.", args[0]); Environment.Exit(-1); } //convert markdown to html var markdownSource = File.ReadAllText(args[0]); var htmlSource = new Markdown().Transform(markdownSource); File.WriteAllText(args[1], htmlSource); //convert html to txt var html2txt = new HtmlToText(); var text = html2txt.Convert(args[1]); //use OS newlines text = Regex.Replace(text, "(?<!\r)\n", Environment.NewLine); Console.WriteLine(text); File.WriteAllText(args[2], text); }
/// <summary> /// Pulls the http stream through the Markdown filter. /// </summary> /// <param name="buffer">The content stream</param> /// <param name="offset">Start of the stream</param> /// <param name="count">Lenght of the stream</param> public override void Write(byte[] buffer, int offset, int count) { if (Closed) throw new ObjectDisposedException("MarkdownTransformFilter"); string content = Encoding.Default.GetString(buffer, offset, count); Markdown markdown = new Markdown(); content = markdown.Transform(content); byte[] output = Encoding.Default.GetBytes(content); BaseStream.Write(output,0, output.Length); }
public string TextToHtml(string text) { if (text == null) { text = string.Empty; } else { Markdown md = new Markdown(); SmartyPants sp = new SmartyPants(); //By html encoding text, any markup contained will not be rendered on the browser as html tags. text = HttpUtility.HtmlEncode(text); text = ResolveUrlsToHtmlLinks(text); text = sp.Transform(md.Transform(text), ConversionMode.EducateDefault); } return text; }
public override void Render() { base.Render(); string text = GetBodyText(); if ( (Style & MarkDownStyle.Markdown) == MarkDownStyle.Markdown) { Markdown md = new Markdown (); text = md.Transform(text); } if ( (Style & MarkDownStyle.SmartyPants) == MarkDownStyle.SmartyPants) { SmartyPants sm = new SmartyPants(); text = sm.Transform(text, ConversionMode.EducateDefault); } RenderText(text); CancelView(); }
//---------------------------------------------------------------------- // TODO: ブラウザプレビュー(編集中の内容を反映) //---------------------------------------------------------------------- private void PreviewToBrowser() { //更新抑制中のときはプレビューしない if (fConstraintChange == true) { return; } string BackgroundColorString; string EncodingName; //編集中のファイル名 string FileName = Path.GetFileName(MarkDownTextFilePath); //指定のDOCTYPE HtmlHeader htmlHeader = new HtmlHeader(); string DocType = htmlHeader.GetHtmlHeader(MarkDownSharpEditor.AppSettings.Instance.HtmlDocType); //マーキングの色づけ if (MarkDownSharpEditor.AppSettings.Instance.fHtmlHighLightColor == true) { Color ColorBackground = Color.FromArgb(MarkDownSharpEditor.AppSettings.Instance.HtmlHighLightColor); BackgroundColorString = ColorTranslator.ToHtml(ColorBackground); } else { BackgroundColorString = "none"; } //指定のエンコーディング int CodePageNum = MarkDownSharpEditor.AppSettings.Instance.CodePageNumber; try { Encoding enc = Encoding.GetEncoding(CodePageNum); //ブラウザ表示に対応したエンコーディングか if (enc.IsBrowserDisplay == true) { EncodingName = enc.WebName; } else { EncodingName = "utf-8"; } } catch { //エンコーディングの取得に失敗した場合 EncodingName = "utf-8"; } //ヘッダ string header = string.Format( @"{0} <html> <head> <meta http-equiv='Content-Type' content='text/html; charset={1}' /> <link rel='stylesheet' href='{2}' type='text/css' /> <style type='text/css'> ._mk {{background-color:{3}}} </style> <title>{4}</title> </head> <body> ", DocType, //DOCTYPE EncodingName, //エンコーディング SelectedCssFilePath, //適用中のCSSファイル BackgroundColorString, //編集箇所の背景色 FileName); //タイトル(=ファイル名) //フッタ string footer = "</body>\n</html>"; //Markdownパース Markdown mkdwn = new Markdown(); string ResultText = mkdwn.Transform(richTextBox1.Text); //表示するHTMLデータを作成 ResultText = header + ResultText + footer; //エンコーディングしつつbyte値に変換する(richEditBoxは基本的にutf-8 = 65001) byte[] bytesData = Encoding.GetEncoding(CodePageNum).GetBytes(ResultText); if (fNoTitle == true) { //「無題」ファイルを編集中はナビゲートせずにそのまま書き込む ResultText = Encoding.GetEncoding(CodePageNum).GetString(bytesData); webBrowser1.Document.Write(ResultText); //ツールバーの「関連付けられたブラウザーを起動」を無効に toolStripButtonBrowserPreview.Enabled = false; } else { //テンポラリファイルパスを取得する if (TemporaryHtmlFilePath == "") { TemporaryHtmlFilePath = GetTemporaryHtmlFilePath(MarkDownTextFilePath); } //他のプロセスからのテンポラリファイルの参照と削除を許可して開く(でないと飛ぶ) using (FileStream fs = new FileStream( TemporaryHtmlFilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read | FileShare.Delete)) { fs.Write(bytesData, 0, bytesData.Length); } //ナビゲート webBrowser1.Navigate(@"file://" + TemporaryHtmlFilePath); richTextBox1.Focus(); toolStripButtonBrowserPreview.Enabled = true; } }
//---------------------------------------------------------------------- // TODO: HTML形式出力 //---------------------------------------------------------------------- private bool OutputToHtmlFile(string FilePath, string SaveToFilePath, bool fToClipboard = false) { if ( File.Exists(FilePath) == false ) { return (false); } //出力内容 string ResultText = ""; //HTMLタグ string HeaderString = ""; string FooterString = ""; //文字コード string EncodingName; Encoding encRead = Encoding.UTF8; Encoding encHtml = Encoding.UTF8; //----------------------------------- //編集中のファイルパス or 投げ込まれたファイルパス string FileName = Path.GetFileName(FilePath); //----------------------------------- //指定のDOCTYPE HtmlHeader htmlHeader = new HtmlHeader(); string DocType = htmlHeader.GetHtmlHeader(MarkDownSharpEditor.AppSettings.Instance.HtmlDocType); //Web用の相対パス string CssPath = RerativeFilePath(FilePath, SelectedCssFilePath); //----------------------------------- //指定のエンコーディング int CodePageNum = MarkDownSharpEditor.AppSettings.Instance.CodePageNumber; try { encHtml = Encoding.GetEncoding(CodePageNum); //ブラウザ表示に対応したエンコーディングか if (encHtml.IsBrowserDisplay == true) { EncodingName = encHtml.WebName; } else { EncodingName = "utf-8"; encHtml = Encoding.UTF8; } } catch { //エンコーディングの取得に失敗した場合はデフォルト EncodingName = "utf-8"; encHtml = Encoding.UTF8; } //HTMLのヘッダを挿入する if (MarkDownSharpEditor.AppSettings.Instance.fHtmlOutputHeader == true) { //CSSファイルを埋め込む if (MarkDownSharpEditor.AppSettings.Instance.HtmlCssFileOption == 0) { string CssContents = ""; if (File.Exists(SelectedCssFilePath) == true) { using (StreamReader sr = new StreamReader(SelectedCssFilePath, encHtml)) { CssContents = sr.ReadToEnd(); } } //ヘッダ HeaderString = string.Format( @"{0} <html> <head> <meta http-equiv='Content-Type' content='text/html; charset={1}' /> <title>{2}</title> <style> <!-- {3} --> </style> </head> <body> ", DocType, //DOCTYPE EncodingName, //エンコーディング FileName, //タイトル(=ファイル名) CssContents); //CSSの内容 } //metaタグ(外部リンキング) else { //ヘッダ HeaderString = string.Format( @"{0} <html> <head> <meta http-equiv='Content-Type' content='text/html; charset={1}' /> <link rel='stylesheet' href='{2}' type='text/css' /> <title>{3}</title> </head> <body> ", DocType, //DOCTYPE EncodingName, //エンコーディング CssPath, //CSSファイル(相対パス) FileName); //タイトル(=ファイル名) } //フッタ FooterString = "</body>\n</html>"; } else { HeaderString = ""; FooterString = ""; } //Markdownパース Markdown mkdwn = new Markdown(); //編集中のファイル(richEditBoxの内容) if (MarkDownTextFilePath == FilePath) { ResultText = mkdwn.Transform(richTextBox1.Text); //エンコーディング変換(richEditBoxは基本的にutf-8) ResultText = ConvertStringToEncoding(ResultText, Encoding.UTF8.CodePage, CodePageNum); } else { //テキストファイルを開いてその文字コードに従って読み込み byte[] bs; using (FileStream fs = new FileStream(FilePath, FileMode.Open, FileAccess.Read)) { bs = new byte[fs.Length]; fs.Read(bs, 0, bs.Length); } //文字コードを取得する encRead = GetCode(bs); //取得したバイト列を文字列に変換 ResultText = encRead.GetString(bs); //UTF-8でないならいったん変換してパース if (encRead != Encoding.UTF8) { ResultText = ConvertStringToEncoding(ResultText, encRead.CodePage, CodePageNum); } ResultText = mkdwn.Transform(ResultText); } //ヘッダ+本文+フッタ ResultText = HeaderString + ResultText + FooterString; //出力するHTMLファイルの文字コードに合わせる ResultText = ConvertStringToEncoding(ResultText, Encoding.UTF8.CodePage, CodePageNum); if (fToClipboard == true) { //クリップボードに書き込む Clipboard.SetText(ResultText); } else { //ファイルに書き込む using (StreamWriter sw = new StreamWriter(SaveToFilePath, false, encHtml)) { sw.Write(ResultText); } } return (true); }
//---------------------------------------------------------------------- // HACK: PreviewToBrowser [ ブラウザプレビュー ] // //---------------------------------------------------------------------- private void PreviewToBrowser() { //更新抑制中のときはプレビューしない if (fConstraintChange == true) { timer1.Enabled = false; return; } string ResultText = ""; string MkResultText = ""; string BackgroundColorString; string EncodingName; //編集中のファイル名 string FileName = Path.GetFileName(MarkDownTextFilePath); //指定のDOCTYPE HtmlHeader htmlHeader = new HtmlHeader(); string DocType = htmlHeader.GetHtmlHeader(MarkDownSharpEditor.AppSettings.Instance.HtmlDocType); //マーキングの色づけ if (MarkDownSharpEditor.AppSettings.Instance.fHtmlHighLightColor == true) { Color ColorBackground = Color.FromArgb(MarkDownSharpEditor.AppSettings.Instance.HtmlHighLightColor); BackgroundColorString = ColorTranslator.ToHtml(ColorBackground); } else { BackgroundColorString = "none"; } //指定のエンコーディング int CodePageNum = MarkDownSharpEditor.AppSettings.Instance.CodePageNumber; try { Encoding enc = Encoding.GetEncoding(CodePageNum); //ブラウザ表示に対応したエンコーディングか if (enc.IsBrowserDisplay == true) { EncodingName = enc.WebName; } else { EncodingName = "utf-8"; } } catch { //エンコーディングの取得に失敗した場合 EncodingName = "utf-8"; } //ヘッダ string header = string.Format( @"{0} <html> <head> <meta http-equiv='Content-Type' content='text/html; charset={1}' /> <link rel='stylesheet' href='{2}' type='text/css' /> <style type='text/css'> ._mk {{background-color:{3}}} </style> <title>{4}</title> </head> <body> ", DocType, //DOCTYPE EncodingName, //エンコーディング SelectedCssFilePath, //適用中のCSSファイル BackgroundColorString, //編集箇所の背景色 FileName); //タイトル(=ファイル名) //フッタ string footer = "</body>\n</html>"; int NextLineNum, ParagraphStart; //編集箇所にマーカーを挿入する if (richTextBox1.SelectionStart > 0) { NextLineNum = richTextBox1.GetLineFromCharIndex(richTextBox1.SelectionStart) + 1; ParagraphStart = richTextBox1.GetFirstCharIndexOfCurrentLine(); if (ParagraphStart == 0) { ParagraphStart = 1; } ResultText = richTextBox1.Text.Substring(0, ParagraphStart) + "<!-- edit -->" + richTextBox1.Text.Substring(ParagraphStart); } else { ResultText = richTextBox1.Text; } //Markdownパース Markdown mkdwn = new Markdown(); ResultText = mkdwn.Transform(ResultText); //表示するHTMLデータを作成 ResultText = header + ResultText + footer; //パースされた内容から編集行を探す string OneLine; StringReader sr = new StringReader(ResultText); StringWriter sw = new StringWriter(); while ((OneLine = sr.ReadLine()) != null) { if (OneLine.IndexOf("<!-- edit -->") >= 0) { MkResultText += ("<div class='_mk'>" + OneLine + "</div>\n"); } else { MkResultText += (OneLine+"\n"); } } //エンコーディングしつつbyte値に変換する(richEditBoxは基本的にutf-8 = 65001) byte[] bytesData = Encoding.GetEncoding(CodePageNum).GetBytes(MkResultText); //----------------------------------- //スクロールバーの位置を退避しておく HtmlDocument doc = webBrowser1.Document; Point scrollpos = new Point(0, 0); if (doc != null) { IHTMLDocument3 doc3 = (IHTMLDocument3)webBrowser1.Document.DomDocument; IHTMLElement2 elm = (IHTMLElement2)doc3.documentElement; scrollpos = new Point(elm.scrollLeft, elm.scrollTop); } //----------------------------------- if (fNoTitle == true) { //「無題」ファイルを編集中はナビゲートせずにそのまま書き込む ResultText = Encoding.GetEncoding(CodePageNum).GetString(bytesData); webBrowser1.DocumentText = MkResultText; //ツールバーの「関連付けられたブラウザーを起動」を無効に toolStripButtonBrowserPreview.Enabled = false; } else { //テンポラリファイルパスを取得する if (TemporaryHtmlFilePath == "") { TemporaryHtmlFilePath = GetTemporaryHtmlFilePath(MarkDownTextFilePath); } //他のプロセスからのテンポラリファイルの参照と削除を許可して開く(でないと飛ぶ) using (FileStream fs = new FileStream( TemporaryHtmlFilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read | FileShare.Delete)) { fs.Write(bytesData, 0, bytesData.Length); } //ナビゲート webBrowser1.Navigate(@"file://" + TemporaryHtmlFilePath); richTextBox1.Focus(); toolStripButtonBrowserPreview.Enabled = true; } //----------------------------------- //スクロールバーの位置を復帰する if (doc != null) { while (webBrowser1.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); } doc.Window.ScrollTo(scrollpos); } }
public static string Transform(string original) { Markdown markdown = new Markdown(); return markdown.Transform(original); }
/// <summary> /// Converts user-input formatted string into html tags /// </summary> /// <param name="markdown">Formatted string.</param> /// <returns>Html to paste on page.</returns> internal static String FromMarkdownToHtml(this String markdown) { Markdown converter = new Markdown(); return converter.Transform(markdown); }
protected String Process_Markdown(String markdown) { anrControls.Markdown markdownProcess = new anrControls.Markdown(); return markdownProcess.Transform(markdown); }
/// <summary> /// Render the markdown text as html /// </summary> /// <param name="text">The text.</param> /// <returns></returns> private static string RenderMarkdown(string text) { if (text == null) return string.Empty; Markdown markdown = new Markdown(); string result = markdown.Transform(text); return result; }
protected String Process_Markdown(String markdown) { anrControls.Markdown markdownProcess = new anrControls.Markdown(); return(markdownProcess.Transform(markdown)); }