From e9e0f57547761a4a37c262843370605f88f90b3d Mon Sep 17 00:00:00 2001 From: Ray Glover Date: Mon, 24 Oct 2011 21:25:15 +0100 Subject: [PATCH 01/12] basic CLI --- src/MarkdownWin/MarkdownWin.csproj | 195 +++++++++++++++-------------- src/MarkdownWin/Program.cs | 87 ++++++++++++- 2 files changed, 179 insertions(+), 103 deletions(-) diff --git a/src/MarkdownWin/MarkdownWin.csproj b/src/MarkdownWin/MarkdownWin.csproj index 4035940..ed76000 100644 --- a/src/MarkdownWin/MarkdownWin.csproj +++ b/src/MarkdownWin/MarkdownWin.csproj @@ -1,104 +1,105 @@ - - - - Debug - x86 - 8.0.30703 - 2.0 - {F578EEC8-1C03-43B6-92A5-76C25D9A4F0F} - WinExe - Properties - MarkdownWin - MarkdownWin - v4.0 - - - 512 - - - x86 - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - x86 - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - ..\..\packages\MarkdownSharp.1.13.0.0\lib\35\MarkdownSharp.dll - - - - - - - - - - - - - - - - - Form - - - MainForm.cs - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - True - Resources.resx - True - - - MainForm.cs - - - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - True - Settings.settings - True - - - - - - - - - + + + + Debug + x86 + 8.0.30703 + 2.0 + {F578EEC8-1C03-43B6-92A5-76C25D9A4F0F} + WinExe + Properties + MarkdownWin + MarkdownWin + v4.0 + + + 512 + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + x86 + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + ..\..\packages\MarkdownSharp.1.13.0.0\lib\35\MarkdownSharp.dll + + + + + + + + + + + + + + + + + Form + + + MainForm.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + MainForm.cs + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + --> \ No newline at end of file diff --git a/src/MarkdownWin/Program.cs b/src/MarkdownWin/Program.cs index e67cbf6..97c95ad 100644 --- a/src/MarkdownWin/Program.cs +++ b/src/MarkdownWin/Program.cs @@ -1,6 +1,9 @@ using System; using System.Linq; -using System.Windows.Forms; +using System.Windows.Forms; +using System.Collections.Generic; +using MarkdownSharp; +using System.IO; namespace MarkdownWin { @@ -10,11 +13,83 @@ static class Program /// The main entry point for the application. /// [STAThread] - static void Main() - { - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - Application.Run(new MainForm()); + static void Main(string[] args) + { + if (args != null && args.Length > 0) { + RunCli(args); + } else { + RunForm(); + } + } + + private static void RunForm() { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new MainForm()); + } + + private static void RunCli(string[] args) { + const string inArg = "in"; + const string outArg = "out"; + const string cssArg = "css"; + const string helpArg = "help"; + + try { + var parsedArgs = ParseArgsRaw(args); + + if (parsedArgs.ContainsKey(helpArg)) { + PrintCliHelp(); + } else { + var inPath = parsedArgs[inArg][0]; + var outPath = parsedArgs[outArg][0]; + + var mkDown = new Markdown(); + var result = mkDown.Transform(File.ReadAllText(GetAbsPath(inPath))); + + File.WriteAllText(GetAbsPath(outPath), result, System.Text.Encoding.UTF8); + } + } catch (Exception ex) { + PrintCliHelp(ex.Message); + } + } + + private static string GetAbsPath(string path) { + if (Path.IsPathRooted(path)) { + return path; + } else { + return Path.Combine(Environment.CurrentDirectory, path); + } + } + + private static void PrintCliHelp(string errorMsg = "") { + if (errorMsg != "") + Console.WriteLine("Error: " + errorMsg); + + Console.WriteLine("Usage: -in -out [-css ]"); + } + + private static Dictionary> ParseArgsRaw(string[] args) { + var parsedArgs = new Dictionary>(); + + var prev = string.Empty; + var curr = string.Empty; + + for (int i = 0; i < args.Length; i++) { + curr = args[i]; + + if (curr.StartsWith("-")) { + var arg = curr.TrimStart('-'); + + parsedArgs[arg] = new List(2); + prev = arg; + } else if (!String.IsNullOrEmpty(prev)) { + parsedArgs[prev].Add(curr); + } else { + throw new ArgumentException("invalid syntax"); + } + } + + return parsedArgs; } } } From c009ce478774a30051d517c15c1a2766a5beb2fd Mon Sep 17 00:00:00 2001 From: Ray Glover Date: Mon, 24 Oct 2011 21:45:01 +0100 Subject: [PATCH 02/12] out-path is optional; if not specified, the out-path argument adopts the inpath with '.html' extension --- src/MarkdownWin/Program.cs | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/src/MarkdownWin/Program.cs b/src/MarkdownWin/Program.cs index 97c95ad..921b5a7 100644 --- a/src/MarkdownWin/Program.cs +++ b/src/MarkdownWin/Program.cs @@ -22,13 +22,13 @@ static void Main(string[] args) } } - private static void RunForm() { + static void RunForm() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm()); } - private static void RunCli(string[] args) { + static void RunCli(string[] args) { const string inArg = "in"; const string outArg = "out"; const string cssArg = "css"; @@ -37,38 +37,46 @@ private static void RunCli(string[] args) { try { var parsedArgs = ParseArgsRaw(args); - if (parsedArgs.ContainsKey(helpArg)) { + if (parsedArgs.ContainsKey(helpArg)) PrintCliHelp(); - } else { - var inPath = parsedArgs[inArg][0]; - var outPath = parsedArgs[outArg][0]; + else { + var inPath = GetAbsPath(parsedArgs[inArg][0]); + var outPath = GetAbsPath(GetOutPath(inPath, outArg, parsedArgs)); var mkDown = new Markdown(); - var result = mkDown.Transform(File.ReadAllText(GetAbsPath(inPath))); + var result = mkDown.Transform(File.ReadAllText(inPath)); - File.WriteAllText(GetAbsPath(outPath), result, System.Text.Encoding.UTF8); + File.WriteAllText((outPath), result, System.Text.Encoding.UTF8); } } catch (Exception ex) { PrintCliHelp(ex.Message); } } - private static string GetAbsPath(string path) { - if (Path.IsPathRooted(path)) { + private static string GetOutPath(string inPath, string outArg, Dictionary> parsedArgs) { + if (parsedArgs.ContainsKey(outArg)) + return parsedArgs[outArg][0]; + else { + var fi = new FileInfo(inPath); + return fi.FullName.Substring(0, fi.FullName.Length - fi.Extension.Length) + ".html"; + } + } + + static string GetAbsPath(string path) { + if (Path.IsPathRooted(path)) return path; - } else { + else return Path.Combine(Environment.CurrentDirectory, path); - } } - private static void PrintCliHelp(string errorMsg = "") { + static void PrintCliHelp(string errorMsg = "") { if (errorMsg != "") Console.WriteLine("Error: " + errorMsg); Console.WriteLine("Usage: -in -out [-css ]"); } - private static Dictionary> ParseArgsRaw(string[] args) { + static Dictionary> ParseArgsRaw(string[] args) { var parsedArgs = new Dictionary>(); var prev = string.Empty; From 3ca34fbd4c4dd063dd4316fd726a64febc4171f1 Mon Sep 17 00:00:00 2001 From: Ray Glover Date: Mon, 24 Oct 2011 22:08:11 +0100 Subject: [PATCH 03/12] css-ified the CLI output. added CLI '-raw' option to keep old behaviour --- src/MarkdownWin/MainForm.cs | 13 +-------- src/MarkdownWin/MarkdownWin.csproj | 1 + src/MarkdownWin/Program.cs | 47 ++++++++++++++++-------------- src/MarkdownWin/Stylizer.cs | 26 +++++++++++++++++ 4 files changed, 53 insertions(+), 34 deletions(-) create mode 100644 src/MarkdownWin/Stylizer.cs diff --git a/src/MarkdownWin/MainForm.cs b/src/MarkdownWin/MainForm.cs index 54c7155..c1f4227 100644 --- a/src/MarkdownWin/MainForm.cs +++ b/src/MarkdownWin/MainForm.cs @@ -90,20 +90,9 @@ private void RefreshPreview(string fileName) private void BrowserDocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { - const string htmlTemplate = "{1}"; - if (browser.Document != null) { - string stylesheet; - using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(this.GetType(), "markdown.css")) - using (var reader = new StreamReader(stream)) - { - stylesheet = reader.ReadToEnd(); - } - - string html = string.Format(htmlTemplate, stylesheet, _pendingPreviewHtml); - browser.Document.Write(html); - + browser.Document.Write(Stylizer.Run(_pendingPreviewHtml)); Debug.WriteLine("Document Completed and written to."); } } diff --git a/src/MarkdownWin/MarkdownWin.csproj b/src/MarkdownWin/MarkdownWin.csproj index ed76000..ac49640 100644 --- a/src/MarkdownWin/MarkdownWin.csproj +++ b/src/MarkdownWin/MarkdownWin.csproj @@ -63,6 +63,7 @@ MainForm.cs + ResXFileCodeGenerator Resources.Designer.cs diff --git a/src/MarkdownWin/Program.cs b/src/MarkdownWin/Program.cs index 921b5a7..a40a3c9 100644 --- a/src/MarkdownWin/Program.cs +++ b/src/MarkdownWin/Program.cs @@ -1,25 +1,22 @@ -using System; -using System.Linq; +using System; +using System.Linq; using System.Windows.Forms; using System.Collections.Generic; using MarkdownSharp; -using System.IO; - -namespace MarkdownWin -{ - static class Program - { - /// - /// The main entry point for the application. - /// - [STAThread] - static void Main(string[] args) - { +using System.IO; + +namespace MarkdownWin { + static class Program { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main(string[] args) { if (args != null && args.Length > 0) { RunCli(args); } else { - RunForm(); - } + RunForm(); + } } static void RunForm() { @@ -31,7 +28,7 @@ static void RunForm() { static void RunCli(string[] args) { const string inArg = "in"; const string outArg = "out"; - const string cssArg = "css"; + const string rawArg = "raw"; const string helpArg = "help"; try { @@ -46,7 +43,10 @@ static void RunCli(string[] args) { var mkDown = new Markdown(); var result = mkDown.Transform(File.ReadAllText(inPath)); - File.WriteAllText((outPath), result, System.Text.Encoding.UTF8); + if (!parsedArgs.ContainsKey(rawArg)) + File.WriteAllText((outPath), Stylizer.Run(result), System.Text.Encoding.UTF8); + else + File.WriteAllText((outPath), result, System.Text.Encoding.UTF8); } } catch (Exception ex) { PrintCliHelp(ex.Message); @@ -73,7 +73,10 @@ static void PrintCliHelp(string errorMsg = "") { if (errorMsg != "") Console.WriteLine("Error: " + errorMsg); - Console.WriteLine("Usage: -in -out [-css ]"); + Console.WriteLine("Usage: -in [-out ] [-raw]"); + Console.WriteLine("\t-in: Path to the markdown file"); + Console.WriteLine("\t-out: (Optional) Path to the output html file (uses .html by default)"); + Console.WriteLine("\t-raw: (Optional) Don't stylize the output."); } static Dictionary> ParseArgsRaw(string[] args) { @@ -98,6 +101,6 @@ static Dictionary> ParseArgsRaw(string[] args) { } return parsedArgs; - } - } -} + } + } +} diff --git a/src/MarkdownWin/Stylizer.cs b/src/MarkdownWin/Stylizer.cs new file mode 100644 index 0000000..4110eca --- /dev/null +++ b/src/MarkdownWin/Stylizer.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Reflection; +using System.IO; + +namespace MarkdownWin { + class Stylizer { + public static string Run(string html, string cssOverridePath = "") { + const string htmlTemplate = "{1}"; + string stylesheet; + + if (String.IsNullOrEmpty(cssOverridePath)) { + using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(typeof(Stylizer), "markdown.css")) + using (var reader = new StreamReader(stream)) { + stylesheet = reader.ReadToEnd(); + } + } else { + stylesheet = File.ReadAllText(cssOverridePath); + } + + return string.Format(htmlTemplate, stylesheet, html); + } + } +} From e5970117ee94b691e1635f565dd50efbc98976ce Mon Sep 17 00:00:00 2001 From: Ray Glover Date: Tue, 15 Nov 2011 00:13:17 +0000 Subject: [PATCH 04/12] css revamp --- dist/MarkdownWin.exe | Bin 300032 -> 302080 bytes readme.md | 2 ++ src/MarkdownWin/markdown.css | 17 +++++++++++++---- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/dist/MarkdownWin.exe b/dist/MarkdownWin.exe index 8a06d8ce2d9b80f927796d66403ed0637c9ae83f..7b24fdcd8b7e237a7c788e3172fd9895375731d9 100644 GIT binary patch delta 29378 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 delta 27131 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 diff --git a/readme.md b/readme.md index 0898927..66d1e6d 100644 --- a/readme.md +++ b/readme.md @@ -1,5 +1,7 @@ ## MarkdownWin +----------------------------------------------------- + *A [Markdown](http://daringfireball.net/projects/markdown/) editor with live-preview for Windows.* **Download the binary by tapping [right here](https://github.com/jpoehls/MarkdownWin/raw/master/dist/MarkdownWin.exe).** diff --git a/src/MarkdownWin/markdown.css b/src/MarkdownWin/markdown.css index 69aae2a..2a1d12d 100644 --- a/src/MarkdownWin/markdown.css +++ b/src/MarkdownWin/markdown.css @@ -1,12 +1,18 @@ -body +@import url(http://fonts.googleapis.com/css?family=Open+Sans:300); + +body { margin: 0 auto; - font-family: Georgia, Palatino, serif; + font-family: Arial, sans-serif; color: #444444; line-height: 1; max-width: 960px; padding: 30px; } +h1, h2, h3 +{ + font-family: "Open Sans", serif; +} h1, h2, h3, h4 { color: #111111; @@ -57,7 +63,7 @@ a:visited ul, ol { padding: 0; - margin: 1em; + margin: 1.2em; } li { @@ -121,5 +127,8 @@ hr width: 540px; text-align: left; margin: 0 auto 0 0; - color: #999; + color: #333; + background-color: #333; + border: 0; + height: 2px; } From fbff2e4ba84bf0079d9f3f15ec4c92adccaa6d9a Mon Sep 17 00:00:00 2001 From: Ray Glover Date: Tue, 15 Nov 2011 22:08:12 +0000 Subject: [PATCH 05/12] style changes --- dist/MarkdownWin.exe | Bin 302080 -> 302080 bytes readme.md | 2 +- screenshot.png | Bin 58116 -> 124444 bytes src/MarkdownWin/markdown.css | 16 ++++++++-------- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/dist/MarkdownWin.exe b/dist/MarkdownWin.exe index 7b24fdcd8b7e237a7c788e3172fd9895375731d9..37b15e02e1c0c8f5381015a5805e21b228779cc9 100644 GIT binary patch delta 402 zcmZqJA=I!#XhH|G$-_evyJZ=RCaw(UQ`yME;KKj}2Ur+3u})MJo~+1d&e$+Hl2M(p zV{#*q+%$P5W4!p5i_8oK_Zb+Nfl3(}7}%bqF)&=nVxBy)SF_oJsojH#5r~<#doVFC zTE%#5`|CB#E==rZCQfEfhSt;T*E1_jw_eZe$(Nj;lV4<|plo7hVr=XFVk_J$o~=Br}N7zL{B;-LRm- znyZ#;`bipyyJZ=(Caw(UliA3^;KKj}2Ur-^u})MJo~+1d&R8)yl2M(p zVR9poTsL_oW4!p9i_8oK_Zb+Nfl3(}7}%bqF)*CSVxBy)SF_oJsojH#5r~<#doVFC zTE)0``|CB#E=+6&29}m-Y10GNGy6}sUe7Gemzk~oBpG}_GQATGIHvPWVaXHS0t|x*z~E8=g#{F-OrJP~ zWjh6Af56H?T190L5|) Lw;zmQ{Kg0XrAc^+ diff --git a/readme.md b/readme.md index 66d1e6d..50fd9e5 100644 --- a/readme.md +++ b/readme.md @@ -19,7 +19,7 @@ We use [MarkdownSharp](http://code.google.com/p/markdownsharp/) to render the li * Print it with `CTRL+P`. * Float the preview window on top of other applications for easy viewing. -![Screenshot](https://raw.github.com/jpoehls/MarkdownWin/master/screenshot.png) +![Screenshot](https://raw.github.com/cynosura/MarkdownWin/master/screenshot.png) **Dev Requirements** VS 2010, NuGet diff --git a/screenshot.png b/screenshot.png index c0083b249ddf6d2aa18aab5a6b4f0118ecfdedc4..b4c592236481a247381843e7c2a02ed135ee9cb7 100644 GIT binary patch literal 124444 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

N^^7eYwAMZ%GNcLR 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ΠBr3{e5X;Q%n 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

8Y)4Bv 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 Ef*NJNlmGw# literal 58116 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 diff --git a/src/MarkdownWin/markdown.css b/src/MarkdownWin/markdown.css index 2a1d12d..855c0dd 100644 --- a/src/MarkdownWin/markdown.css +++ b/src/MarkdownWin/markdown.css @@ -46,19 +46,19 @@ h5 } a { - color: #0099ff; + color: #64B6B1; + text-decoration: none; margin: 0; padding: 0; vertical-align: baseline; } a:hover { - text-decoration: none; - color: #ff6600; + color: #46433A; } a:visited { - color: purple; + color: #CE534D; } ul, ol { @@ -126,9 +126,9 @@ hr { width: 540px; text-align: left; - margin: 0 auto 0 0; - color: #333; - background-color: #333; + margin: 1.2em auto 1.2em 0; + color: #EEE; + background-color: #EEE; border: 0; - height: 2px; + height: 1px; } From 843c18576658566896b5e9baaed63357b9ea9002 Mon Sep 17 00:00:00 2001 From: Ray Glover Date: Tue, 15 Nov 2011 22:15:57 +0000 Subject: [PATCH 06/12] updated readme --- readme.md | 11 ++++++++++- src/MarkdownWin/Program.cs | 6 +++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/readme.md b/readme.md index 50fd9e5..a87ca91 100644 --- a/readme.md +++ b/readme.md @@ -2,7 +2,7 @@ ----------------------------------------------------- -*A [Markdown](http://daringfireball.net/projects/markdown/) editor with live-preview for Windows.* +*A [Markdown](http://daringfireball.net/projects/markdown/) editor and compiler with live-preview for Windows.* **Download the binary by tapping [right here](https://github.com/jpoehls/MarkdownWin/raw/master/dist/MarkdownWin.exe).** @@ -12,12 +12,21 @@ in sync with your file. You can use whatever editor you want. We use [MarkdownSharp](http://code.google.com/p/markdownsharp/) to render the live preview. + ### Features * Preview your Markdown file live, while you edit it. * Copy the HTML source to your clipboard with `CTRL+C`. * Print it with `CTRL+P`. * Float the preview window on top of other applications for easy viewing. +* MarkdownWin also to be used as a Markdown build tool via its simple CLI interface: + + usage -in [-out ] [-raw] + -in: Path to the markdown file + -out: (Optional) Path to the output html file (uses .html by default) + -raw: (Optional) Don't stylize the output. + +--------------------------------------------------------- ![Screenshot](https://raw.github.com/cynosura/MarkdownWin/master/screenshot.png) diff --git a/src/MarkdownWin/Program.cs b/src/MarkdownWin/Program.cs index a40a3c9..c5c8112 100644 --- a/src/MarkdownWin/Program.cs +++ b/src/MarkdownWin/Program.cs @@ -74,9 +74,9 @@ static void PrintCliHelp(string errorMsg = "") { Console.WriteLine("Error: " + errorMsg); Console.WriteLine("Usage: -in [-out ] [-raw]"); - Console.WriteLine("\t-in: Path to the markdown file"); - Console.WriteLine("\t-out: (Optional) Path to the output html file (uses .html by default)"); - Console.WriteLine("\t-raw: (Optional) Don't stylize the output."); + Console.WriteLine(" -in: Path to the markdown file"); + Console.WriteLine(" -out: (Optional) Path to the output html file (uses .html by default)"); + Console.WriteLine(" -raw: (Optional) Don't stylize the output."); } static Dictionary> ParseArgsRaw(string[] args) { From bfd5ea089631e75864ed3014e323eeed04691f8a Mon Sep 17 00:00:00 2001 From: Ray Glover Date: Wed, 16 Nov 2011 23:21:08 +0000 Subject: [PATCH 07/12] avoid MSIE quirks mode; fixes max-width bug --- src/MarkdownWin/Stylizer.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/MarkdownWin/Stylizer.cs b/src/MarkdownWin/Stylizer.cs index 4110eca..6254dd9 100644 --- a/src/MarkdownWin/Stylizer.cs +++ b/src/MarkdownWin/Stylizer.cs @@ -8,7 +8,9 @@ namespace MarkdownWin { class Stylizer { public static string Run(string html, string cssOverridePath = "") { - const string htmlTemplate = "{1}"; + const string htmlTemplate = + "{1}"; + string stylesheet; if (String.IsNullOrEmpty(cssOverridePath)) { From 86a1d54310970d936a33befc5cdbec63d588ff6d Mon Sep 17 00:00:00 2001 From: Ray Date: Fri, 18 Nov 2011 12:36:13 +0000 Subject: [PATCH 08/12] updated html to enforce UTF-8 encoding (fixes unicode bug on FF3) --- src/MarkdownWin/Stylizer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/MarkdownWin/Stylizer.cs b/src/MarkdownWin/Stylizer.cs index 6254dd9..1956057 100644 --- a/src/MarkdownWin/Stylizer.cs +++ b/src/MarkdownWin/Stylizer.cs @@ -9,7 +9,7 @@ namespace MarkdownWin { class Stylizer { public static string Run(string html, string cssOverridePath = "") { const string htmlTemplate = - "{1}"; + "{1}"; string stylesheet; From 5165606de8fe6d616e9d311fadcbe542e52aa88c Mon Sep 17 00:00:00 2001 From: Ray Date: Fri, 18 Nov 2011 15:04:45 +0000 Subject: [PATCH 09/12] FF3.6 rendering fixes --- src/MarkdownWin/Stylizer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/MarkdownWin/Stylizer.cs b/src/MarkdownWin/Stylizer.cs index 1956057..5f78775 100644 --- a/src/MarkdownWin/Stylizer.cs +++ b/src/MarkdownWin/Stylizer.cs @@ -9,7 +9,7 @@ namespace MarkdownWin { class Stylizer { public static string Run(string html, string cssOverridePath = "") { const string htmlTemplate = - "{1}"; + "{1}"; string stylesheet; From f2a94372337e2d4c2403a815eb74b39ec08540b7 Mon Sep 17 00:00:00 2001 From: Ray Date: Fri, 18 Nov 2011 15:40:33 +0000 Subject: [PATCH 10/12] FIX: UTF8 --- src/MarkdownWin/Stylizer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/MarkdownWin/Stylizer.cs b/src/MarkdownWin/Stylizer.cs index 5f78775..9a3192b 100644 --- a/src/MarkdownWin/Stylizer.cs +++ b/src/MarkdownWin/Stylizer.cs @@ -9,7 +9,7 @@ namespace MarkdownWin { class Stylizer { public static string Run(string html, string cssOverridePath = "") { const string htmlTemplate = - "{1}"; + "{1}"; string stylesheet; From 7ad5a5ea372b168970fa45dfd518802c2e8405b7 Mon Sep 17 00:00:00 2001 From: Ray Glover Date: Sun, 20 Nov 2011 19:47:34 +0000 Subject: [PATCH 11/12] added MarkdownSharp sources --- MarkdownWin.sln | 62 +- dist/MarkdownWin.exe | Bin 302080 -> 302592 bytes .../MarkdownSharp.1.13.0.0.nupkg | Bin 47410 -> 0 bytes .../lib/35/MarkdownSharp.dll | Bin 62464 -> 0 bytes .../lib/35/MarkdownSharp.pdb | Bin 58880 -> 0 bytes .../lib/35/MarkdownSharp.xml | 433 ----- readme.html | 179 ++ src/MarkdownSharp/AssemblyInfo.cs | 36 + src/MarkdownSharp/Escapes.cs | 164 ++ src/MarkdownSharp/Markdown.cs | 1725 +++++++++++++++++ src/MarkdownSharp/MarkdownOld.cs | 1311 +++++++++++++ src/MarkdownSharp/MarkdownOptions.cs | 172 ++ src/MarkdownSharp/MarkdownSharp.csproj | 95 + src/MarkdownWin/MarkdownWin.csproj | 9 +- src/MarkdownWin/MarkdownWin.csproj.user | 6 + 15 files changed, 3736 insertions(+), 456 deletions(-) delete mode 100644 packages/MarkdownSharp.1.13.0.0/MarkdownSharp.1.13.0.0.nupkg delete mode 100644 packages/MarkdownSharp.1.13.0.0/lib/35/MarkdownSharp.dll delete mode 100644 packages/MarkdownSharp.1.13.0.0/lib/35/MarkdownSharp.pdb delete mode 100644 packages/MarkdownSharp.1.13.0.0/lib/35/MarkdownSharp.xml create mode 100644 readme.html create mode 100644 src/MarkdownSharp/AssemblyInfo.cs create mode 100644 src/MarkdownSharp/Escapes.cs create mode 100644 src/MarkdownSharp/Markdown.cs create mode 100644 src/MarkdownSharp/MarkdownOld.cs create mode 100644 src/MarkdownSharp/MarkdownOptions.cs create mode 100644 src/MarkdownSharp/MarkdownSharp.csproj create mode 100644 src/MarkdownWin/MarkdownWin.csproj.user diff --git a/MarkdownWin.sln b/MarkdownWin.sln index 6b8cee8..6cfe7d8 100644 --- a/MarkdownWin.sln +++ b/MarkdownWin.sln @@ -1,20 +1,42 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MarkdownWin", "src\MarkdownWin\MarkdownWin.csproj", "{F578EEC8-1C03-43B6-92A5-76C25D9A4F0F}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x86 = Debug|x86 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {F578EEC8-1C03-43B6-92A5-76C25D9A4F0F}.Debug|x86.ActiveCfg = Debug|x86 - {F578EEC8-1C03-43B6-92A5-76C25D9A4F0F}.Debug|x86.Build.0 = Debug|x86 - {F578EEC8-1C03-43B6-92A5-76C25D9A4F0F}.Release|x86.ActiveCfg = Release|x86 - {F578EEC8-1C03-43B6-92A5-76C25D9A4F0F}.Release|x86.Build.0 = Release|x86 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MarkdownWin", "src\MarkdownWin\MarkdownWin.csproj", "{F578EEC8-1C03-43B6-92A5-76C25D9A4F0F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MarkdownSharp", "src\MarkdownSharp\MarkdownSharp.csproj", "{37619116-CCE8-465A-8B1F-081CA53364BB}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F578EEC8-1C03-43B6-92A5-76C25D9A4F0F}.Debug|Any CPU.ActiveCfg = Debug|x86 + {F578EEC8-1C03-43B6-92A5-76C25D9A4F0F}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {F578EEC8-1C03-43B6-92A5-76C25D9A4F0F}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {F578EEC8-1C03-43B6-92A5-76C25D9A4F0F}.Debug|x86.ActiveCfg = Debug|x86 + {F578EEC8-1C03-43B6-92A5-76C25D9A4F0F}.Debug|x86.Build.0 = Debug|x86 + {F578EEC8-1C03-43B6-92A5-76C25D9A4F0F}.Release|Any CPU.ActiveCfg = Release|x86 + {F578EEC8-1C03-43B6-92A5-76C25D9A4F0F}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {F578EEC8-1C03-43B6-92A5-76C25D9A4F0F}.Release|Mixed Platforms.Build.0 = Release|x86 + {F578EEC8-1C03-43B6-92A5-76C25D9A4F0F}.Release|x86.ActiveCfg = Release|x86 + {F578EEC8-1C03-43B6-92A5-76C25D9A4F0F}.Release|x86.Build.0 = Release|x86 + {37619116-CCE8-465A-8B1F-081CA53364BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {37619116-CCE8-465A-8B1F-081CA53364BB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {37619116-CCE8-465A-8B1F-081CA53364BB}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {37619116-CCE8-465A-8B1F-081CA53364BB}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {37619116-CCE8-465A-8B1F-081CA53364BB}.Debug|x86.ActiveCfg = Debug|Any CPU + {37619116-CCE8-465A-8B1F-081CA53364BB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {37619116-CCE8-465A-8B1F-081CA53364BB}.Release|Any CPU.Build.0 = Release|Any CPU + {37619116-CCE8-465A-8B1F-081CA53364BB}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {37619116-CCE8-465A-8B1F-081CA53364BB}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {37619116-CCE8-465A-8B1F-081CA53364BB}.Release|x86.ActiveCfg = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/dist/MarkdownWin.exe b/dist/MarkdownWin.exe index 37b15e02e1c0c8f5381015a5805e21b228779cc9..8544db7e2541c836f3ed93eb9ece6b17c231118d 100644 GIT binary patch delta 5242 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 G@&5uob^XHt delta 5112 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 F{TGhh2|xe< diff --git a/packages/MarkdownSharp.1.13.0.0/MarkdownSharp.1.13.0.0.nupkg b/packages/MarkdownSharp.1.13.0.0/MarkdownSharp.1.13.0.0.nupkg deleted file mode 100644 index c41f5244f7200088082196c2f4bf58155d1001e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47410 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 WdO3Mwm8h_p82FV0T$8R6e)?Zb(zOWy diff --git a/packages/MarkdownSharp.1.13.0.0/lib/35/MarkdownSharp.dll b/packages/MarkdownSharp.1.13.0.0/lib/35/MarkdownSharp.dll deleted file mode 100644 index b779a466b362890c861072062636ca96142fdb8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62464 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∾hTktzQEj;h?A&TX5|!9q!nO0|?G>Aat5jPAZXK z2C>?8p`S^pj*z_#(>gziHAyxFQ_Pf-Lsd$&VKxQBCZsL3DJWJrh3Qgf-XxRSQk%jm zAIk3my{52^g(ewjHq$}!7{KNBqErgVS~i370?hQdmhtie%C;8u@`6zoFeope`&@kJ zWx&VTfskDcIX$tUCezu>P_wk1Tm0w8AMpT=1>n3xzR*yrRcSW^{wQx*-IZXfYeQElSFFkCmtd?LD1|1CjvZ2{OA2IHlX{&tfXbF|d z>m?kU&;DxGS3U8~ycqam!LPFS3~R22Q)M#<0bejjTImZWKY=au57x=s&>J~q%ROMM z`w?I_NPC-kud9;x?TS2fGN3y_!q2#a@WI5v}O;nXp8~ z5oGU1Sxm>fLcxyEg~?mdgdTfwc{gA23iR92?0UVq8f){dD}u;ntR0=*6$^JnSM}wO z1JABlN6da3x;+isHq;RdqR4SwpWcd`Xh$rES%@!nYyYWRyCYIs$$^2#3bcXWyjjlY zGd!Q4)6p!h^OlYl9MHFj{xPoewE`gC5%-`2(G`oM6s5SJ1TTa5)2~%;|DpKPxo&<0 zG{A;}b{3cn`)JD3EGwM59naR@lg_0G*sFo&$Vm=Tuih<@lO%!7;pOf?)fJngV!`S~ zkxQH?RJ4$D7O`Pcw-{UKRns?-1_K|R>ynCXu8pu#qP5ec-f(K(&Wmfc>$8%8SjDR|_ zWp?ZAuF&kRrl_WM?f|KWvjSZv`ZKDjbLF!bhc`o09_A~lD>g>MbZ*tY>6oSm4jfKW z(F(K`Bi@t-rBAoc0T|ljz5{$!UYBhbrcgV$#X;`KXKxUv9vxUExtFm(<9LzA9*R1C zDvwXDir;>AYvf!gRO-E7F%s2=Y4@7Ja`*4K0P*Sdcla4XBm8{jea77Y?N`R0cFSo~ z2t8L;D7-uL!t!pFGXWX{4m1DYgu!t7&H+PQ``#$nW=nQ6aAim;}X71`fGiI}HQnPr9AMxbAd z`$^ih6)v>6z40u7hLf<)!}fKEJ169_XRp!jHcz`lrR_orW`XLi3a@fKSnx_P1ij+6 zjcy)~&XpTK+FSN`^a8z?dOUg|4vUE6;2lP zhs@(u|4&6^++IgV*a& zTbOF7h>WqY9DcdMsaqi#@LYf7VF$YGhQC;nO=;8L%fAQ<*K28wpHsC?)YeIam{Y^{0!4-yhzc?Dw&5bIvE5>ejHpd8{p&oXqR?*eME zKt}O4U<+yGrj$^Pf`JbiMY!UhAI}1g4we?N8x{(`* zzVwX?kFsNy;=pF=*h(1e-Y3$!;&bOSWyH1jTYUl_ucA5+w!3#J2*I#2fZ_~hzQunUyTitj0>KCu2V-PoC;Ve_D!S0JE zm3k|lziCIjzhGywM_@%L^`=W8TaO^`=6>~o56Qbri?6+TCvaAuM*81^D7$8qFDG)%x4WsixU+%*>Kl(qq(}!Hx>hR9BuEVE^ zvo`w!4bjge!iRPEhz@^jeZ`8a_XJ)Zh^q&JFAs#(kAq*a!s^}8Ka7UeuXXrD^P|nZ z>NCyk;g`)%HHX!#mZzHA)Yg{1mbg0BavQ?8Al#}x41$H#ms{BOS1p9Ku$AF@9p2db zRC8QqS_$P|o%0w%jHQjx+jZEZ!_^4G>ee=v9@Oyu|{&tjpv7J49A92z`D8hMu2U7DDC5kELUxic?ViCo? zBIhlpR;wMV8D<0}qgAa#iZ%D^nwP6<@wUw@br3mCcwy@}%4VswF59L~sGFuvTk{Y; zXe~wfhz{SPbN&S38uicCAi_X^;ar4^)Jh$$)8SPJEp=^RDOA^!fpLU?rNh6|VLUhw zIqP+JILOjB>F~Qc{EZGHA?DA~;k`OMqr)%g@S8g9Xkwkqn%LVW9lt?`uhrpS= zxB_8Vt=8e?QBv$Gl-@LTqmHK#U!(3ue2vQM@RSZ8)ZquCpGE$s5L)V+I(%A(|DeO4 zplw+FF!p7HKSgM%T>M)IU!}wM#pfaZl#c&KhZi(|3vJhalSU~C_C$&eXKH}8O1&^ZaDJS*v;Bm;zXp((C zqTY#`arL6*0^!4`8CQFq)aOvMS-oDT9#LNpPGax+d8h0b!TTX=ui?T4tdpUmp!Uz4 z)Y{N-)vliDm9p(f%~GGF%0$hBNOh=JP^6K1HQIHmPdlkMp{z@NvQNrBfYfaDwpEh) z9%{}}-*QqvMp?I7v0BQWLu#%%;iN8UI*N7lF(-99QWvUcoK&jmxSFR%*GRiu(<{|Q z>dQ`Q3S|paYOR#L4ec&gQ%>r=C|jt$>ZHDevV{7vllmsg7O8FPq+M(HsJcYG&q-a3 z)MC|onUuX4sU<4uq_&5T!|r&mle!(LrRpgsbqY0?sm+&5yN6JgRHIJnEl4d_pL0?l zLd_oaw3GS-QoU;YMbhp&NUcy0JEJEI}-(sdqc6KSt^@g|}7kb4Gm(sms-6S4!$1kb03i2uBOK z?%Bv2@m|Lt>J%mJ!|F=)ZYk4}bCp^GOVUW=Rcf!KwB%f+p4KTy4!CuLnzfNN&nWWs z)#`mtik!Sr4Q!G!a`Gnin3JN!ZB~iRQbvi}q8@fqzX*O2tHd)~r0luqQH7QB8cC7M zx2aiMCDjo-uC}WJmmr6)cc=%pONxAbt@^T)B41ypHe4%Z6$4+VsQoB@Qr_>~u?^f@0QsnC!)%@$FjC{REz1~TYulK57JE_~y%RcoGT?v3k zzV26_c2eZ){VK6b%E;F@t6ffte0__0r;{Qt-Kw_jmYU@9+tg_%bp#M@SC2ZW<4E11 zKI){%^9R%qoD_L}K#g#r1}^0JJJnmA6m{KQYGjX;Q33|l`I;k(A?1%!P@N-6e1$~aF z4LT*;m7;9PRVL9syd>hNqoMfCNX>J~xN>FHB~IC#_}7r?b;`Jo<Z^QzqhohH{(>k$vUCBTaRKtv8=V( zdPJ>h#lA}IXuU!G58cCZgbPsrRO=Fi_qX=w_*xymQiq!mzPxn@!Z)br9j_TZa&S6|k18@3y`Y>-7&>ZRGr<^|;jnOim;I&#ez2 z{vW{M>wx}*A#eG9Y^VGVE7F{IotNE?w=UGs_i)9Z)|JQIq|@o)gQIZ4iL{pI_wEp z7U>*A2nt(&)wUKnUunAn;kVj01!5X{hxNbP_UrsZf!Tm)2j+w34 zYkwT!)9vpLrmSDIzdv}P^(Wv5TICDCUs3cP1*Q9tGYb|?8!XR_$oaf_FT%f4Pa^yl z>a?k+)h7`DE^79{HvW9D4;JL#Ana0K34TuH1D_3Sw(dv$gF5_v6XR#14Bw%{&*<>` zI<#WUU!=p$?Yfl?r*!z34nM8KXLP7$u}(sVn{{|lhf_LyOoy|qjP(lZJ=PP}pIe`? zp0<8r{hRf?6$;D?TpP#)UKV&);KPB-g4YKR2ag9I48A`2XTbn8VGz5FDCi0Ah}DU3 zsSej!aCfL3I-b(us1Dns??C?CC`;?tm;M8g`X>A*qyVTM)9Ge}VeBIUSh?DPM>E0z z(jADO1Wg0D{nv%~Y1sY&yt&SB61KjjUV<>7reNDckL&P$%tSz))!_q}RSO=K1?nHw z7pzl(&=gQD`B{lnz>{OC37sm7)g^JO&B`oE>_vFJ2yNrn%<~( zr|hG{xntS>k(52&H#|D3cABg`z>&}j(3xiuG3c2ghGiqmH>Nq(! zrjPB)WYc+_v3+d3aANytdMuqS^iLc8!F^%Jw7uhdCc z9x_t)iGyp^U^+jP8c**}fi`L|lLZ=u^ze3X=AqQk(fnvCKT?uAVS`?Sg-l@-#2*|f zjE%zWh>B`(G?OpvO5d9v1&T!+Z*hjV-%e%ohjaFr+BcEaEv`+CO%#~wA5Uc^;UK>s z-$d%$mp(EvnzFYaAGgzaQYf#Gl|D{F9Rn+*^SjciVfaVUa|Y=nZo%$}(L!dN;~JGJ zw~k~A>HK(VD6Mt?g}q<{e41)}B(M6@g^6*s74@=s>N!XcUjr^Vnl9w`rV3z|thzQ` zxDk_6S>V)1f9Y&x?b2+JCwp{T`miDkjFTmh$Ye7{tO`RTin-hG1^1^o#e;`5VXp&; ziGn7YLFqb7%XRyA?{a9*I&MQ$X88^26EZT|UpTl%1T=GBn$6WAZ$4Q3vw2+)iDh z^aJH-PCUlAJiI@)Rw|=V11n~(Q}P5Nx8kDPI=ZKMx41XmxUVG z2fdhQA7wd%$3}9aX;M`9Uid@e`*Y(W2HSG1AcS`TLLUu*qgk{Qnoo)ubE^zeZ|SK8 z=&dH6SH);qRZ5UklToS2n5W($C^j{iFDf|*y{I`S&ry1yzRu2X$qrK&a_lJ^B9Tr} z#x+acGm$H#QJ^uriHW>&<1Wl9c~CqlC{oJ8HIN!~LcL19&#R)6cYDz4*-Z}SCZHm- z1+{0QFwCbYU0rL-@GupH(zKI&+bJj6JW)@7sj+diNM(<3mZi}aWMS-EByX@x38I!( zk=GdA$adv99sm>2Q`ED0b+Z#IM%-FX2ky!rG_1`*jGms{5sumul*QBu&m-xIQ6FPjav^rHOs4hj7 zufVs6OhB_0XiGanuq~51lFj7{nISAi=|dAoj!+7UBJSitfMLf&;GI^mtO}X2G(>1@ z9H?MvwC~Me<-sb#j1&!zed*EEaUILM-8l_e4Mm4wToq2ZrA5Ky7$V3Yd%)m-MM?yH&Pq!+?L6Y=ki)7Ni^+HH*IUHI|c3Nl1|&NM!oLL7S^rR z=4h%w7(;mM&vA>Qb(4nA6y^&diX5b|&N(ZNuCgngJ%Wuw|HPrZ3~Fco#);9AU zs{B!!z5U}D6vmyh3wn`I*XJ@>ZTE6(2F7%i#w%?f@hDnd%7gCvQo)+u&?66?CGp{SE{dQ&y znTDP8G99m_@$ob&%Y()~$SMTYp!OVA*PMXy;$aM}vm7eQ zqGKcnQ?S6N;LBD@-#zB4`jU>?G^W`*&QS_Y4>- z3@a?0TSkw-ge{DapY@`^Ozizvj=?)=E1ovw)G_$$`;eZ%yJk6@BbpWM!W|ECo}aRUdmK6#pYZ_vjO8sg2w%z^(IhzW1VqvG{Tf-7S{fkoCTSK--Q`S zg5v9EOha-Yd)NS(7=XAhM|!$n&fO@uF9%geUL1imWwksVMxKq*V>*v2CJ#kKb(20P z%nsnnMH2EmQ_hyrQ4f$eryG~#b94o*#;7_Ccdk1p*u;PNIpTjV(z(2jG?r7OoCX=p zV*+!_MJa=47IQi}BZ>%@x{Jacpo^NSsrHj#%0-$v*W-T6N~rT542Ll?Y7aW-g}Pae zHKy7ys4@#+z!8+PAGS+i4JG>~bZTSGfe`ut;0aX5s>3RWoxr^yQP?i@O%7c4kxt=MwVg1D)5)nIc~KBD2K9AVvn z-b}8#KUYh(l0f%deo2aB+VB|Hu@Mkoq{}-!)FS@ZW3KJBa4yF;>DUGJk+8qG}a@d(EKrWImC0rw!F9MX=1ws_fBUbY#*BgyeY^4Wo=9kZiYW@~DS!TU6b?zqdfKQB< zE9=Z#YE4RGDy#aWoKNe_{{oSO4M!Kz0sOxczx2~o;#ZzSCaPtbU8Na@jI~T#Y;=jy zeMVOnnTgCQ`_%e7%6bb3Cg=YCT9Z?be7(uy;Lhh{c;PS7q;3RT)0$2+?z+mShuCt} zqhUNV6WKs8gl+^o(K^$c%*1Ybvvg*ziFzh-ZI~~lDeO|Rv5k>wS8I+NH-SyBGnrSI z$1gouj}ht#l0kq^PRjWfs>X$BIszL^iRHNolOeY0ak?iRC)10K+p0D*SM&0@29$fq zP;Vv)&#&Q4jHvt1-QYGRiy!O^Me1!~h~2pv)-%J(;8*=gtQs|-xiVKboY|XeEV}bO zGlSWWOnA*M@xC->AlEaDIimAr5YJ@(>Y1R#&r5@uo1T75PMVv${RqWf*ee^Cx}W-u zkcJLoKYb?Qj^pX#$}-bYSbhx%M}{%yl(N&wIlJCv$Tx=IN-(=PovMqFo7?CpdO^1QY;=KxkJZsAwpRZ6psuRoNIjkoG!k;!^P8@i5sn0sV}(F+whe z`B{pG!KKpYS-x2m`tW><+fJIQ+!0LZJpuiX{x*(sW?|hwRBLeVQ8W*t*I^Q?BfZNZ zo7sIgW{XleuLMB`tN1kxyYQ%c2Np`6@pH&jaJ;|3iK;aMgD>q|o>El%C5(OOiMJkj zx*|?oFN6g4_`H9B&xrbhW}paD$T9v}hkAr|hsHYxni`8lcLpsYm(ksHd75)xXjgYx8 z-58Yhv%(bAi$8*6zp!+*NGU8zFwa~fC-+K57j&cvCe9K;qBHlc~Z=FLOUN$l+ z#88JWJPQ37>Uf3T4^}dw-nt{Gual{u^0@Kf*91BDIrHy=<~1ij)Hvm<7H5a65AQdL zD)Gkw!Udc3jgEewtDI@G2rwJ@CD+^to;aeYvNGyk#HqOCmPiURCU%0H{!wkyKgZRW zB}|_W?lKq~wdZFJOdF9Fzx-)h)#uaNHQ?%)D=sC0e@febwEa}`0W9&oSm^J>UmqQS z679vZ--nb6-i2#>(u$$n*~w}i;WdZ>TpA$1&|RnQ&o@E@>6DH6U%IM207D4#Y+TGl z;TUx+3?U{O%}SmHkd205yU2YFV*wc3eGH{?mS9$wytWgl$hm%#9mVqJ%E|u8d|rE@ zaSAok!leu^Xt^p~CYSVHBWke$qn_DwrRm9Z{;*XrAE1ooO(454_tbdU;U)YBM0+}k!)Lb)lf%NMp@9$ zr53qFtS|BpzbNKX-?ct@KIPgsyd6BGtg{z3GIWt)`V+Z77b21cwt`j3z^=h52V-)} zj-tW64-qg7eh_&>sBca_r@_s|(6yrWlwo4){gpBM z4mJqQtmy)Y;bQz>g4IuKw*7k5sIDX$8yB_bB7AzLG4|tzp;0&j#oEnXJ_V`=%sGf( zQdO9lw`V0KRXesWdMAjw`#z#tf^kO_+j|NwcO6VaN6UMYyo~?7I&}FSg zVr0WxwMd@7i)=|>tYkDD@A!$%tL?xirpr)w8J?oY%*yI&F(aN-5N7RcgssV@Tp8+7 zkhpM#CS(KCU{k)qpr-YMgSe*%o%bH=VIT^G?@t^87HRFkrs5<%ay-o3A(VTKSJC_a zR!w5!2M>cOX+q0}%9?7~&zS42sc_v+J(+|S;IfwoVUp03ct;Mpndd#H;P_;m`Rj4{ za}^kArE|e_HDXs{I+v==(6y`Z;W{p_laM#|CFk=zqu~m*2(4Ej)`yREQajb^rMwSb z#7RPvv)5Y@x7rP3i{DcP@k+?Lr6}Kk{~L9^0Ue6IWV@3(eOiYHbO@Um-+HGODJV}uY^XTkFO%`mu_%imR{3c z1v~~Y#zlaJTFvv2qVa53ybJU^%tU%OlCt(aSpXD1d4qE?x z=*J4;^Z3D2_!jCKq}RZ)sDg3)M~{&Wm{EKaFUISm%Ghke)!>F15cjimp{Cv0*`lts40wr~vx&{uVV2ChANRx0qz)GW~fgMf3mU)GR{#f0(Q&m&X>FYzJ)mDTjv^55(h>KAoesJ?QmBecU7Lv7^{VIi*Q^%bTRg0Xamb-RDt@**oP)$w! z&_v})Amq|UwW8^zv1u@^RzV{CqV1oUrgvDr5xJVG&V0r%7}J<0Gv`F!BivX;#7MI8 z>jb6q)Y!cEHv>*NoKjnW%t-h&n~~Bnd26_Fj;qv`=Av1;oTX5Q@ALDE15|KER`~KK zS98DA_BUp2@-%Ta6hdrp-tf9w02<@P#%hyHY+=q-=w~v&BwRlvsPteV1rkwkb(TMO+%B+{Pxb>!#aggPu>m9D5LXT+vzLeLa@7 z4(dZC*>cikHgu|{4k$>CVkqO|Ot>$;)V?O+rMQVV0@buJM<_f%S)#2On*D>oLq^LO zw+sGHolVbtQY|gB#blVTGwV77N0-8|1%lg5>jvEH_8I^ec@M!_wM3ilSq49KYNp)1_&6Qh0PGIGLrfKFx$` zMo;iQh}S8U06z}i8PH-BX=+j4jjqhIEBWH^S@(bHbk>8$HNj0QZ*7>HacXVE@V)&E%;jLrhoQ+1c%1kJ}q)apL zv~;>(;`IMdkF4{ddw;J-O6Q6*^g`&7QYf`kez|Zuox{5bbOa{U-B_Wxvb%a`1FQ?$ z%iJIK;ki?n9@8zjYOp1piL4_w8P^uN_$f_X^GfxbUtBrj#rW^yX6&3wIA&GzZk4zZ zI)eYl(T98Wh_b|ww$UzR&$5m8Z@)Eyy_vHYUc+*RjBRG1R(q13FPz<04Pt2?;aAhJ zGodO^@BCOj#DH)OkGznU&rHVQ+AQYQ==7Eg$5BhyxChnle%8O`QaV@FQ+`KSU(;|L z)EUB$v^{D6nAd=>!7YD!f%t&82IprKTg1NznPxoV3;y?5A zF)VL;6ZgN@H!Y04)F>Sr;b?*NUyrZ%;t$E~#q5|picJB08hxhLIIZm7L}8 znR**UmKvoRF`?_zzo*>b?tdmti~mm2XU6PzK5A1FcX<}n@{g%S_557Z*D!ll)$Hyp zRafPXPIZ*$sjdx>ZTG$Nt8vDuI%t>hdN|MfbWYIR5lVr})EvVF+_Rdv3MO!;2!E0N zqRJlSvO0Rcu)ODDNykRqU*eZ{={wR;)@%R{W3ZOF8spRL8WU5W8i^kcA$IcFD)b(_ zS}EMB8gX*GJ-T`NeiQCJ(K=O4JbzV9yttquEWzEUMH?JUHXscP5NW*xaQwj!S=+g?Vw$OhtVqRSSN#iwFi6e@;~I zhYkd%(u+I>dg)VWA+OMtz8Yqr`*XG=wZqN(a#tyw>ZwxbWPW)?jZg2V8~we;CEUPQ zuJ}4O-$mtn8m05%N3Dp_BFIms&ok_H1`L`LV; zKW;}iBE}6UuXsSX7qMiOCx7Br%HOtJ*$ zbF3!@hntH(ZoE+Hlk#polS28j%D&cC=}XPspl6SLNV)XEv%xGbLT$j&f$h)@)M!t5 zgc;@d?zkDDds|wyn%rLWs+!0}e2q#@e_dM2<$Ev9Fc(`0(Y%M`UIGyXL!~D)pRNvY zjNAoyfH+4e#Bq_193kj(Igd%EyROT(hVH_}(MwR9*vhrmjrg*_*EjgywHToxL$1g4 zh=-h>mGxTb`C(?$2cI*$6UV#4eHg?sJ%~nO67GQ7-0+y$j*#VcuX{I`liydhgvZfR zCT&RaMzO7JO?YW(;+WFj>DOMbBGBt=d+98yRx*gNFaFkc6H}^dDZCWNwWzGe^EB>k z^Hw3hGeNdRDu};D-@FvGq5lf$*itZh!HFG_Sg;562Js(%)4rK4r7w94k>})n;3104 zCXduDgV*KyL|CP$ZALCTP zMHnCFLj_y0nu}l$09Vcvg!}$h7V`Fw`8Bfd=Z^%$v}4En%_~{KO<#NpOOYK3R4zi5 zms3~q3Y7eEed2`q`+&b`#b-TO)jq!O!mRe0{YH8x^x7ja&Xv-mt@0VDHwsZq<*i~+ zH0CM>Uukg1MQz;pC+NK+kAd+9AQWryYd$YuTJC-X#f9q{)}>ZWX-l_f^WpdM^67a; zF3yo(ys)PK?2or+p(5wYJ*s@cE((`k13n)YgLz@td&k+Ddd~}U$NBuDZk_!SnU`!{ z>o-|c2%I)f@^p7x+-beb(?(jD8%XrR^3>Mda&Tof*BN=bG6tb36)Kt<#^e;`QVrj7 zIC4&GSYEafE`|dzkK7d7@}n%az867LjT@w+Wq44y)bICrQS;CIMDYAFJ$tOr?B414U10L*Se%qJ$FYXoeDbK(OL68U;f|>O zw~Web%At_kU#ZBJ8X=`^e|K2U+T!lNdCi#qR36FE3(1$I`4YLr`Mtb#sKFPZUE>N{ zdiea@3q#oW*X)sp+4Xv?jZ*@b2uO4lJ@Z2+Yz{}PoIGahag5f!S={wo>5tP$nUT6gZt>sCus92@A80lxy{=V+=n-16PQbnA_apX^em!?NBS%6a(min*^&J>u?lyUB4;b>5NJ z=e=cE*&cXxEyg!MXC?qd?tHMl!J;Jl$Jlm18SIUx<5WjoVbQm{@tVMD#$=-3>SY?A};2m z?6skDom>W5h@W!03oPuHSnshwxmjJ24y6|K@tv4TZsbu`HwChSBGUtP7>oKdBNoCp^XHUbHoOnYT^W^$hDkdBmSKUU} zIDhL&^;12OCv-+VcyXpC#N;;-=-*?I4>eb=eTT3c96f-ZAi@P zG6H4#zc|qd1pcLs9!H$XER{R7^3Oi_`zsQqILI-qg>SQsfJ(THp|4j-Twlb}CA{}* zN*LEAO>CoZ%W;){I=S*SX8}^rSTH;`-BYC8Ox|>#!FLCAF7O0a>7gN6;7)jZ=uKOJ z(ED+F7b>y$w+E^mr$AljFi!cGCdsa~K4mXBc>QZ~1<1wC>xmOQD?dr^);@Ro$<0NB z7a^Jt&6_;=fQm^;jmi(ld&_C~n9sMmf+(WMvPFQ>$S-MrBX(FX?1$jJBk;~p={+3c z9n<{f^(J~}QN~$5kKQ!h<)`H`sK0H6ODvM&{9X+<8{*}@rlcDD^M5ti+`4kdT`eZK z)V~_ci7jvcU+Fqyd2WBKsS3;V5pb9tiHh{_Lh%f}@&a@QaCJjdM2E`Vli#qsWf zh0kpsU#9Z^C4M>A;ucvBHvN5@->cWWSaX{v#>DjFHeUypKD@0NugwFp3bNgRU;kfAFCCOzGB3^ZUiLL# zLzf|XuaM33+vfty9Sb)iIHK^UG|Ogxw60K z2Yb!3$k(1!6JL7b{d(6yLs3&rJdD84b3ZtJ!?PFtaOVe~c;}OE{oDQfRP@j98@T1d z%bs}|-X#p+e;aP_2k^fw5N?Z_kCz9+(NGwzLm>ol_s<-)c>l@~8e2^X%j%4V5C%dC z)ftV1=X7=i+S-CjS;$2s+&Kq{HdJiuyfCDY6-!uiIu}?Svyq9asInl~q!5duax|1g zH^FenEP_@c3qd#$usUY7h2<j+ZpTx*7E@k;DAh^ttArfOmtq|*15B-^JW5S>$p=RGe4q2K(4JVtb%QA^V!Bp z%%2aiYC#atg3$&*TPs5D#}qsqaZ~a8nz*6Eda0tfQ1uQ7ix#u)q=LBNMHer z1J?Wt0J*KLGeZo=IJkSF!HCrsi$sV4ItfJt;VAPtMADBHPm{9fb5Q6R1?k*_ol#XksWgHlDIGc~l*ru*Y-xbpEQuL_VEJ6%r?M z6LunZESo_2(M1p)&dB^GOvThYFm3baM?e{pG^&E2Hy8xD(fQqx)@T%5*w%Tv^TM`h z=Y0I45+{0obEK*B($4w1RTFrA!F-|ad`vx<0mNy-)Z;gVw`JPUe~_eXQULiL9X^3M zS*=Z@tm zL;QKe+4t|_la2A}j=HSbQkVUcQv3S1^`AWZh4*!R?!fl9eQ#H9=S%OthHZw{4{S@{ zJFq)t9~}mL`bSds_(0wsD$B_ox_e+>dNiHNr%Oxv#)l7~8}&)RF+bm9JYiC$&!;@~ z+>*hqIeXja=~W#Q1ssQkB@OW7Pvo%|gKi_z-((ImxBq)vC;A zz3cG*wuGeygv!i99Pa?CTX4H>5aD+Gb=7`+5NQuQDT8?4h`;2zN7ws{&@Y~Y?$dE^ zu*pe48#$BbmTp7TLa)4LxkE3mY4n-ZR}EQfiDIk$+D_xE7yO$f^k~z>lb;WSJ_(SP zzWc}T!1FE8%AVe&>#WAO<@YjN*aQu*j0Diu)ZeCUC->{|E}R7Ft_H`sb#Fmk_mg$R zWi=eb?ti7WsZP}AXygor-=-Y}z2pnEN`Ll~f5DX>)H{Y+{V>Z(hjH}7k9cyPu|T1Z zU4TWO)hPb#7M;N-P%DER{s9%G68OJM!`kEIlM1YD#$~>W>ksB-dYpUF7vI{IPj-}# w)*UCutke~{%@)iMKdHsnBII?4dhO8k_dn;20+wn)U%$kAlE44???-|E2VC%Va*?X;Lt!F*!S^xH4`v&POEIkIy8qBAR}j2Sns;?QHN7e$0_ z?*FKRpZim~5k>7D-uw4&Km$A9d@sD4H83^LhWEXjRq?K@`(fW2pK>lT zvm7kT>gv7lx2%D(zvarkSGTv-!0ltkr#^Z87w2hdclGs8Y(Mg`3uoW?lX)YLxZ#qS z#;mxo^s`&<;opb`ijDu82$SQ#u2tPa{2NihySf_tmY;jZHxK!4-;Il+o#%YM+ue`P zo_ohHfBqkRH=g0I54-cm5A|K~-M){U7)ASf&UvKv-j?bA-f;cAuf96-nd{o`yCWj-uc-3xRQvz$n^&E8=XouAru^frcRu>S{oVhH zRPe4A^_^<}UoM~i!wY{_cgq+5W8oWLte^hDcePUg3M;>Tv=`d&udoX5iQEMZyz$B# zuV`&wqkrnBEvrsnzHEM7`=t%7SF|i@tZQ#u*3n*HaL3}u)bmsro(6bU1)h$WC;yIJ ziRVu&=A7n+!1bpT)EaaBDOEbBEz{K6($SUja-4^u%EQs;M6eOM3$ieYAIZJcGh82H zk$(X^_NU`g&r)vV-nsvKc|+=_-2+#9nny>fMPUHj}cZSCof4s}{y zRrQD_MCIjAo$;%0e&vGyob&L|UfsU&g&noxpC45d=j$lhwQu3oR@B{Lk5~tdK?h^G zZ=okTP(58#(7~7kDJONI(~op0*-X#Rs9?fHp)CFGMVeEt#{|VOioqCvDkd6T(W~XiU8`YSsB!1Q||xrL}m|B~eLTPfqIE+fZKo6w|fx?MZ%B z)*q~_#qD)19V=SfS9Pr%tJCIC&Wuoo;C+-c zpZm_X7OrlY+1y%x=~;EFRx^rqrA}5>&!D(uofyM<+?ptBQCnS0DC(ffdM=c;Hc>B( zzsK`d)|seoL0x;@%J#ap#tvtrz2VsoiO15}c!7O|z7s{Ttk8gBa~w+BL*w0t^eV`fEIn~~#4@|~< zd!82BqK`Hj1kEcJ&{2GQzntbF~N4Xh3NP1@bj=yxuC!0ES!iLz$#{CQ5v9S3D^Q^P`fiYgVtF_cvw zmz7!7TwrfmB>PlZ>Q_mgRb2mRb7{Ult<7%_`kYUG7T%9OFJWwP zeWSW{MoWETYdi8Cm~G{kV`E%7iyVa)J-C05qn!U`<@iz-rdQ-ThxD-t`S!3F6Q89u z8-q2pT@+o>*xH<)Uze$G%#C5mc#YMz2emdRjMrGMIO#eW$HsJZGp#3ioP)`gd(vJt|RqgcW z)Vr;#*0K;)c+7+Qw-UWK2N{Ci=d@su>72@)tz?n627d8cdeb>oCf0|fE!$j>jF;`1 zjVJG$jhT%nV6SME7{d@th zB+3~=IrUbKD}~`C&FZy2scGMjUqa3*@({oAn68ukGC8hDZ>mEwzOFgrh85FyGS1eA zrtf5&>04vUC^iv-L-a{{ujl0bzobn+6zV-OQSU11eFAequ<4p~T>}q2 zx@OZhc4XNMDa`ZW{vAp=7g{;&Ygq#NvI@qIhmmm}{NlCrvO8tM&=ZdxjZRQM7E1PH zTyy&JbTjw5ItJKWU(E(fVTK3y?=b3dpVebVW=&xw)DPAne;;_oXKDXZb=VQ=fZTC7 zfjYcob*OHwX>D)1itSBZ^TO558qm5jp4qrLC~Qv7h)Z+tNO~O3+9BB3yrzx}rF5+v zTR-m)}T2#!<;!7`OP!HZ5`DxhWZM zjq2{$)Jx@qX4VuDwmbg0|R(j7#AapQV+)wWnYh4syEp2=SiZ>XD0&q9(oE zAy``_<9M>w!1MljtWdf<7MQ*53-x3l8HZ8S^IofGb?dCwhIH6@cg?m(b6!Jg8`)I%9v|yaC<0kNus>*l(#EaUQJy)4_?!Cm#PsC zrYt&|3(5ALKv@G=hlcUp^?`F&w`RIJm)JUDTPW-DM7>U;tT9$ruB1eZ`*E-w-V7vO zOKlcs=&HE4y>_yY<&wk(b++@!`@J)Y{$YR%KWC4$@7lYnO4R= z*W|7rRKl|j5|5?RxUrObTOpazVMqFQEY?4gbH;)9k>bx$)>V3`Lle7;$;f|VC_k!U zl5N+{BiFQ&^*Q8R0I&EgZ82HJsZ0-C&is9#^{wH9l}i-O_2B;H`DTwAlXLc}x~9Z~ zP|3Kyl4oC#cr0Bp8Pj4VO;=^KHP^-7b2y!NFjQ0esyEtyw6*J`f=Z?k;+ zw>GP0!>N!QN2j67as9$L>UF6ZtxIiYW7F%Qob!Bf?%z{nzn#m;bu>~*CpGZygv4v< zJFh45*JuZ>muacqvjxem0bu zY>U$<^YOUMj{3T`^h`Sr(baj)p7|_bGpvy8ucuSq-je0znx-rL*KF>gP;RoGXHf2M ztlT9nX;)KZ>qaunt@-umfqGS zZ0%x|CC9SleI5d8NN{75#des;Le%lK`s zVEYsFlYhR<=GI(1I*#8(`8|9xPP$cD`zh-g%F;q%Y>-uXNw3NDE-&thr;+q~pru@& zoZu-d;L)3Snkm-rfsc#D=Zmdu{uPdM2IhZPqvJ1|j?d-{410>JoNbi#?L(Wi!K3t+ zMtbZ4D@si2vD5xK7teXE)tNS(6_Q?5bTW=LmZ}&(2T8_J|0Yek(pfdKG$YH4Tt5-y zHG53*$R3q`59u38|8HFHPUyIt>ty;Xni?{VfhQt;1Eg(wEzi6ptIFtJz@xS{n>ReL zv0!K3*-2X;t{F*&1VoO*Y})1DgACEabX&SEqZ1)5D@mdHZ9~p#_{3xBYz$!eP8EGH zJAIDy(@D=T9sM{_H`OtjUi$mf>XdJ5ufabKQb_Ti=4S=Uco(G<-Cv+BQ2F#I&+>L+#VDW56rGUeSliw-#!M z%A!$GxwOW=Do5vGS--e)?7XTT3oMf|2)p4gR?a%^tDGA_)ETV@CxJJClfexj>x}3Y za3**wcsBUoue_066s|7@H*)_m@Z;e3z}vy^gP#O{34RLvHFyWO5BxOv2XHgk8yW8e zb>{rDU?sQ(90Gn0oCvDiGeDKQ1iY7P)$KkoUoV_2=EOpGPPunS^W~gGFX!a>vF=2= zo}nGZ{VLX1)1eCJjDQmY&JTE6z*($C)q8Y$H>dBVG`>H3nu^b?%0}jKUtvZn$}(0) zGr>x57O42UQ_;qG;J3KG2yE{b-ALV{&vc76+z;O0ExPR~@ZoOJ4L<}YmqoWoZ?nsy zkM*FwUn+|}dKCB&I2`;%S#;CMAi{lYIoPi}y6zhAC{XfURUX~61Kd;|-S`Cf6!-rV z{5JRt@ZZ3F;2y9Svj0zcwEh_InC{VaBf-Y*QC4-j1zZOHBe)9u0(dR>1b8d>6Yx&( z*(l212mS#3GWa9#8{m(@UEqI#Pl9U4r^EI4!RNXEU*J!{pMyUGUjttN-vAjSv;E4V z=;z=#Q2gk|$_DJkpeV@J;`7^Vr___F@+@o*1kiyn_@=JI) zSO#j$><+#kJOmsD_5?LX^#Z4Yhk`Re`e*hmkp7viVB8taNv4XZKU4*cfW|_@q2r;W zph_p#8hHE}+f<}{6eLHp`-P2?UoUy9RsTV$AY85!Jx*X<3ZNt(NNHr zJ&Ll1Kqo*dU$Tgfj`iZt-4@r&81hm1V?mWa4pjLkfhwPI$CW=7RQc0Dm46CY1D*<= z3!V;EursTOrbCiRdXR2(ZwxdNl8iaI{Mp--JBLdaw0f?+aPr{fI2%;^$ksmqF5r3$ zxCoRSx-Y#h<$49E^p^x|0~sH)6?_$N1h%KpHyTf?sU{IvPpeJf+16;}8te3>Imw@~ zO}RN(>9kHzT@_Z4pXQL2-~f<0Cp#Ey0*8Z_fEA3i735kG4Tc8A_N=kbpRG+XuKGZ? zj-+RW7I=GrtuBxLF`t`zh|v5gTTq~z$Mf;kq*s1xQ_)Q)fHyk+anx09Fw)gadH8d$ z#q;=h$m8~q$6YRuF(Ho;E)U7+&#|WBKA7U(KuF;mj_2%HkN#X~%AGM)d{U1)Ny~C2 z+67Jn9|M;DDAu7rlUZDcbuRC7U0T_kKP#DX=O(#~$|1F-!V1!= zUMs<)!A5Wxc!|qnJY}lS4TYw}W&1OXDJ;W>Wc#%`zPTn2OIK_Tk>{!1oc- z%68X*lIaFe{r4tt5U756T(}+y{yq06fVY6^eax5HdEiFy!{BY;N>Kdjx8naOcsth{ z!B2o+06zt445{ELug00dk*r5^%lomBDo6dJTJQ{LB&jN0yvC!x(Z%o_8|&7e|4X@d zKT4F;?Y~iubow1oa{nhd7i6BMe6{g~P#W^%*{j6)vwJDGm*J8z$IadP8SRBn*FOf; zkA4E40{#qCJHG&)12XStYr&Vm7VuY~=8#{5*Ml#EtSh7c20sVB3O)e-7W_KMdLjEX z_&e~wKE*vud^wy zN7;!#JC}0j=(u#>tC^j=NqMR_1D30I3RH`A2c^$Lzze`$U_E#!xC%TB{5!A$R9}1_ z_!+Pdcn`?K*X%!IwoK-E)a9>w*)fk%V6dM@j7{dSU(CcT)XwYIeA+vXl8UB1)%6)^%W!@Z8PyVv^mEZ)h$(8pZ z_(k5v_jBK$BTKn6Wn4x_Lb82@7I>tKR#3WV17+hGP&U3Al#O2j)`C}pvhk}y>0&K- zBX|wC5xf?>3(SJs!RtZU_(#CU!5cvBuhxUCeVq;b8oY(;-+&uIZvzvlgVv(5b=ke_ zztG;#b9&3!`a4C2v z*bd$Ws$YK=ycygAehmB^_*rl(cprE#D0{dMls)_-_+4;2Siwrblk7t4(32pu3$qig z%Vi(qp_z++DCnk&zDW3uw_XQFazy?fJ2DZ7^D2FxIPUW25Oz(m;4m^B7^Cp zmTP~GDCN!+DZU4!G8IO`D}9UtRqyfOd~gD&J~0uz8sr;H%FtYX5u`PS%9scFwyPzL zKg*L_-zUpi1i!|s^T0}QDSO~iU@d#yS>ST+YyDpD$~lI7HD;U)Er)dN+jkvl{8=0p zi2PR2zG02~#o7aY)u#!RjxGgH23LW~U%FcaUdDAD*bc4+JHTte%RygHjb-YK(u#Dd zy`uW6)-uyvyUC{f*_squ@Sz)^auseSFWKwgyF7C?sxfF+AHR;Csf2`b$d|-;L3-8U zV_+rtad15N373y-OtQ^^a<=BrvJ_v-eZ%oBifzrGFUhSplD4*!v?_ZScs%$op!&&U zpyYc3^!kw;BCYFAb9pxt@6V5<;&Ua3aIY3p_@U#a&w(G{`p2N^r8d!w{yf*S!JmR! z55E9v-`c>B>VIBAUodG*Xz<-fByRZWtT@3{RSLMT9u_TU*TGI@T!X+ zMxNTODgV|uZ?&U8Gg4fy-FVJoZJ@gQGaM;*owXAnrPp4d@;wyPczhVB`MCmI z0QLbT$q}F*L(f5;xlk3PJ;=R~-`gl3e|{sy%HM|+U}MZtE{}`iw(;jFQc*)lo0M;u zOUrlws%^%CQ^E0|+GJw)XuZ}+r*XX;oDOOqt@fyh+90iYkAd#sw{IKu4}bn4#f;}e zvVY7b59#DgmzTztSx(kk?)ftbDR(|WoXN3dF6mXr3qk4N!=M{WK*?MW&H)=hzaG(k zU-OZk1!;Y9j4MaH{`^4-xqV3LuhsF7b7`L?+Mf$ZxibPvO&5;$A=i*r zNgF8m=UZx<$*h;XWei}4qP4R^f7Tre{yEo>SQq}iesNpB-IY`A(yGt-ckLZ~3tue;GN6*chW!#g_6#f}r+00i! z)pm!=OJlO0^$dvX;@^uGugjy3r!G$G-)R@Ofq!vnbNg2R9=dqGyIoqpXO?XKU2^e! z_qepVI{Wv)snA0CYvLb}RyOoQQ1<;J$E!7q$k$o+>EG4n_6JG(e9`gn>=x8I@fV=x ztY3rnTuYYn8?H|T{~J_WyaJvBz6xr7d=1Qk{{wywl-+Ixf5-K9Q29L&@L_Nt*V->k z=BZ-^EB@T`FFk|RSbjR~UkeTb&xAwvIfR|xIP6pH>g{tU_x-!pRQwKC{cQ)N(7lI$ zuF5z6uKyhhN@tQ!V~?)Y|M=$KJ-0g?lrH;#ng@94=+-+&fR}UKAG{V6-$y~^^C@s3 z*A?zL-6Sk`1b5WmK7jn%vud9@8@dS6Gvy)lN#Fmh9uG6X_;;O*i5hGO$3qX;Z}RWW zbrmQ(9|~$bIRP91N)EN#2(GnG8wD;1xD*`CbsabcYz(ORWGvU3qsD{lz>`4LOZX4q zL~s*03H)rpyTK`3e;zy;{1P|~{AW;dNcX33{Ybd~Siq;iQ@Q_ba60&dfIk9faQ#bA z_0ir)_^&j^SC}H+?P!%Ue<9ws5MlsZwyAlk(94z)jKNVU4wL$BlEzm>IGtkRWZiAwK|al?7S3e3x{t*lU5bR>|JQ+?-{^eS;Z(Bld8KrY$_2VtydL@r<|p%}zq>K# zK~VFKox2kbg3@0LG4+8Au>q2Z*lP(vH62(ol# z3|1RTRy&uxAhhpQRscAMG`CtAUG$G;<=DC1{h^!_6Xkr6a(c4pccxatZxJ45Y;Z_gs-?_*-!DQ8!J&E(vl97QV zYKFvP>59pyZ)4_E`?G=vBjY-CI>J^D?%#RHxYJ}T@JA#Ww<6yH_{3xB)DOhWcp2+) zx%qM$pZm76X#9lS`O{?lJJk-;)j0_MsgD0WpE@?M0d_W1)7cNwdg|93KJi#OYX|0! zxQ_Y=UOB2iE3agn_2+|WpY1_*n@3gF*%b2`ll>t40b1WOdu8wL!bKk3zvoca`*;B2 z^h8-*^#@p3R--0m!W5UW|II$VN3)ex#COsllIHg{H8aT=ItEQ%8NHUmkp`8 zlf0|yWm}A0)P3I}e((B~pd+PMljWu7TIm;%_I2nQuD==5OEzxhrFT9>5RKdH`z!mZ zS(5n``io+nlpn7%`rNa5%VZr#Ms(|_m5sdgD4nskdQ08|>nDDWI}2M;nfASk_MZx0 z_2B+Jmo%RbvLaPEXCqxdC4BSz2qu{%>JZYQuu~*rsfp$i=hAjlX5!>^Nnv zr_A-_@wJ40q^C|i+>=fRkzRZ4R<8dw!6Q3N@*M0p3#M0_*K5^i1o~zi7NXY+cnKnT zql8Z`$@w@kj)F(&Esf~|oyFs(*}U5Dz}h{3jcuE!Eli zj^x$ziAM4ezwxO3l@nEo-jLq(hDu|-CG}!+ zWHSEkeCe3Jl04E&SL<$eJvHpf^!&iW66&5B65Dm`8%p)nv!`-+l-|<(Iqkaba4%JT zqHWGYzSB&;xA7@;s$?Y(@f(k|Ptul>cCGrTxMci+_>{6XO7i`sY`QT#1S(7D?R@mM z<@nI9Z{ZgzgT5xhFJ4P;ZJe|})5-r&_ADQH3fOQQc;?;X^Hs4u$9|z?&&|~H8A$0Z zjn(y?9H(up*%9O$5liQMYxLM>@+JLAjn8e0Bx`SY^`bz$mcE#*=1;1tV}r?B8%D3B ztRF&`gNFuPCS{$FFY80dISPL9TKYeSthVl%rxzy#J@>M3A+mnZWG&&}ssR}X!Ye*Y ztMNhWi2?EW?bg!qw}m!-n-oe!@?OP`_s(rMEQJ7Ob1&Im*@|CVw){jgQKeJi02s?XO-gBL79mKYCcO zE0vQoC%5kF1CM+es1BCS>cEr~*P+>q7`H)T+@HhWm8})c7H?h;`}f1tPv3UC z;kbmqt5>OCExh8hv{uJ=axAiTSi^!@;iDehzZWCtuT9Rpc9`JWVH5II!zUg~XZ?k# zHnc;2f3Z5`;yHKsXYzGrZDDmBL?=`@(S!T9mO8ed5YGqlOA-6JQh!-X{a%8^W9h68 z?_@iey*wFYOxjBwGHx~*V+nJeLULBZcRM6LOKW3OQcitk?TgYCP`ysuJVTM>ul z$oh)O>V1dBKC&dIzI&bupLi_YpHrWGc&4r}*Ms|)#|J$QA0FCV`jmt@bvoN_L&m+3 z_$;l~Hp(EW&knA;sz)2cdmgP^{d;)-i+uz#USKjNe5Oc;{ixG3&^i)Z8XKpN%82kIOIXdVe%IYeIuD^~K>52x4}hJ#2yn(OmJdX=H^Cz*b^-i2^a6M5+i%R2BeyLjJjRDp!#*wu{gzZqoEGr&SWbx$JaMEJyG=}h-Y z8@9Fgfy$h+V+mh$%`ohR#Aj)X$*Jd9%CxI;njP;5aq2ixQH*he(+==@mRWIGIrG$oy{FKCTytmqSbnE|F$CI6|sytA92aSOE&!w zaxSf8Jr9?qw=sd~Htut*OXvf>UnTFijH;1ButtzY}YpYVzC-Y3*}3gHH;y zHhL%5KBo7c$NS1Bb8-c16%iQ z4?5scMI2a~^tjh_knr!Qe$<=vYape!G`7b%B<@G~`^^LIANk|FofGL(3$^d7q+dY# zexyG#b_s{k%bXRa9r+1}2H*aB# zvzgi%ED7e5XfeP2`LDG`^t|;R^R%` z7m2><@IEZ`9k{;HlkXs*_gi!->HS%@RQ#+@{Xn*^@DN)d)$d#6IUM}9%Uf;naVYnV zs6T5~+y~4ac-W6b-vOtA-vuT2Ga&kk{uA`yJbQmCeR=z@??KcbHbef5SSmha#`xy^ zKmpDdmfGQ0VGaA%D=K3g>&JPy(|XVCPny&%Z>-n180L5fEsr{1fCCG2-bqU%gr`{ z^ke6fK)#KP}*w?cB9+(KRqBl1C)EeAgb zN{9EPqU)sl`?x*{ydTu~`33MSP~+3QaQz|hpSUl3`69?z8hr`Wg!5%kZSxiIYH$b0 z7!W-O-T{6Uls$b7q<=DhvXke--Ql`PK0V8 zeaouvi-$rZAf-7`?}8k^_o<`%`i@&Zn$$MlFTqYy_;XLG`0Ui-+}q(eqv$`7uP491 z2fh#dJ~#kWJ=ITjE!+43s4?e9;7ssmU=~!m>%kYfz8U-l_;FBtcZGPB^((IZ_nL#F zsxXobKz{j5k#B+inz0D|@q5shr+B6tv!}(x`SV7p_^eWQ?x}Ap{GQK}`+$dZ^W%H( zZqYwX;rjhttFL_k^lk82bR++En;~zjJ!vO@HYgRJGwKJ=en_DTUiFuupmZ?|)R=Vw zcp5kyoDPlvXMv-@1>k5<{d+9f2#yCercDGHx1&km6W|n(F*iCH{5d!c9EMD%fTw_` zgXe(KHDgOOgKNf?hLt>AEZ;%ur?Lt8ZfJ$%<8Kr?p5pY~-+h0o z8Ab~}jVlA=F`XI34^XD0{dAls$YJls#+)We<0OtjnS;pys&GgHM55!S93jf-i#G zzyQa9w0xF{@Vn3JJERP&#UCVgYCvW)m!2B@XAiSuP@0t-}Nu?`LiR% z`Q8kCd@GRk_49m^%b(>)#cR&2q@Lw-OLe;nR9nf{)(lX-wp2Ga)`Qn`eKGhEumfBNUJZT}%=zhQ zM6Z*$D;;)*xa^p@;L_rRn2 z$Ujykct5B$ul!@p1igQ(r0*W>6}|r+$>-mnr?40wl6L)cS#*QOa{OOiud)35HF*t$ipMaVNo^yH0H`n=)#uV?{Xbo}xeRL{b z*Z1U}Y*yh__|)%S1E+&(FV$1mT5tRhxH4R8J*xQY!QXMe0`EZi``fdaZW&YwRv*dj z-yNs0U>}k?c@te|+$t}RuGhGANV)QrK5{ydUHSLHsrbEZihJtU3cVfA95*f~t$&wW zJZ)c>*8BF5Z2lc<@%B0fzs+i|DtOdhLmls-$aY6uKk3oG`z-D+=tOvAPoqJ}HU?BZ z$AQ`pj0YEh^3Qb%I2rV7>x(EuZCM57`wNoX{yk=K-zuk&hsrz^RGFu{Jhf(D4Egy) zYXkqTG3WC%xi+W?dCUoU%mrm9XM?gk*}+6`A=m2Xi$TpZ@(Xq$cs?lI;2$h28~hNs z78HLr;EmwLT(1X}pVr-VTz?j<2R{!sfZIT&+aBU2t!^SLmGHO^>A zK0MBXhC;&_O}t;;Tso~G<+COiC%wN$-s*$?U0}{;%eg1LD_lm|+Fxg|5B2kFxmKI9 z0Ys)YPst#Mh3&49oZ$ny7)I$0Glhi)`9axH3A9?~dM*JiEM{&I!R6qD9@C5LmL5+>V zlfkcmvT31g;z2Oyw@E%Qs%QnAw}|2sT=NFzH_Ub;RG+yhPt*Jp(Ih2Vd1zlwQR!SC-DCdM}J zcS>dYcRj_+l%KR@nYvb)KMG~)I$5UtsJ-2Is&@A8SyJfIhvZoJB6(EsHPvfGDXo7e zl0r+J)5>?6)|yJIzU|*xG zz;e<`|FU8EQPcWF_m!`304Tp|n!j@W^!+?RFdr(peVu>SpK{OrVawas9Z4Q41HU9L z@BZL1Tn_*TfdfJHTgjsO=~_F4qe0oP?pKHV^T1=dZ~pOYe_9#u{pJ5?1gXpq*TDGu z`bKxxJ$H)QDnMupv;*1=y#VcpDpAB#Xff0bZGg5yJE3Qx*P-6;V}A}!hn7JZXcP1R z^d$5gq_g#vP&Kp+%0POUpfl~ep;w`vERZUpsZcGn2HFBW1nq@hhkDZ>RnT;3DYORK z2t5Ej3B3UAhboUGA80Yu3~hk6LOY>np?y%Fe%KZyKVuEhT1aP9AAp{LUWWQG@eGG* zpjt@hJ8y^dH>CGKuR=XBj!{rG)CkE~wn00g7oh!6KL)8$&~#`ilz}!t+n}A0&JHHS zn}lO}js2~hEbPTN^?|1P($oASe1btpxP%3wa5m|LyBHjWkMN*RIEOk2&+YAT3GJop zr)U%5kI|`c3HlJup+3SFky&^rB>W@)2!9{Sy)Be`WhnQLq1@kxa{n0kf6s#4SrAJW|tQDx=wY?#CDiA-kpHR>e_Dv|AM(2>=K9Q4{Z z)a(8rx1Og;?yrUV4-N9&AM*cW&>PQRTsnMqIUEt>d@AVSqQEye)Z_l3w|heUM~8ey z1UVlJ_4sn&=UJ!AcYLtl(LuiZLw&9Z_wNb$Qw^8?H$kq;f?Qt?>3$H>Js;$_DU?4n zl=roe{Z?~HK0E9C#R(4I3wzNw(cYl3`fYsVnhFM}MbLiwvh z`Kh3v+d}@oGy4p3Tp8|Hg!a?3GTF`VgB-g;d;K=Z^I*`^>L3@-QC#|yL%!b$@;wsD zzbur0L*P3%)VEi#-}{67GeZ2(klzI%|GuI9z82E=H-77%;rgB+Z#vkoKCo6j9t`F8 z4{{9-`P>om9UaP970SOTlz&~w|LLHoRYA`0h4Ow7>U(t1*Zff4i=n)x(C&4iyzhnb z*y}sFE(q!F2z-M>IlDr;ej@1mhR~iThx$Do+S&fbVgC?+OW+?Jn{g;U@ze*QCimPZY~{K%KzGvwdX)h*<&E*|yaq7s}=_Sb=4zMhgl zh5Vj>OMd=I`Ca+hO09EJS@Guw6;UK)xmW2c$uC`nkdkcIvEra(w=c0q=Gj?+n^oLPG~puEc62ODzqQcJBLb0?-Z*c{_c+ZJ8F$! z2FgMkpiR(LNM}9dWAjPq8R$7^IJKDwO^0~b6172Vq4f~&EcE^%+78Lj;p5OA=p~3} z-_8;1K>BwT#Pipv23icshs_#@=aJ6;ApE&Xg}1C7N~^qvmQ-_ zsv-H9Sq3#iJQHvmoedy=A1rzRdKh{VdIowK+6S>OiUvW$p^4BuXerbHwLxnkd<93h zLk~fZL-?AF_ChZ~uR{_2xHp84(P$imug<6jk`Inrs2N%Vt%Ei~o1tyc4rnK|8+sOc z0oo7sWc=y}RYIensZcc}UyO}V7TN%9g&u&Ogr0$3hUD|392*-14Tt3aWI8ktS_(Bl z^3}K&S`Tf3wnL9Yd!W70OVI0(9_06i20~TPsnBAm8Io^_&Cm{LH}ov@0<<6M$9P={ z$*;pyXaUp+WuRi=h-fI?(f7qva4t0<8j-j+Zt^&VDe}wZ)5?wu)B1ZM?bKY_<|1kR zy^xlNCIdpg&tjv>*LxY%eJ_W;ef|@e4OVQ&%knAsEcek6%~9K zk*JT44}9Zu`jy@C6hEC=-4@r~-wSCc60ewVz-~EZZ!uXmfqhF>FI-3*26A+(g{YcX^hvW3A~B^x6bV`i#Vl7*ql!j zc)B8Ey#|J+8pw;i8z^BjpX^OZl{QZ!gzGr=? za-i?$NoNdJFCQ0p=yxWYUIcLRti829-O-_f=J26^qTPLb;G^#u-!{i*44w7p;{#u! z|83;Kdx{V5;!orgW%;kA7!-4?DijA4D6UkN12h(dSIYQM^Qxj5T%b4Kv%*b(bb| z;^P7j{mytc1)kjJxcWZB+mnwAJc+(m&da7$l;cP$(s+HEz2PV)G;z(b$2 z@@kIH=PA~HK26}I-x=?|1aIMof>uwTCh*e#%&wcOT)7?fb#3YRgTKW1<>Lb%eb45y zy~X*GV#l`Q(}q0IhK+&xHi;8%xS~|)IlcP(A$_tB=B3XSWp#Ym#e2Sq^g*lRs9}jZ z^2xt3l>%Sy;1V z59>V_ANUgeQ0FF8r+DSuk>l}ko@a8RA65{*@Rnimso0T;QSaSy{c0_VNW6LNi(#*E6-ea-49A1kV3vHgIL3q15UlT-dq znD4G^OSj9VNm0A>X##Je-^mXNwz8_Osktbhj}LtGJ1bK@LCnSqxlK1dP2i>P8Slo* z9B--hwol`Er_cv&94sH4dkzu5t(lW6%UqlKG=bN(wSUei z{|#kD_CWrANKZeswb%nLy?3x+I`Q{HTKb>0yZj-rF359~U_3r9@X+^+NB#*|vlLyY z`nbT8=y&n~pfM$O43N;7j|)8XyJXNa{wsQo*YOSgO{SasM6H+iWtDt8H>#PpM{)nj z1OvleI7j*4JMH$HZ~9-#OTX;e-#si^JJSCucl&qV!#%am-{9Z*b?uinv|iD&h}}cm z7`uwjJbCKW851-}6D+^t`S*?*T`K=>R`qCm+x*A4g<5p-NfRec8Goj!+uDaMz13itI5T4B&Fy_;TERv6>?I3KImu^})Kgdn~@ z5Vy!~Bv5hlS#Qrs+_RsGyOp?7e9sfN))FUBd>0`I+rv&laW@jjtBp=Uar)43bf*|! zzpuYV+%Je@dhQgI=bOac+9}58c?*I(S|V;P`-4(>))QxTn`BpcpC*nWs#8$hBgFkv zrx-8GCG08Ymx%jc#JyM|ZZms}Jtg9r**82^B5o{3$WYlSNX~lVUg;F$2GFJjZQ&)I>)`CQ;g@+dG1p6(>d?+ zO7Q9LL6@>6{hjAhdFt;vmy%Ow?Mm_K?>3j>)8A>HRzgnw{pC{qR)4$rt`dCud%(v@ zc?ChY^mk@Ujmi6nqf5AuWY=%`=+WPqQwZRGD^7l6hP$iIaq|0eRf#zHVc~J03x#>g zzsjv8;&u|ZwM3l!lGvDBn5TSVK&&Ne2;^cS3d~OuxDPIs@Ex{-M3JXfa$v?vR zLCJ-AMuV~M5^<>^{v4dLE#%WT_Vp$BwlEpl_vM9rpRdY|A%$`J9^34tFmCYB(sBB( zdQFMC>wD=-OT>+)W0s23cgBlK@afy&kCuqjx4Nb5OyA&^%2VIa(o8NC)?MGm+IUtN zr|(?XmEij^aZ^jg^+(Z|s0)R8>RZxMar$<&l$`n|^zssU>f22l2Mf#7H<`93DvZ-N ziKXhG?+a}XDCE;Ogcp{OMc@6^mWb0gc{GI!g?Z{*yTv8q^i5o;IDNZ@85Ye`->TWl zxv)Han>M-xpT0k1m@Jy7z7spUM4bNq>ZA}?7EsWQ|0-O6PO)e4yO!;w)tO=iyC<|$ zwB6W&$~S}lv#^RECqebomQ|-OUuGLTx7}OT(OzG0$KuD-cl@a=VIR~L&gKSjMQ^6( z+@45t6w4(y2WU>Jga$)uq2nQz6K>oc25L-KeVB&a{LE19o^>(A;WO1g8yN?VhbBN8 z!zMx+D4at7D9_4%_mEs^Puw~wT<>>AA*)an%}gJ{4jJeR14KX%b|Lx0ZKzFpp}rq NWgg!9_g$)i{|lSc%?AJg diff --git a/packages/MarkdownSharp.1.13.0.0/lib/35/MarkdownSharp.xml b/packages/MarkdownSharp.1.13.0.0/lib/35/MarkdownSharp.xml deleted file mode 100644 index b0c7706..0000000 --- a/packages/MarkdownSharp.1.13.0.0/lib/35/MarkdownSharp.xml +++ /dev/null @@ -1,433 +0,0 @@ - - - - MarkdownSharp - - - -

- when true, (most) bare plain URLs are auto-hyperlinked - WARNING: this is a significant deviation from the markdown spec - - - - - when true, RETURN becomes a literal newline - WARNING: this is a significant deviation from the markdown spec - - - - - use ">" for HTML output, or " />" for XHTML output - - - - - when true, problematic URL characters like [, ], (, and so forth will be encoded - WARNING: this is a significant deviation from the markdown spec - - - - - when false, email addresses will never be auto-linked - WARNING: this is a significant deviation from the markdown spec - - - - - when true, bold and italic require non-word characters on either side - WARNING: this is a significant deviation from the markdown spec - - - - - Markdown is a text-to-HTML conversion tool for web writers. - Markdown allows you to write using an easy-to-read, easy-to-write plain text format, - then convert it to structurally valid XHTML (or HTML). - - - - - maximum nested depth of [] and () supported by the transform; implementation detail - - - - - Tabs are automatically converted to spaces as part of the transform - this constant determines how "wide" those tabs become in spaces - - - - - Create a new Markdown instance using default options - - - - - Create a new Markdown instance and optionally load options from the supplied options parameter. - - - - - Create a new Markdown instance and optionally load options from a configuration - file. There they should be stored in the appSettings section, available options are: - - Markdown.StrictBoldItalic (true/false) - Markdown.EmptyElementSuffix (">" or " />" without the quotes) - Markdown.LinkEmails (true/false) - Markdown.AutoNewLines (true/false) - Markdown.AutoHyperlink (true/false) - Markdown.EncodeProblemUrlCharacters (true/false) - - - - - In the static constuctor we'll initialize what stays the same across all transforms. - - - - - Transforms the provided Markdown-formatted text to HTML; - see http://en.wikipedia.org/wiki/Markdown - - - The order in which other subs are called here is - essential. Link and image substitutions need to happen before - EscapeSpecialChars(), so that any *'s or _'s in the a - and img tags get encoded. - - - - - Perform transformations that form block-level tags like paragraphs, headers, and list items. - - - - - Perform transformations that occur *within* block-level tags like paragraphs, headers, and list items. - - - - - splits on two or more newlines, to form "paragraphs"; - each paragraph is then unhashed (if it is a hash) or wrapped in HTML p tag - - - - - Reusable pattern to match balanced [brackets]. See Friedl's - "Mastering Regular Expressions", 2nd Ed., pp. 328-331. - - - - - Reusable pattern to match balanced (parens). See Friedl's - "Mastering Regular Expressions", 2nd Ed., pp. 328-331. - - - - - Strips link definitions from text, stores the URLs and titles in hash references. - - - ^[id]: url "optional title" - - - - - derived pretty much verbatim from PHP Markdown - - - - - replaces any block-level HTML blocks with hash entries - - - - - returns an array of HTML tokens comprising the input string. Each token is - either a tag (possibly with nested, tags contained therein, such - as <a href="<MTFoo>">, or a run of text between tags. Each element of the - array is a two-element array; the first is either 'tag' or 'text'; the second is - the actual value. - - - - - Turn Markdown link shortcuts into HTML anchor tags - - - [link text](url "title") - [link text][id] - [id] - - - - - Turn Markdown image shortcuts into HTML img tags. - - - ![alt text][id] - ![alt text](url "optional title") - - - - - Turn Markdown headers into HTML header tags - - - Header 1 - ======== - - Header 2 - -------- - - # Header 1 - ## Header 2 - ## Header 2 with closing hashes ## - ... - ###### Header 6 - - - - - Turn Markdown horizontal rules into HTML hr tags - - - *** - * * * - --- - - - - - - - - - Turn Markdown lists into HTML ul and ol and li tags - - - - - Process the contents of a single ordered or unordered list, splitting it - into individual list items. - - - - - /// Turn Markdown 4-space indented code into HTML pre code blocks - - - - - Turn Markdown `code spans` into HTML code tags - - - - - Turn Markdown *italics* and **bold** into HTML strong and em tags - - - - - Turn markdown line breaks (two space at end of line) into HTML break tags - - - - - Turn Markdown > quoted blocks into HTML blockquote blocks - - - - - Turn angle-delimited URLs into HTML anchor tags - - - <http://www.example.com> - - - - - Remove one level of line-leading spaces - - - - - encodes email address randomly - roughly 10% raw, 45% hex, 45% dec - note that @ is always encoded and : never is - - - - - Encode/escape certain Markdown characters inside code blocks and spans where they are literals - - - - - Encode any ampersands (that aren't part of an HTML entity) and left or right angle brackets - - - - - Encodes any escaped characters such as \`, \*, \[ etc - - - - - swap back in all the special characters we've hidden - - - - - escapes Bold [ * ] and Italic [ _ ] characters - - - - - hex-encodes some unusual "problem" chars in URLs to avoid URL detection problems - - - - - Within tags -- meaning between < and > -- encode [\ ` * _] so they - don't conflict with their use in Markdown for code, italics and strong. - We're replacing each such character with its corresponding hash - value; this is likely overkill, but it should prevent us from colliding - with the escape values by accident. - - - - - convert all tabs to _tabWidth spaces; - standardizes line endings from DOS (CR LF) or Mac (CR) to UNIX (LF); - makes sure text ends with a couple of newlines; - removes any blank lines (only spaces) in the text - - - - - this is to emulate what's evailable in PHP - - - - - current version of MarkdownSharp; - see http://code.google.com/p/markdownsharp/ for the latest code or to contribute - - - - - Static constructor - - - In the static constuctor we'll initialize what stays the same across all transforms. - - - - - - Strips link definitions from text, stores the URLs and titles in hash references. - - Link defs are in the form: ^[id]: url "optional title" - - - - Hashify HTML blocks - - - - - These are all the transformations that form block-level - tags like paragraphs, headers, and list items. - - - - - These are all the transformations that occur *within* block-level - tags like paragraphs, headers, and list items. - - - - - - - - Process the contents of a single ordered or unordered list, splitting it - into individual list items. - - - - - Encode/escape certain characters inside Markdown code runs. - - - The point is that in code, these characters are literals, and lose their - special Markdown meanings. - - - - - Smart processing for ampersands and angle brackets that need to be encoded. - - - - - Swap back in all the special characters we've hidden. - - - - - Remove one level of line-leading tabs or spaces - - - - - This is to emulate what's evailable in PHP - - - - - - - - Calculate an MD5 hash of an arbitrary string - - - - - - - when true, (most) bare plain URLs are auto-hyperlinked - WARNING: this is a significant deviation from the markdown spec - - - - - when true, RETURN becomes a literal newline - WARNING: this is a significant deviation from the markdown spec - - - - - use ">" for HTML output, or " />" for XHTML output - - - - - when true, problematic URL characters like [, ], (, and so forth will be encoded - WARNING: this is a significant deviation from the markdown spec - - - - - when false, email addresses will never be auto-linked - WARNING: this is a significant deviation from the markdown spec - - - - - when true, bold and italic require non-word characters on either side - WARNING: this is a significant deviation from the markdown spec - - - - diff --git a/readme.html b/readme.html new file mode 100644 index 0000000..1983bf9 --- /dev/null +++ b/readme.html @@ -0,0 +1,179 @@ +

MarkdownWin

+ +
+ +

A Markdown editor and compiler with live-preview for Windows.

+ +

Download the binary by tapping right here.

+ +

I built this because MarkedApp isn't available for Windows. +Like MarkedApp, MarkdownWin will monitor a file for changes and keep the live preview +in sync with your file. You can use whatever editor you want.

+ +

We use MarkdownSharp to render the live preview.

+ +

Features

+ +
    +
  • Preview your Markdown file live, while you edit it.
  • +
  • Copy the HTML source to your clipboard with CTRL+C.
  • +
  • Print it with CTRL+P.
  • +
  • Float the preview window on top of other applications for easy viewing.
  • +
  • MarkdownWin also to be used as a Markdown build tool via its simple CLI interface:

    + +
    usage -in <inputPath> [-out <outputPath>] [-raw]
    +  -in:  Path to the markdown file
    +  -out: (Optional) Path to the output html file (uses <in>.html by default)
    +  -raw: (Optional) Don't stylize the output.
    +
  • +
+ +
+ +

Screenshot

+ +

Dev Requirements
+VS 2010, NuGet

+ +

Run psake.bat to build for release and update the /dist folder.

+ +

Notes

+ +

The icon was borrowed without permission from dashkards.com.

+ +

ICO created with converticon.com.

+ \ No newline at end of file diff --git a/src/MarkdownSharp/AssemblyInfo.cs b/src/MarkdownSharp/AssemblyInfo.cs new file mode 100644 index 0000000..c501d4a --- /dev/null +++ b/src/MarkdownSharp/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("MarkdownSharp")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("MarkdownSharp")] +[assembly: AssemblyCopyright("Copyright © 2010")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("82206d27-3b6e-4e1a-a971-8d8ff12f6044")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.007")] +[assembly: AssemblyFileVersion("1.007")] + +//For unit testing +[assembly: InternalsVisibleTo("MarkdownSharpTests")] \ No newline at end of file diff --git a/src/MarkdownSharp/Escapes.cs b/src/MarkdownSharp/Escapes.cs new file mode 100644 index 0000000..ba66f16 --- /dev/null +++ b/src/MarkdownSharp/Escapes.cs @@ -0,0 +1,164 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; + +namespace MarkdownSharp +{ + internal static class Escapes + { + private const string _escapeCharacters = @"\`*_{}[]()>#+-.!"; + private static readonly KeyValuePair[] _escapeTable; + private static readonly Regex _hashFinder; + + static Escapes() + { + _escapeTable = new KeyValuePair[_escapeCharacters.Length]; + string pattern = ""; + for (int i = 0; i < _escapeCharacters.Length; ++i) + { + char c = _escapeCharacters[i]; + string hash = c.ToString().GetHashCode().ToString(); + _escapeTable[i] = new KeyValuePair(c, hash); + + if (pattern != "") pattern += "|(" + hash + ")"; + else pattern += "(" + hash + ")"; + } + _hashFinder = new Regex(pattern, RegexOptions.Compiled | RegexOptions.ExplicitCapture); + } + + /// + /// Gets the escape code for a single character + /// + public static string get(char c) + { + foreach(var pair in _escapeTable) + if (pair.Key == c) + return pair.Value; + throw new IndexOutOfRangeException("The requested character can not be escaped"); + } + + /// + /// Gets the character that a hash refers to + /// + private static char getInverse(string s) + { + foreach (var pair in _escapeTable) + if (pair.Value == s) + return pair.Key; + throw new IndexOutOfRangeException("The requested hash can not be found"); + } + + /// + /// Encodes any escaped characters such as \`, \*, \[ etc + /// + public static string BackslashEscapes(string text) + { + int len = text.Length, first = 0, i = 0; + var sb = new StringBuilder(len); + while (i < len) + { + if (text[i] == '\\' && i + 1 < len && Contains(_escapeCharacters, text[i + 1])) + { + sb.Append(text, first, i - first); + sb.Append(get(text[++i])); + first = ++i; + } + else ++i; + } + if (first == 0) return text; + sb.Append(text, first, i - first); + return sb.ToString(); + } + + /// + /// Encodes Bold [ * ] and Italic [ _ ] characters + /// + public static string BoldItalic(string text) + { + int len = text.Length, first = 0, i = 0; + var sb = new StringBuilder(len); + while (i < len) + { + if ('*' == text[i]) + { + sb.Append(text, first, i - first); + sb.Append(get('*')); + first = ++i; + } + else if ('_' == text[i]) + { + sb.Append(text, first, i - first); + sb.Append(get('_')); + first = ++i; + } + else ++i; + } + if (first == 0) return text; + sb.Append(text, first, i - first); + return sb.ToString(); + } + + /// + /// Encodes all chars of the second parameter. + /// + public static string Escape(string text, string escapes) + { + int len = text.Length, first = 0, i = 0; + var sb = new StringBuilder(len); + while (i < len) + { + if (Contains(escapes, text[i])) + { + sb.Append(text, first, i - first); + sb.Append(get(text[i])); + first = ++i; + } + else ++i; + } + if (first == 0) return text; + sb.Append(text, first, i - first); + return sb.ToString(); + } + + /// + /// encodes problem characters in URLs, such as + /// * _ and optionally ' () [] : + /// this is to avoid problems with markup later + /// + public static string ProblemUrlChars(string url) + { + url = url.Replace("*", "%2A"); + url = url.Replace("_", "%5F"); + url = url.Replace("'", "%27"); + url = url.Replace("(", "%28"); + url = url.Replace(")", "%29"); + url = url.Replace("[", "%5B"); + url = url.Replace("]", "%5D"); + if (url.Length > 7 && Contains(url.Substring(7), ':')) + { + // replace any colons in the body of the URL that are NOT followed by 2 or more numbers + url = url.Substring(0, 7) + Regex.Replace(url.Substring(7), @":(?!\d{2,})", "%3A"); + } + + return url; + } + + private static bool Contains(string s, char c) + { + int len = s.Length; + for (int i = 0; i < len; ++i) + if (s[i] == c) + return true; + return false; + } + + /// + /// swap back in all the special characters we've hidden + /// + public static string Unescape(string text) + { + return _hashFinder.Replace(text, match => getInverse(match.Value).ToString()); + } + } +} \ No newline at end of file diff --git a/src/MarkdownSharp/Markdown.cs b/src/MarkdownSharp/Markdown.cs new file mode 100644 index 0000000..5f9970c --- /dev/null +++ b/src/MarkdownSharp/Markdown.cs @@ -0,0 +1,1725 @@ +/* + * MarkdownSharp + * ------------- + * a C# Markdown processor + * + * Markdown is a text-to-HTML conversion tool for web writers + * Copyright (c) 2004 John Gruber + * http://daringfireball.net/projects/markdown/ + * + * Markdown.NET + * Copyright (c) 2004-2009 Milan Negovan + * http://www.aspnetresources.com + * http://aspnetresources.com/blog/markdown_announced.aspx + * + * MarkdownSharp + * Copyright (c) 2009-2010 Jeff Atwood + * http://stackoverflow.com + * http://www.codinghorror.com/blog/ + * http://code.google.com/p/markdownsharp/ + * + * History: Milan ported the Markdown processor to C#. He granted license to me so I can open source it + * and let the community contribute to and improve MarkdownSharp. + * + */ + +#region Copyright and license + +/* + +Copyright (c) 2009 - 2010 Jeff Atwood + +http://www.opensource.org/licenses/mit-license.php + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Copyright (c) 2003-2004 John Gruber + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +* Neither the name "Markdown" nor the names of its contributors may + be used to endorse or promote products derived from this software + without specific prior written permission. + +This software is provided by the copyright holders and contributors "as +is" and any express or implied warranties, including, but not limited +to, the implied warranties of merchantability and fitness for a +particular purpose are disclaimed. In no event shall the copyright owner +or contributors be liable for any direct, indirect, incidental, special, +exemplary, or consequential damages (including, but not limited to, +procurement of substitute goods or services; loss of use, data, or +profits; or business interruption) however caused and on any theory of +liability, whether in contract, strict liability, or tort (including +negligence or otherwise) arising in any way out of the use of this +software, even if advised of the possibility of such damage. +*/ + +#endregion + +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Text; +using System.Text.RegularExpressions; + +namespace MarkdownSharp +{ + + public class MarkdownOptions + { + /// + /// when true, (most) bare plain URLs are auto-hyperlinked + /// WARNING: this is a significant deviation from the markdown spec + /// + public bool AutoHyperlink { get; set; } + /// + /// when true, RETURN becomes a literal newline + /// WARNING: this is a significant deviation from the markdown spec + /// + public bool AutoNewlines { get; set; } + /// + /// use ">" for HTML output, or " />" for XHTML output + /// + public string EmptyElementSuffix { get; set; } + /// + /// when true, problematic URL characters like [, ], (, and so forth will be encoded + /// WARNING: this is a significant deviation from the markdown spec + /// + public bool EncodeProblemUrlCharacters { get; set; } + /// + /// when false, email addresses will never be auto-linked + /// WARNING: this is a significant deviation from the markdown spec + /// + public bool LinkEmails { get; set; } + /// + /// when true, bold and italic require non-word characters on either side + /// WARNING: this is a significant deviation from the markdown spec + /// + public bool StrictBoldItalic { get; set; } + } + + + /// + /// Markdown is a text-to-HTML conversion tool for web writers. + /// Markdown allows you to write using an easy-to-read, easy-to-write plain text format, + /// then convert it to structurally valid XHTML (or HTML). + /// + public class Markdown + { + private const string _version = "1.13"; + + #region Constructors and Options + + /// + /// Create a new Markdown instance using default options + /// + public Markdown() : this(false) + { + } + + /// + /// Create a new Markdown instance and optionally load options from a configuration + /// file. There they should be stored in the appSettings section, available options are: + /// + /// Markdown.StrictBoldItalic (true/false) + /// Markdown.EmptyElementSuffix (">" or " />" without the quotes) + /// Markdown.LinkEmails (true/false) + /// Markdown.AutoNewLines (true/false) + /// Markdown.AutoHyperlink (true/false) + /// Markdown.EncodeProblemUrlCharacters (true/false) + /// + /// + public Markdown(bool loadOptionsFromConfigFile) + { + if (!loadOptionsFromConfigFile) return; + + var settings = ConfigurationManager.AppSettings; + foreach (string key in settings.Keys) + { + switch (key) + { + case "Markdown.AutoHyperlink": + _autoHyperlink = Convert.ToBoolean(settings[key]); + break; + case "Markdown.AutoNewlines": + _autoNewlines = Convert.ToBoolean(settings[key]); + break; + case "Markdown.EmptyElementSuffix": + _emptyElementSuffix = settings[key]; + break; + case "Markdown.EncodeProblemUrlCharacters": + _encodeProblemUrlCharacters = Convert.ToBoolean(settings[key]); + break; + case "Markdown.LinkEmails": + _linkEmails = Convert.ToBoolean(settings[key]); + break; + case "Markdown.StrictBoldItalic": + _strictBoldItalic = Convert.ToBoolean(settings[key]); + break; + } + } + } + + /// + /// Create a new Markdown instance and set the options from the MarkdownOptions object. + /// + public Markdown(MarkdownOptions options) + { + _autoHyperlink = options.AutoHyperlink; + _autoNewlines = options.AutoNewlines; + _emptyElementSuffix = options.EmptyElementSuffix; + _encodeProblemUrlCharacters = options.EncodeProblemUrlCharacters; + _linkEmails = options.LinkEmails; + _strictBoldItalic = options.StrictBoldItalic; + } + + + /// + /// use ">" for HTML output, or " />" for XHTML output + /// + public string EmptyElementSuffix + { + get { return _emptyElementSuffix; } + set { _emptyElementSuffix = value; } + } + private string _emptyElementSuffix = " />"; + + /// + /// when false, email addresses will never be auto-linked + /// WARNING: this is a significant deviation from the markdown spec + /// + public bool LinkEmails + { + get { return _linkEmails; } + set { _linkEmails = value; } + } + private bool _linkEmails = true; + + /// + /// when true, bold and italic require non-word characters on either side + /// WARNING: this is a significant deviation from the markdown spec + /// + public bool StrictBoldItalic + { + get { return _strictBoldItalic; } + set { _strictBoldItalic = value; } + } + private bool _strictBoldItalic = false; + + /// + /// when true, RETURN becomes a literal newline + /// WARNING: this is a significant deviation from the markdown spec + /// + public bool AutoNewLines + { + get { return _autoNewlines; } + set { _autoNewlines = value; } + } + private bool _autoNewlines = false; + + /// + /// when true, (most) bare plain URLs are auto-hyperlinked + /// WARNING: this is a significant deviation from the markdown spec + /// + public bool AutoHyperlink + { + get { return _autoHyperlink; } + set { _autoHyperlink = value; } + } + private bool _autoHyperlink = false; + + /// + /// when true, problematic URL characters like [, ], (, and so forth will be encoded + /// WARNING: this is a significant deviation from the markdown spec + /// + public bool EncodeProblemUrlCharacters + { + get { return _encodeProblemUrlCharacters; } + set { _encodeProblemUrlCharacters = value; } + } + private bool _encodeProblemUrlCharacters = false; + + #endregion + + private enum TokenType { Text, Tag } + + private struct Token + { + public Token(TokenType type, string value) + { + this.Type = type; + this.Value = value; + } + public TokenType Type; + public string Value; + } + + /// + /// maximum nested depth of [] and () supported by the transform; implementation detail + /// + private const int _nestDepth = 6; + + /// + /// Tabs are automatically converted to spaces as part of the transform + /// this constant determines how "wide" those tabs become in spaces + /// + private const int _tabWidth = 4; + + private const string _markerUL = @"[*+-]"; + private const string _markerOL = @"\d+[.]"; + + private static readonly Dictionary _escapeTable; + private static readonly Dictionary _invertedEscapeTable; + private static readonly Dictionary _backslashEscapeTable; + + private readonly Dictionary _urls = new Dictionary(); + private readonly Dictionary _titles = new Dictionary(); + private readonly Dictionary _htmlBlocks = new Dictionary(); + + private int _listLevel; + + /// + /// In the static constuctor we'll initialize what stays the same across all transforms. + /// + static Markdown() + { + // Table of hash values for escaped characters: + _escapeTable = new Dictionary(); + _invertedEscapeTable = new Dictionary(); + // Table of hash value for backslash escaped characters: + _backslashEscapeTable = new Dictionary(); + + string backslashPattern = ""; + + foreach (char c in @"\`*_{}[]()>#+-.!") + { + string key = c.ToString(); + string hash = GetHashKey(key); + _escapeTable.Add(key, hash); + _invertedEscapeTable.Add(hash, key); + _backslashEscapeTable.Add(@"\" + key, hash); + backslashPattern += Regex.Escape(@"\" + key) + "|"; + } + + _backslashEscapes = new Regex(backslashPattern.Substring(0, backslashPattern.Length - 1), RegexOptions.Compiled); + } + + /// + /// current version of MarkdownSharp; + /// see http://code.google.com/p/markdownsharp/ for the latest code or to contribute + /// + public string Version + { + get { return _version; } + } + + /// + /// Transforms the provided Markdown-formatted text to HTML; + /// see http://en.wikipedia.org/wiki/Markdown + /// + /// + /// The order in which other subs are called here is + /// essential. Link and image substitutions need to happen before + /// EscapeSpecialChars(), so that any *'s or _'s in the a + /// and img tags get encoded. + /// + public string Transform(string text) + { + if (String.IsNullOrEmpty(text)) return ""; + + Setup(); + + text = Normalize(text); + + text = HashHTMLBlocks(text); + text = StripLinkDefinitions(text); + text = RunBlockGamut(text); + text = Unescape(text); + + Cleanup(); + + return text + "\n"; + } + + + /// + /// Perform transformations that form block-level tags like paragraphs, headers, and list items. + /// + private string RunBlockGamut(string text) + { + text = DoHeaders(text); + text = DoHorizontalRules(text); + text = DoLists(text); + text = DoCodeBlocks(text); + text = DoBlockQuotes(text); + + // We already ran HashHTMLBlocks() before, in Markdown(), but that + // was to escape raw HTML in the original Markdown source. This time, + // we're escaping the markup we've just created, so that we don't wrap + //

tags around block-level tags. + text = HashHTMLBlocks(text); + + text = FormParagraphs(text); + + return text; + } + + + ///

+ /// Perform transformations that occur *within* block-level tags like paragraphs, headers, and list items. + /// + private string RunSpanGamut(string text) + { + text = DoCodeSpans(text); + text = EscapeSpecialCharsWithinTagAttributes(text); + text = EscapeBackslashes(text); + + // Images must come first, because ![foo][f] looks like an anchor. + text = DoImages(text); + text = DoAnchors(text); + + // Must come after DoAnchors(), because you can use < and > + // delimiters in inline links like [this](). + text = DoAutoLinks(text); + + text = EncodeAmpsAndAngles(text); + text = DoItalicsAndBold(text); + text = DoHardBreaks(text); + + return text; + } + + private static Regex _newlinesLeadingTrailing = new Regex(@"^\n+|\n+\z", RegexOptions.Compiled); + private static Regex _newlinesMultiple = new Regex(@"\n{2,}", RegexOptions.Compiled); + private static Regex _leadingWhitespace = new Regex(@"^[ ]*", RegexOptions.Compiled); + + /// + /// splits on two or more newlines, to form "paragraphs"; + /// each paragraph is then unhashed (if it is a hash) or wrapped in HTML p tag + /// + private string FormParagraphs(string text) + { + // split on two or more newlines + string[] grafs = _newlinesMultiple.Split(_newlinesLeadingTrailing.Replace(text, "")); + + for (int i = 0; i < grafs.Length; i++) + { + if (grafs[i].StartsWith("\x1A")) + { + // unhashify HTML blocks + grafs[i] = _htmlBlocks[grafs[i]]; + } + else + { + // do span level processing inside the block, then wrap result in

tags + grafs[i] = _leadingWhitespace.Replace(RunSpanGamut(grafs[i]), "

") + "

"; + } + } + + return string.Join("\n\n", grafs); + } + + + private void Setup() + { + // Clear the global hashes. If we don't clear these, you get conflicts + // from other articles when generating a page which contains more than + // one article (e.g. an index page that shows the N most recent + // articles): + _urls.Clear(); + _titles.Clear(); + _htmlBlocks.Clear(); + _listLevel = 0; + } + + private void Cleanup() + { + Setup(); + } + + private static string _nestedBracketsPattern; + + /// + /// Reusable pattern to match balanced [brackets]. See Friedl's + /// "Mastering Regular Expressions", 2nd Ed., pp. 328-331. + /// + private static string GetNestedBracketsPattern() + { + // in other words [this] and [this[also]] and [this[also[too]]] + // up to _nestDepth + if (_nestedBracketsPattern == null) + _nestedBracketsPattern = + RepeatString(@" + (?> # Atomic matching + [^\[\]]+ # Anything other than brackets + | + \[ + ", _nestDepth) + RepeatString( + @" \] + )*" + , _nestDepth); + return _nestedBracketsPattern; + } + + private static string _nestedParensPattern; + + /// + /// Reusable pattern to match balanced (parens). See Friedl's + /// "Mastering Regular Expressions", 2nd Ed., pp. 328-331. + /// + private static string GetNestedParensPattern() + { + // in other words (this) and (this(also)) and (this(also(too))) + // up to _nestDepth + if (_nestedParensPattern == null) + _nestedParensPattern = + RepeatString(@" + (?> # Atomic matching + [^()\s]+ # Anything other than parens or whitespace + | + \( + ", _nestDepth) + RepeatString( + @" \) + )*" + , _nestDepth); + return _nestedParensPattern; + } + + private static Regex _linkDef = new Regex(string.Format(@" + ^[ ]{{0,{0}}}\[(.+)\]: # id = $1 + [ ]* + \n? # maybe *one* newline + [ ]* + ? # url = $2 + [ ]* + \n? # maybe one newline + [ ]* + (?: + (?<=\s) # lookbehind for whitespace + [""(] + (.+?) # title = $3 + ["")] + [ ]* + )? # title is optional + (?:\n+|\Z)", _tabWidth - 1), RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled); + + /// + /// Strips link definitions from text, stores the URLs and titles in hash references. + /// + /// + /// ^[id]: url "optional title" + /// + private string StripLinkDefinitions(string text) + { + return _linkDef.Replace(text, new MatchEvaluator(LinkEvaluator)); + } + + private string LinkEvaluator(Match match) + { + string linkID = match.Groups[1].Value.ToLowerInvariant(); + _urls[linkID] = EncodeAmpsAndAngles(match.Groups[2].Value); + + if (match.Groups[3] != null && match.Groups[3].Length > 0) + _titles[linkID] = match.Groups[3].Value.Replace("\"", """); + + return ""; + } + + // compiling this monster regex results in worse performance. trust me. + private static Regex _blocksHtml = new Regex(GetBlockPattern(), RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace); + + + /// + /// derived pretty much verbatim from PHP Markdown + /// + private static string GetBlockPattern() + { + + // Hashify HTML blocks: + // We only want to do this for block-level HTML tags, such as headers, + // lists, and tables. That's because we still want to wrap

s around + // "paragraphs" that are wrapped in non-block-level tags, such as anchors, + // phrase emphasis, and spans. The list of tags we're looking for is + // hard-coded: + // + // * List "a" is made of tags which can be both inline or block-level. + // These will be treated block-level when the start tag is alone on + // its line, otherwise they're not matched here and will be taken as + // inline later. + // * List "b" is made of tags which are always block-level; + // + string blockTagsA = "ins|del"; + string blockTagsB = "p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|address|script|noscript|form|fieldset|iframe|math"; + + // Regular expression for the content of a block tag. + string attr = @" + (?> # optional tag attributes + \s # starts with whitespace + (?> + [^>""/]+ # text outside quotes + | + /+(?!>) # slash not followed by > + | + ""[^""]*"" # text inside double quotes (tolerate >) + | + '[^']*' # text inside single quotes (tolerate >) + )* + )? + "; + + string content = RepeatString(@" + (?> + [^<]+ # content without tag + | + <\2 # nested opening tag + " + attr + @" # attributes + (?> + /> + | + >", _nestDepth) + // end of opening tag + ".*?" + // last level nested tag content + RepeatString(@" + # closing nested tag + ) + | + <(?!/\2\s*> # other tags with a different name + ) + )*", _nestDepth); + + string content2 = content.Replace(@"\2", @"\3"); + + // First, look for nested blocks, e.g.: + //

+ //
+ // tags for inner block must be indented. + //
+ //
+ // + // The outermost tags must start at the left margin for this to match, and + // the inner nested divs must be indented. + // We need to do this before the next, more liberal match, because the next + // match will start at the first `
` and stop at the first `
`. + string pattern = @" + (?> + (?> + (?<=\n) # Starting after a blank line + | # or + \A\n? # the beginning of the doc + ) + ( # save in $1 + + # Match from `\n` to `\n`, handling nested tags + # in between. + + [ ]{0,$less_than_tab} + <($block_tags_b_re) # start tag = $2 + $attr> # attributes followed by > and \n + $content # content, support nesting + # the matching end tag + [ ]* # trailing spaces + (?=\n+|\Z) # followed by a newline or end of document + + | # Special version for tags of group a. + + [ ]{0,$less_than_tab} + <($block_tags_a_re) # start tag = $3 + $attr>[ ]*\n # attributes followed by > + $content2 # content, support nesting + # the matching end tag + [ ]* # trailing spaces + (?=\n+|\Z) # followed by a newline or end of document + + | # Special case just for
. It was easier to make a special + # case than to make the other regex more complicated. + + [ ]{0,$less_than_tab} + <(hr) # start tag = $2 + $attr # attributes + /?> # the matching end tag + [ ]* + (?=\n{2,}|\Z) # followed by a blank line or end of document + + | # Special case for standalone HTML comments: + + [ ]{0,$less_than_tab} + (?s: + + ) + [ ]* + (?=\n{2,}|\Z) # followed by a blank line or end of document + + | # PHP and ASP-style processor instructions ( + ) + [ ]* + (?=\n{2,}|\Z) # followed by a blank line or end of document + + ) + )"; + + pattern = pattern.Replace("$less_than_tab", (_tabWidth - 1).ToString()); + pattern = pattern.Replace("$block_tags_b_re", blockTagsB); + pattern = pattern.Replace("$block_tags_a_re", blockTagsA); + pattern = pattern.Replace("$attr", attr); + pattern = pattern.Replace("$content2", content2); + pattern = pattern.Replace("$content", content); + + return pattern; + } + + /// + /// replaces any block-level HTML blocks with hash entries + /// + private string HashHTMLBlocks(string text) + { + return _blocksHtml.Replace(text, new MatchEvaluator(HtmlEvaluator)); + } + + private string HtmlEvaluator(Match match) + { + string text = match.Groups[1].Value; + string key = GetHashKey(text); + _htmlBlocks[key] = text; + + return string.Concat("\n\n", key, "\n\n"); + } + + private static string GetHashKey(string s) + { + return "\x1A" + Math.Abs(s.GetHashCode()).ToString() + "\x1A"; + } + + private static Regex _htmlTokens = new Regex(@" + ()| # match + (<\?.*?\?>)| # match " + + RepeatString(@" + (<[A-Za-z\/!$](?:[^<>]|", _nestDepth) + RepeatString(@")*>)", _nestDepth) + + " # match and ", + RegexOptions.Multiline | RegexOptions.Singleline | RegexOptions.ExplicitCapture | RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled); + + /// + /// returns an array of HTML tokens comprising the input string. Each token is + /// either a tag (possibly with nested, tags contained therein, such + /// as <a href="<MTFoo>">, or a run of text between tags. Each element of the + /// array is a two-element array; the first is either 'tag' or 'text'; the second is + /// the actual value. + /// + private List TokenizeHTML(string text) + { + int pos = 0; + int tagStart = 0; + var tokens = new List(); + + // this regex is derived from the _tokenize() subroutine in Brad Choate's MTRegex plugin. + // http://www.bradchoate.com/past/mtregex.php + foreach (Match m in _htmlTokens.Matches(text)) + { + tagStart = m.Index; + + if (pos < tagStart) + tokens.Add(new Token(TokenType.Text, text.Substring(pos, tagStart - pos))); + + tokens.Add(new Token(TokenType.Tag, m.Value)); + pos = tagStart + m.Length; + } + + if (pos < text.Length) + tokens.Add(new Token(TokenType.Text, text.Substring(pos, text.Length - pos))); + + return tokens; + } + + + private static Regex _anchorRef = new Regex(string.Format(@" + ( # wrap whole match in $1 + \[ + ({0}) # link text = $2 + \] + + [ ]? # one optional space + (?:\n[ ]*)? # one optional newline followed by spaces + + \[ + (.*?) # id = $3 + \] + )", GetNestedBracketsPattern()), RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled); + + private static Regex _anchorInline = new Regex(string.Format(@" + ( # wrap whole match in $1 + \[ + ({0}) # link text = $2 + \] + \( # literal paren + [ ]* + ({1}) # href = $3 + [ ]* + ( # $4 + (['""]) # quote char = $5 + (.*?) # title = $6 + \5 # matching quote + [ ]* # ignore any spaces between closing quote and ) + )? # title is optional + \) + )", GetNestedBracketsPattern(), GetNestedParensPattern()), + RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled); + + private static Regex _anchorRefShortcut = new Regex(@" + ( # wrap whole match in $1 + \[ + ([^\[\]]+) # link text = $2; can't contain [ or ] + \] + )", RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled); + + /// + /// Turn Markdown link shortcuts into HTML anchor tags + /// + /// + /// [link text](url "title") + /// [link text][id] + /// [id] + /// + private string DoAnchors(string text) + { + // First, handle reference-style links: [link text] [id] + text = _anchorRef.Replace(text, new MatchEvaluator(AnchorRefEvaluator)); + + // Next, inline-style links: [link text](url "optional title") or [link text](url "optional title") + text = _anchorInline.Replace(text, new MatchEvaluator(AnchorInlineEvaluator)); + + // Last, handle reference-style shortcuts: [link text] + // These must come last in case you've also got [link test][1] + // or [link test](/foo) + text = _anchorRefShortcut.Replace(text, new MatchEvaluator(AnchorRefShortcutEvaluator)); + return text; + } + + private string AnchorRefEvaluator(Match match) + { + string wholeMatch = match.Groups[1].Value; + string linkText = match.Groups[2].Value; + string linkID = match.Groups[3].Value.ToLowerInvariant(); + + string result; + + // for shortcut links like [this][]. + if (linkID == "") + linkID = linkText.ToLowerInvariant(); + + if (_urls.ContainsKey(linkID)) + { + string url = _urls[linkID]; + + url = EncodeProblemUrlChars(url); + url = EscapeBoldItalic(url); + result = ""; + } + else + result = wholeMatch; + + return result; + } + + private string AnchorRefShortcutEvaluator(Match match) + { + string wholeMatch = match.Groups[1].Value; + string linkText = match.Groups[2].Value; + string linkID = Regex.Replace(linkText.ToLowerInvariant(), @"[ ]*\n[ ]*", " "); // lower case and remove newlines / extra spaces + + string result; + + if (_urls.ContainsKey(linkID)) + { + string url = _urls[linkID]; + + url = EncodeProblemUrlChars(url); + url = EscapeBoldItalic(url); + result = ""; + } + else + result = wholeMatch; + + return result; + } + + + private string AnchorInlineEvaluator(Match match) + { + string linkText = match.Groups[2].Value; + string url = match.Groups[3].Value; + string title = match.Groups[6].Value; + string result; + + url = EncodeProblemUrlChars(url); + url = EscapeBoldItalic(url); + if (url.StartsWith("<") && url.EndsWith(">")) + url = url.Substring(1, url.Length - 2); // remove <>'s surrounding URL, if present + + result = string.Format("{0}", linkText); + return result; + } + + private static Regex _imagesRef = new Regex(@" + ( # wrap whole match in $1 + !\[ + (.*?) # alt text = $2 + \] + + [ ]? # one optional space + (?:\n[ ]*)? # one optional newline followed by spaces + + \[ + (.*?) # id = $3 + \] + + )", RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline | RegexOptions.Compiled); + + private static Regex _imagesInline = new Regex(String.Format(@" + ( # wrap whole match in $1 + !\[ + (.*?) # alt text = $2 + \] + \s? # one optional whitespace character + \( # literal paren + [ ]* + ({0}) # href = $3 + [ ]* + ( # $4 + (['""]) # quote char = $5 + (.*?) # title = $6 + \5 # matching quote + [ ]* + )? # title is optional + \) + )", GetNestedParensPattern()), + RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline | RegexOptions.Compiled); + + /// + /// Turn Markdown image shortcuts into HTML img tags. + /// + /// + /// ![alt text][id] + /// ![alt text](url "optional title") + /// + private string DoImages(string text) + { + // First, handle reference-style labeled images: ![alt text][id] + text = _imagesRef.Replace(text, new MatchEvaluator(ImageReferenceEvaluator)); + + // Next, handle inline images: ![alt text](url "optional title") + // Don't forget: encode * and _ + text = _imagesInline.Replace(text, new MatchEvaluator(ImageInlineEvaluator)); + + return text; + } + + private string ImageReferenceEvaluator(Match match) + { + string wholeMatch = match.Groups[1].Value; + string altText = match.Groups[2].Value; + string linkID = match.Groups[3].Value.ToLowerInvariant(); + string result; + + // for shortcut links like ![this][]. + if (linkID == "") + linkID = altText.ToLowerInvariant(); + + altText = altText.Replace("\"", """); + + if (_urls.ContainsKey(linkID)) + { + string url = _urls[linkID]; + url = EncodeProblemUrlChars(url); + url = EscapeBoldItalic(url); + result = string.Format("\"{1}\"",")) + url = url.Substring(1, url.Length - 2); // Remove <>'s surrounding URL, if present + url = EncodeProblemUrlChars(url); + url = EscapeBoldItalic(url); + + result = string.Format("\"{1}\"", + /// Turn Markdown headers into HTML header tags + /// + /// + /// Header 1 + /// ======== + /// + /// Header 2 + /// -------- + /// + /// # Header 1 + /// ## Header 2 + /// ## Header 2 with closing hashes ## + /// ... + /// ###### Header 6 + /// + private string DoHeaders(string text) + { + text = _headerSetext.Replace(text, new MatchEvaluator(SetextHeaderEvaluator)); + text = _headerAtx.Replace(text, new MatchEvaluator(AtxHeaderEvaluator)); + return text; + } + + private string SetextHeaderEvaluator(Match match) + { + string header = match.Groups[1].Value; + int level = match.Groups[2].Value.StartsWith("=") ? 1 : 2; + return string.Format("{0}\n\n", RunSpanGamut(header), level); + } + + private string AtxHeaderEvaluator(Match match) + { + string header = match.Groups[2].Value; + int level = match.Groups[1].Value.Length; + return string.Format("{0}\n\n", RunSpanGamut(header), level); + } + + + private static Regex _horizontalRules = new Regex(@" + ^[ ]{0,3} # Leading space + ([-*_]) # $1: First marker + (?> # Repeated marker group + [ ]{0,2} # Zero, one, or two spaces. + \1 # Marker character + ){2,} # Group repeated at least twice + [ ]* # Trailing spaces + $ # End of line. + ", RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled); + + /// + /// Turn Markdown horizontal rules into HTML hr tags + /// + /// + /// *** + /// * * * + /// --- + /// - - - + /// + private string DoHorizontalRules(string text) + { + return _horizontalRules.Replace(text, " + /// Turn Markdown lists into HTML ul and ol and li tags + /// + private string DoLists(string text) + { + // We use a different prefix before nested lists than top-level lists. + // See extended comment in _ProcessListItems(). + if (_listLevel > 0) + text = _listNested.Replace(text, new MatchEvaluator(ListEvaluator)); + else + text = _listTopLevel.Replace(text, new MatchEvaluator(ListEvaluator)); + + return text; + } + + private string ListEvaluator(Match match) + { + string list = match.Groups[1].Value; + string listType = Regex.IsMatch(match.Groups[3].Value, _markerUL) ? "ul" : "ol"; + string result; + + // Turn double returns into triple returns, so that we can make a + // paragraph for the last item in a list, if necessary: + list = Regex.Replace(list, @"\n{2,}", "\n\n\n"); + result = ProcessListItems(list, listType == "ul" ? _markerUL : _markerOL); + + result = string.Format("<{0}>\n{1}\n", listType, result); + return result; + } + + /// + /// Process the contents of a single ordered or unordered list, splitting it + /// into individual list items. + /// + private string ProcessListItems(string list, string marker) + { + // The listLevel global keeps track of when we're inside a list. + // Each time we enter a list, we increment it; when we leave a list, + // we decrement. If it's zero, we're not in a list anymore. + + // We do this because when we're not inside a list, we want to treat + // something like this: + + // I recommend upgrading to version + // 8. Oops, now this line is treated + // as a sub-list. + + // As a single paragraph, despite the fact that the second line starts + // with a digit-period-space sequence. + + // Whereas when we're inside a list (or sub-list), that line will be + // treated as the start of a sub-list. What a kludge, huh? This is + // an aspect of Markdown's syntax that's hard to parse perfectly + // without resorting to mind-reading. Perhaps the solution is to + // change the syntax rules such that sub-lists must start with a + // starting cardinal number; e.g. "1." or "a.". + + _listLevel++; + + // Trim trailing blank lines: + list = Regex.Replace(list, @"\n{2,}\z", "\n"); + + string pattern = string.Format( + @"(\n)? # leading line = $1 + (^[ ]*) # leading whitespace = $2 + ({0}) [ ]+ # list marker = $3 + ((?s:.+?) # list item text = $4 + (\n{{1,2}})) + (?= \n* (\z | \2 ({0}) [ ]+))", marker); + + list = Regex.Replace(list, pattern, new MatchEvaluator(ListItemEvaluator), + RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline); + _listLevel--; + return list; + } + + private string ListItemEvaluator(Match match) + { + string item = match.Groups[4].Value; + string leadingLine = match.Groups[1].Value; + + if (!String.IsNullOrEmpty(leadingLine) || Regex.IsMatch(item, @"\n{2,}")) + // we could correct any bad indentation here.. + item = RunBlockGamut(Outdent(item) + "\n"); + else + { + // recursion for sub-lists + item = DoLists(Outdent(item)); + item = item.TrimEnd('\n'); + item = RunSpanGamut(item); + } + + return string.Format("
  • {0}
  • \n", item); + } + + + private static Regex _codeBlock = new Regex(string.Format(@" + (?:\n\n|\A\n?) + ( # $1 = the code block -- one or more lines, starting with a space + (?: + (?:[ ]{{{0}}}) # Lines must start with a tab-width of spaces + .*\n+ + )+ + ) + ((?=^[ ]{{0,{0}}}\S)|\Z) # Lookahead for non-space at line-start, or end of doc", + _tabWidth), RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled); + + /// + /// /// Turn Markdown 4-space indented code into HTML pre code blocks + /// + private string DoCodeBlocks(string text) + { + text = _codeBlock.Replace(text, new MatchEvaluator(CodeBlockEvaluator)); + return text; + } + + private string CodeBlockEvaluator(Match match) + { + string codeBlock = match.Groups[1].Value; + + codeBlock = EncodeCode(Outdent(codeBlock)); + codeBlock = _newlinesLeadingTrailing.Replace(codeBlock, ""); + + return string.Concat("\n\n
    ", codeBlock, "\n
    \n\n"); + } + + private static Regex _codeSpan = new Regex(@" + (? + /// Turn Markdown `code spans` into HTML code tags + /// + private string DoCodeSpans(string text) + { + // * You can use multiple backticks as the delimiters if you want to + // include literal backticks in the code span. So, this input: + // + // Just type ``foo `bar` baz`` at the prompt. + // + // Will translate to: + // + //

    Just type foo `bar` baz at the prompt.

    + // + // There's no arbitrary limit to the number of backticks you + // can use as delimters. If you need three consecutive backticks + // in your code, use four for delimiters, etc. + // + // * You can use spaces to get literal backticks at the edges: + // + // ... type `` `bar` `` ... + // + // Turns to: + // + // ... type `bar` ... + // + + return _codeSpan.Replace(text, new MatchEvaluator(CodeSpanEvaluator)); + } + + private string CodeSpanEvaluator(Match match) + { + string span = match.Groups[2].Value; + span = Regex.Replace(span, @"^[ ]*", ""); // leading whitespace + span = Regex.Replace(span, @"[ ]*$", ""); // trailing whitespace + span = EncodeCode(span); + + return string.Concat("", span, ""); + } + + + private static Regex _bold = new Regex(@"(\*\*|__) (?=\S) (.+?[*_]*) (?<=\S) \1", + RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline | RegexOptions.Compiled); + private static Regex _strictBold = new Regex(@"([\W_]|^) (\*\*|__) (?=\S) ([^\r]*?\S[\*_]*) \2 ([\W_]|$)", + RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline | RegexOptions.Compiled); + + private static Regex _italic = new Regex(@"(\*|_) (?=\S) (.+?) (?<=\S) \1", + RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline | RegexOptions.Compiled); + private static Regex _strictItalic = new Regex(@"([\W_]|^) (\*|_) (?=\S) ([^\r\*_]*?\S) \2 ([\W_]|$)", + RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline | RegexOptions.Compiled); + + /// + /// Turn Markdown *italics* and **bold** into HTML strong and em tags + /// + private string DoItalicsAndBold(string text) + { + + // must go first, then + if (_strictBoldItalic) + { + text = _strictBold.Replace(text, "$1$3$4"); + text = _strictItalic.Replace(text, "$1$3$4"); + } + else + { + text = _bold.Replace(text, "$2"); + text = _italic.Replace(text, "$2"); + } + return text; + } + + /// + /// Turn markdown line breaks (two space at end of line) into HTML break tags + /// + private string DoHardBreaks(string text) + { + if (_autoNewlines) + text = Regex.Replace(text, @"\n", string.Format("[ ]? # '>' at the start of a line + .+\n # rest of the first line + (.+\n)* # subsequent consecutive lines + \n* # blanks + )+ + )", RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline | RegexOptions.Compiled); + + /// + /// Turn Markdown > quoted blocks into HTML blockquote blocks + /// + private string DoBlockQuotes(string text) + { + return _blockquote.Replace(text, new MatchEvaluator(BlockQuoteEvaluator)); + } + + private string BlockQuoteEvaluator(Match match) + { + string bq = match.Groups[1].Value; + + bq = Regex.Replace(bq, @"^[ ]*>[ ]?", "", RegexOptions.Multiline); // trim one level of quoting + bq = Regex.Replace(bq, @"^[ ]+$", "", RegexOptions.Multiline); // trim whitespace-only lines + bq = RunBlockGamut(bq); // recurse + + bq = Regex.Replace(bq, @"^", " ", RegexOptions.Multiline); + + // These leading spaces screw with
     content, so we need to fix that:
    +            bq = Regex.Replace(bq, @"(\s*
    .+?
    )", new MatchEvaluator(BlockQuoteEvaluator2), RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline); + + return string.Format("
    \n{0}\n
    \n\n", bq); + } + + private string BlockQuoteEvaluator2(Match match) + { + return Regex.Replace(match.Groups[1].Value, @"^ ", "", RegexOptions.Multiline); + } + + private static Regex _autolinkBare = new Regex(@"(^|\s)(https?|ftp)(://[-A-Z0-9+&@#/%?=~_|\[\]\(\)!:,\.;]*[-A-Z0-9+&@#/%=~_|\[\]])($|\W)", + RegexOptions.IgnoreCase | RegexOptions.Compiled); + + /// + /// Turn angle-delimited URLs into HTML anchor tags + /// + /// + /// <http://www.example.com> + /// + private string DoAutoLinks(string text) + { + + if (_autoHyperlink) + { + // fixup arbitrary URLs by adding Markdown < > so they get linked as well + // note that at this point, all other URL in the text are already hyperlinked as + // *except* for the case + text = _autolinkBare.Replace(text, @"$1<$2$3>$4"); + } + + // Hyperlinks: + text = Regex.Replace(text, "<((https?|ftp):[^'\">\\s]+)>", new MatchEvaluator(HyperlinkEvaluator)); + + if (_linkEmails) + { + // Email addresses: + string pattern = + @"< + (?:mailto:)? + ( + [-.\w]+ + \@ + [-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+ + ) + >"; + text = Regex.Replace(text, pattern, new MatchEvaluator(EmailEvaluator), RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace); + } + + return text; + } + + private string HyperlinkEvaluator(Match match) + { + string link = match.Groups[1].Value; + return string.Format("{0}", link); + } + + private string EmailEvaluator(Match match) + { + string email = Unescape(match.Groups[1].Value); + + // + // Input: an email address, e.g. "foo@example.com" + // + // Output: the email address as a mailto link, with each character + // of the address encoded as either a decimal or hex entity, in + // the hopes of foiling most address harvesting spam bots. E.g.: + // + // foo + // @example.com + // + // Based by a filter by Matthew Wickline, posted to the BBEdit-Talk + // mailing list: + // + email = "mailto:" + email; + + // leave ':' alone (to spot mailto: later) + email = EncodeEmailAddress(email); + + email = string.Format("{0}", email); + + // strip the mailto: from the visible part + email = Regex.Replace(email, "\">.+?:", "\">"); + return email; + } + + + private static Regex _outDent = new Regex(@"^[ ]{1," + _tabWidth + @"}", RegexOptions.Multiline | RegexOptions.Compiled); + + /// + /// Remove one level of line-leading spaces + /// + private string Outdent(string block) + { + return _outDent.Replace(block, ""); + } + + + #region Encoding and Normalization + + + /// + /// encodes email address randomly + /// roughly 10% raw, 45% hex, 45% dec + /// note that @ is always encoded and : never is + /// + private string EncodeEmailAddress(string addr) + { + var sb = new StringBuilder(addr.Length * 5); + var rand = new Random(); + int r; + foreach (char c in addr) + { + r = rand.Next(1, 100); + if ((r > 90 || c == ':') && c != '@') + sb.Append(c); // m + else if (r < 45) + sb.AppendFormat("&#x{0:x};", (int)c); // m + else + sb.AppendFormat("&#{0};", (int)c); // m + } + return sb.ToString(); + } + + private static Regex _codeEncoder = new Regex(@"&|<|>|\\|\*|_|\{|\}|\[|\]", RegexOptions.Compiled); + + /// + /// Encode/escape certain Markdown characters inside code blocks and spans where they are literals + /// + private string EncodeCode(string code) + { + return _codeEncoder.Replace(code, EncodeCodeEvaluator); + } + private string EncodeCodeEvaluator(Match match) + { + switch (match.Value) + { + // Encode all ampersands; HTML entities are not + // entities within a Markdown code span. + case "&": + return "&"; + // Do the angle bracket song and dance + case "<": + return "<"; + case ">": + return ">"; + // escape characters that are magic in Markdown + default: + return _escapeTable[match.Value]; + } + } + + + private static Regex _amps = new Regex(@"&(?!(#[0-9]+)|(#[xX][a-fA-F0-9])|([a-zA-Z][a-zA-Z0-9]*);)", RegexOptions.ExplicitCapture | RegexOptions.Compiled); + private static Regex _angles = new Regex(@"<(?![A-Za-z/?\$!])", RegexOptions.ExplicitCapture | RegexOptions.Compiled); + + /// + /// Encode any ampersands (that aren't part of an HTML entity) and left or right angle brackets + /// + private string EncodeAmpsAndAngles(string s) + { + s = _amps.Replace(s, "&"); + s = _angles.Replace(s, "<"); + return s; + } + + private static Regex _backslashEscapes; + + /// + /// Encodes any escaped characters such as \`, \*, \[ etc + /// + private string EscapeBackslashes(string s) + { + return _backslashEscapes.Replace(s, new MatchEvaluator(EscapeBackslashesEvaluator)); + } + private string EscapeBackslashesEvaluator(Match match) + { + return _backslashEscapeTable[match.Value]; + } + + private static Regex _unescapes = new Regex("\x1A\\d+\x1A", RegexOptions.Compiled); + + /// + /// swap back in all the special characters we've hidden + /// + private string Unescape(string s) + { + return _unescapes.Replace(s, new MatchEvaluator(UnescapeEvaluator)); + } + private string UnescapeEvaluator(Match match) + { + return _invertedEscapeTable[match.Value]; + } + + + /// + /// escapes Bold [ * ] and Italic [ _ ] characters + /// + private string EscapeBoldItalic(string s) + { + s = s.Replace("*", _escapeTable["*"]); + s = s.Replace("_", _escapeTable["_"]); + return s; + } + + private static char[] _problemUrlChars = @"""'*()[]$:".ToCharArray(); + + /// + /// hex-encodes some unusual "problem" chars in URLs to avoid URL detection problems + /// + private string EncodeProblemUrlChars(string url) + { + if (!_encodeProblemUrlCharacters) return url; + + var sb = new StringBuilder(url.Length); + bool encode; + char c; + + for (int i = 0; i < url.Length; i++) + { + c = url[i]; + encode = Array.IndexOf(_problemUrlChars, c) != -1; + if (encode && c == ':' && i < url.Length - 1) + encode = !(url[i + 1] == '/') && !(url[i + 1] >= '0' && url[i + 1] <= '9'); + + if (encode) + sb.Append("%" + String.Format("{0:x}", (byte)c)); + else + sb.Append(c); + } + + return sb.ToString(); + } + + + /// + /// Within tags -- meaning between < and > -- encode [\ ` * _] so they + /// don't conflict with their use in Markdown for code, italics and strong. + /// We're replacing each such character with its corresponding hash + /// value; this is likely overkill, but it should prevent us from colliding + /// with the escape values by accident. + /// + private string EscapeSpecialCharsWithinTagAttributes(string text) + { + var tokens = TokenizeHTML(text); + + // now, rebuild text from the tokens + var sb = new StringBuilder(text.Length); + + foreach (var token in tokens) + { + string value = token.Value; + + if (token.Type == TokenType.Tag) + { + value = value.Replace(@"\", _escapeTable[@"\"]); + value = Regex.Replace(value, "(?<=.)(?=.)", _escapeTable[@"`"]); + value = EscapeBoldItalic(value); + } + + sb.Append(value); + } + + return sb.ToString(); + } + + /// + /// convert all tabs to _tabWidth spaces; + /// standardizes line endings from DOS (CR LF) or Mac (CR) to UNIX (LF); + /// makes sure text ends with a couple of newlines; + /// removes any blank lines (only spaces) in the text + /// + private string Normalize(string text) + { + var output = new StringBuilder(text.Length); + var line = new StringBuilder(); + bool valid = false; + + for (int i = 0; i < text.Length; i++) + { + switch (text[i]) + { + case '\n': + if (valid) output.Append(line); + output.Append('\n'); + line.Length = 0; valid = false; + break; + case '\r': + if ((i < text.Length - 1) && (text[i + 1] != '\n')) + { + if (valid) output.Append(line); + output.Append('\n'); + line.Length = 0; valid = false; + } + break; + case '\t': + int width = (_tabWidth - line.Length % _tabWidth); + for (int k = 0; k < width; k++) + line.Append(' '); + break; + case '\x1A': + break; + default: + if (!valid && text[i] != ' ') valid = true; + line.Append(text[i]); + break; + } + } + + if (valid) output.Append(line); + output.Append('\n'); + + // add two newlines to the end before return + return output.Append("\n\n").ToString(); + } + + #endregion + + /// + /// this is to emulate what's evailable in PHP + /// + private static string RepeatString(string text, int count) + { + var sb = new StringBuilder(text.Length * count); + for (int i = 0; i < count; i++) + sb.Append(text); + return sb.ToString(); + } + + } +} \ No newline at end of file diff --git a/src/MarkdownSharp/MarkdownOld.cs b/src/MarkdownSharp/MarkdownOld.cs new file mode 100644 index 0000000..19bf1b9 --- /dev/null +++ b/src/MarkdownSharp/MarkdownOld.cs @@ -0,0 +1,1311 @@ +/* + * Markdown - A text-to-HTML conversion tool for web writers + * Copyright (c) 2004 John Gruber + * http://daringfireball.net/projects/markdown/ + * + * Copyright (c) 2004 Michel Fortin - Translation to PHP + * http://www.michelf.com/projects/php-markdown/ + * + * Copyright (c) 2004-2005 Milan Negovan - C# translation to .NET + * http://www.aspnetresources.com + * + */ + +#region Copyright and license + +/* +Copyright (c) 2003-2004 John Gruber + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +* Neither the name "Markdown" nor the names of its contributors may + be used to endorse or promote products derived from this software + without specific prior written permission. + +This software is provided by the copyright holders and contributors "as +is" and any express or implied warranties, including, but not limited +to, the implied warranties of merchantability and fitness for a +particular purpose are disclaimed. In no event shall the copyright owner +or contributors be liable for any direct, indirect, incidental, special, +exemplary, or consequential damages (including, but not limited to, +procurement of substitute goods or services; loss of use, data, or +profits; or business interruption) however caused and on any theory of +liability, whether in contract, strict liability, or tort (including +negligence or otherwise) arising in any way out of the use of this +software, even if advised of the possibility of such damage. +*/ + +#endregion + +using System; +using System.Collections; +using System.Security.Cryptography; +using System.Text; +using System.Text.RegularExpressions; + +namespace MarkdownSharp +{ + [Obsolete("This old version is included only for historical comparison purposes; use at your own risk!")] + public class MarkdownOld + { + public class Pair + { + public Object First; + public Object Second; + } + + #region Class members + + private const int nestedBracketDepth = 6; + private const string emptyElementSuffix = " />"; // Change to ">" for HTML output + private const int tabWidth = 4; + + private static readonly string markerUL; + private static readonly string markerOL; + private static readonly string markerAny; + + private static readonly string nestedBrackets; + private static readonly Hashtable escapeTable; + private static readonly Hashtable backslashEscapeTable; + + private Hashtable urls; + private Hashtable titles; + private Hashtable htmlBlocks; + + private int listLevel = 0; + + #endregion + + /// + /// Static constructor + /// + /// + /// In the static constuctor we'll initialize what stays the same across all transforms. + /// + static MarkdownOld() + { + nestedBrackets += RepeatString(@"(?>[^\[\]]+|\[", nestedBracketDepth); + nestedBrackets += RepeatString(@"\])*", nestedBracketDepth); + + markerUL = @"[*+-]"; + markerOL = @"\d+[.]"; + markerAny = string.Format("(?:{0}|{1})", markerUL, markerOL); + + // Table of hash values for escaped characters: + escapeTable = new Hashtable(); + + escapeTable[@"\"] = ComputeMD5(@"\"); + escapeTable["`"] = ComputeMD5("`"); + escapeTable["*"] = ComputeMD5("*"); + escapeTable["_"] = ComputeMD5("_"); + escapeTable["{"] = ComputeMD5("{"); + escapeTable["}"] = ComputeMD5("}"); + escapeTable["["] = ComputeMD5("["); + escapeTable["]"] = ComputeMD5("]"); + escapeTable["("] = ComputeMD5("("); + escapeTable[")"] = ComputeMD5(")"); + escapeTable[">"] = ComputeMD5(">"); + escapeTable["#"] = ComputeMD5("#"); + escapeTable["+"] = ComputeMD5("+"); + escapeTable["-"] = ComputeMD5("-"); + escapeTable["."] = ComputeMD5("."); + escapeTable["!"] = ComputeMD5("!"); + + // Create an identical table but for escaped characters. + backslashEscapeTable = new Hashtable(); + + foreach (string key in escapeTable.Keys) + backslashEscapeTable[@"\" + key] = escapeTable[key]; + } + + public MarkdownOld() + { + urls = new Hashtable(); + titles = new Hashtable(); + htmlBlocks = new Hashtable(); + } + + /// + /// Main function. The order in which other subs are called here is + /// essential. Link and image substitutions need to happen before + /// EscapeSpecialChars(), so that any *'s or _'s in the + /// and tags get encoded. + /// + public string Transform(string text) + { + // Standardize line endings: + // DOS to Unix and Mac to Unix + text = text.Replace("\r\n", "\n").Replace("\r", "\n"); + + // Make sure $text ends with a couple of newlines: + text += "\n\n"; + + // Convert all tabs to spaces. + text = Detab(text); + + // Strip any lines consisting only of spaces and tabs. + // This makes subsequent regexen easier to write, because we can + // match consecutive blank lines with /\n+/ instead of something + // contorted like /[ \t]*\n+/ . + text = Regex.Replace(text, @"^[ \t]+$", string.Empty, RegexOptions.Multiline); + + // Turn block-level HTML blocks into hash entries + text = HashHTMLBlocks(text); + + // Strip link definitions, store in hashes. + text = StripLinkDefinitions(text); + + text = RunBlockGamut(text); + + text = UnescapeSpecialChars(text); + + return text + "\n"; + } + + #region Process link definitions + + /// + /// Strips link definitions from text, stores the URLs and titles in hash references. + /// + /// Link defs are in the form: ^[id]: url "optional title" + private string StripLinkDefinitions(string text) + { + string pattern = string.Format(@" + ^[ ]{{0,{0}}}\[(.+)\]: # id = $1 + [ \t]* + \n? # maybe *one* newline + [ \t]* + ? # url = $2 + [ \t]* + \n? # maybe one newline + [ \t]* + (?: + (?<=\s) # lookbehind for whitespace + [\x22(] + (.+?) # title = $3 + [\x22)] + [ \t]* + )? # title is optional + (?:\n+|\Z)", tabWidth - 1); + + text = Regex.Replace(text, pattern, new MatchEvaluator(LinkEvaluator), RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace); + return text; + } + + private string LinkEvaluator(Match match) + { + string linkID = match.Groups[1].Value.ToLower(); + urls[linkID] = EncodeAmpsAndAngles(match.Groups[2].Value); + + if (match.Groups[3] != null && match.Groups[3].Length > 0) + titles[linkID] = match.Groups[3].Value.Replace("\"", """); + + return string.Empty; + } + + #endregion + + #region Hashify HTML blocks + + /// + /// Hashify HTML blocks + /// + private string HashHTMLBlocks(string text) + { + /* + We only want to do this for block-level HTML tags, such as headers, + lists, and tables. That's because we still want to wrap

    s around + "paragraphs" that are wrapped in non-block-level tags, such as anchors, + phrase emphasis, and spans. The list of tags we're looking for is + hard-coded: + */ + string blockTags1 = "p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del"; + string blockTags2 = "p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math"; + + /* + First, look for nested blocks, e.g.: +

    +
    + tags for inner block must be indented. +
    +
    + + The outermost tags must start at the left margin for this to match, and + the inner nested divs must be indented. + We need to do this before the next, more liberal match, because the next + match will start at the first `
    ` and stop at the first `
    `. + */ + string pattern = string.Format(@" + ( # save in $1 + ^ # start of line (with /m) + <({0}) # start tag = $2 + \b # word break + (.*\n)*? # any number of lines, minimally matching + # the matching end tag + [ \t]* # trailing spaces/tabs + (?=\n+|\Z) # followed by a newline or end of document + )", blockTags1); + + text = Regex.Replace(text, pattern, new MatchEvaluator(HtmlEvaluator), RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace); + + // Now match more liberally, simply from `\n` to `\n` + pattern = string.Format(@" + ( # save in $1 + ^ # start of line (with /m) + <({0}) # start tag = $2 + \b # word break + (.*\n)*? # any number of lines, minimally matching + .* # the matching end tag + [ \t]* # trailing spaces/tabs + (?=\n+|\Z) # followed by a newline or end of document + )", blockTags2); + + text = Regex.Replace(text, pattern, new MatchEvaluator(HtmlEvaluator), RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace); + + // Special case just for
    . It was easier to make a special case than + // to make the other regex more complicated. + pattern = string.Format(@" + (?: + (?<=\n\n) # Starting after a blank line + | # or + \A\n? # the beginning of the doc + ) + ( # save in $1 + [ ]{{0, {0}}} + <(hr) # start tag = $2 + \b # word break + ([^<>])*? # + /?> # the matching end tag + [ \t]* + (?=\n{{2,}}|\Z) # followed by a blank line or end of document + )", tabWidth - 1); + text = Regex.Replace(text, pattern, new MatchEvaluator(HtmlEvaluator), RegexOptions.IgnorePatternWhitespace); + + // Special case for standalone HTML comments: + pattern = string.Format(@" + (?: + (?<=\n\n) # Starting after a blank line + | # or + \A\n? # the beginning of the doc + ) + ( # save in $1 + [ ]{{0,{0}}} + (?s: + + ) + [ \t]* + (?=\n{{2,}}|\Z) # followed by a blank line or end of document + )", tabWidth - 1); + text = Regex.Replace(text, pattern, new MatchEvaluator(HtmlEvaluator), RegexOptions.IgnorePatternWhitespace); + + return text; + } + + private string HtmlEvaluator(Match match) + { + string text = match.Groups[1].Value; + string key = ComputeMD5(text); + htmlBlocks[key] = text; + + // # String that will replace the block + return string.Concat("\n\n", key, "\n\n"); + } + + #endregion + + #region Run transformations that form block-level elements (RunBlockGamut) + + /// + /// These are all the transformations that form block-level + /// tags like paragraphs, headers, and list items. + /// + private string RunBlockGamut(string text) + { + text = DoHeaders(text); + + // Do Horizontal Rules: + text = Regex.Replace(text, @"^[ ]{0,2}([ ]?\*[ ]?){3,}[ \t]*$", " tags around block-level tags. + */ + text = HashHTMLBlocks(text); + + text = FormParagraphs(text); + + return text; + } + + #endregion + + #region Run transformations within block-level elements (RunSpanGamut) + + /// + /// These are all the transformations that occur *within* block-level + /// tags like paragraphs, headers, and list items. + /// + private string RunSpanGamut(string text) + { + text = DoCodeSpans(text); + + text = EscapeSpecialChars(text); + + // Process anchor and image tags. Images must come first, + // because ![foo][f] looks like an anchor. + text = DoImages(text); + text = DoAnchors(text); + + // Make links out of things like `` + // Must come after DoAnchors(), because you can use < and > + // delimiters in inline links like [this](). + text = DoAutoLinks(text); + + // Fix unencoded ampersands and <'s: + text = EncodeAmpsAndAngles(text); + + text = DoItalicsAndBold(text); + + // Do hard breaks: + text = Regex.Replace(text, @" {2,}\n", string.Format(" + /// + /// + /// String containing HTML markup. + /// An array of the tokens comprising the input string. Each token is + /// either a tag (possibly with nested, tags contained therein, such + /// as <a href="">, or a run of text between tags. Each element of the + /// array is a two-element array; the first is either 'tag' or 'text'; the second is + /// the actual value. + /// + private ArrayList TokenizeHTML(string text) + { + // Regular expression derived from the _tokenize() subroutine in + // Brad Choate's MTRegex plugin. + // http://www.bradchoate.com/past/mtregex.php + int pos = 0; + int depth = 6; + ArrayList tokens = new ArrayList(); + + + string nestedTags = string.Concat(RepeatString(@"(?:<[a-z\/!$](?:[^<>]|", depth), + RepeatString(@")*>)", depth)); + string pattern = string.Concat(@"(?s:)|(?s:<\?.*?\?>)|", nestedTags); + + MatchCollection mc = Regex.Matches(text, pattern, RegexOptions.IgnoreCase | RegexOptions.Multiline); + + foreach (Match m in mc) + { + string wholeTag = m.Value; + int tagStart = m.Index; + Pair token = null; + + if (pos < tagStart) + { + token = new Pair(); + token.First = "text"; + token.Second = text.Substring(pos, tagStart - pos); + tokens.Add(token); + } + + token = new Pair(); + token.First = "tag"; + token.Second = wholeTag; + tokens.Add(token); + + pos = m.Index + m.Length; + } + + if (pos < text.Length) + { + Pair token = new Pair(); + token.First = "text"; + token.Second = text.Substring(pos, text.Length - pos); + tokens.Add(token); + } + + return tokens; + } + + #endregion + + #region Escape special characters + + private string EscapeSpecialChars(string text) + { + ArrayList tokens = TokenizeHTML(text); + + // Rebuild text from the tokens + text = string.Empty; + + foreach (Pair token in tokens) + { + string value = token.Second.ToString(); + + if (token.First.Equals("tag")) + /* + Within tags, encode * and _ so they don't conflict with their use + in Markdown for italics and strong. We're replacing each + such character with its corresponding MD5 checksum value; + this is likely overkill, but it should prevent us from colliding + with the escape values by accident. + */ + value = value.Replace("*", escapeTable["*"].ToString()).Replace("_", escapeTable["_"].ToString()); + else + value = EncodeBackslashEscapes(value); + + text += value; + } + + return text; + } + + #endregion + + #region Process referenced and inline anchors + + ///
    + /// Turn Markdown link shortcuts into XHTML tags. + /// + private string DoAnchors(string text) + { + // + // First, handle reference-style links: [link text] [id] + // + string pattern = string.Format(@" + ( # wrap whole match in $1 + \[ + ({0}) # link text = $2 + \] + + [ ]? # one optional space + (?:\n[ ]*)? # one optional newline followed by spaces + + \[ + (.*?) # id = $3 + \] + )", nestedBrackets); + + text = Regex.Replace(text, pattern, new MatchEvaluator(AnchorReferenceEvaluator), RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace); + + // + // Next, inline-style links: [link text](url "optional title") + // + pattern = string.Format(@" + ( # wrap whole match in $1 + \[ + ({0}) # link text = $2 + \] + \( # literal paren + [ \t]* + ? # href = $3 + [ \t]* + ( # $4 + (['\x22]) # quote char = $5 + (.*?) # Title = $6 + \5 # matching quote + )? # title is optional + \) + )", nestedBrackets); + + text = Regex.Replace(text, pattern, new MatchEvaluator(AnchorInlineEvaluator), RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace); + + return text; + } + + private string AnchorReferenceEvaluator(Match match) + { + string wholeMatch = match.Groups[1].Value; + string linkText = match.Groups[2].Value; + string linkID = match.Groups[3].Value.ToLower(); + string url = null; + string res = null; + string title = null; + + // for shortcut links like [this][]. + if (linkID.Equals(string.Empty)) + linkID = linkText.ToLower(); + + if (urls[linkID] != null) + { + url = urls[linkID].ToString(); + + //We've got to encode these to avoid conflicting with italics/bold. + url = url.Replace("*", escapeTable["*"].ToString()).Replace("_", escapeTable["_"].ToString()); + res = string.Format("{0}", linkText); + } + else + res = wholeMatch; + + return res; + } + + private string AnchorInlineEvaluator(Match match) + { + string linkText = match.Groups[2].Value; + string url = match.Groups[3].Value; + string title = match.Groups[6].Value; + string res = null; + + // We've got to encode these to avoid conflicting with italics/bold. + url = url.Replace("*", escapeTable["*"].ToString()).Replace("_", escapeTable["_"].ToString()); + res = string.Format(" 0) + { + title = title.Replace("\"", """).Replace("*", escapeTable["*"].ToString()).Replace("_", escapeTable["_"].ToString()); + res += string.Format(" title=\"{0}\"", title); + } + + res += string.Format(">{0}", linkText); + return res; + } + + #endregion + + #region Process inline and referenced images + + /// + /// Turn Markdown image shortcuts into tags. + /// + private string DoImages(string text) + { + // First, handle reference-style labeled images: ![alt text][id] + string pattern = @" + ( # wrap whole match in $1 + !\[ + (.*?) # alt text = $2 + \] + + [ ]? # one optional space + (?:\n[ ]*)? # one optional newline followed by spaces + + \[ + (.*?) # id = $3 + \] + + )"; + + text = Regex.Replace(text, pattern, new MatchEvaluator(ImageReferenceEvaluator), RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline); + + // Next, handle inline images: ![alt text](url "optional title") + // Don't forget: encode * and _ + pattern = @" + ( # wrap whole match in $1 + !\[ + (.*?) # alt text = $2 + \] + \( # literal paren + [ \t]* + ? # src url = $3 + [ \t]* + ( # $4 + (['\x22]) # quote char = $5 + (.*?) # title = $6 + \5 # matching quote + [ \t]* + )? # title is optional + \) + )"; + + text = Regex.Replace(text, pattern, new MatchEvaluator(ImageInlineEvaluator), RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline); + + return text; + } + + private string ImageReferenceEvaluator(Match match) + { + string wholeMatch = match.Groups[1].Value; + string altText = match.Groups[2].Value; + string linkID = match.Groups[3].Value.ToLower(); + string url = null; + string res = null; + string title = null; + + // for shortcut links like ![this][]. + if (linkID.Equals(string.Empty)) + linkID = altText.ToLower(); + + altText = altText.Replace("\"", """); + + if (urls[linkID] != null) + { + url = urls[linkID].ToString(); + + // We've got to encode these to avoid conflicting with italics/bold. + url = url.Replace("*", escapeTable["*"].ToString()).Replace("_", escapeTable["_"].ToString()); + res = string.Format("\"{1}\"",", RunSpanGamut(header), "\n\n"); + } + + private string SetextHeader2Evaluator(Match match) + { + string header = match.Groups[1].Value; + return string.Concat("

    ", RunSpanGamut(header), "

    \n\n"); + } + + private string AtxHeaderEvaluator(Match match) + { + string headerSig = match.Groups[1].Value; + string headerText = match.Groups[2].Value; + + return string.Concat("", RunSpanGamut(headerText), "\n\n"); + } + + #endregion + + #region Process ordered and unordered lists + + private string DoLists(string text) + { + // Re-usable pattern to match any entirel ul or ol list: + string pattern = null; + + string wholeList = string.Format(@" + ( # $1 = whole list + ( # $2 + [ ]{{0,{1}}} + ({0}) # $3 = first list item marker + [ \t]+ + ) + (?s:.+?) + ( # $4 + \z + | + \n{{2,}} + (?=\S) + (?! # Negative lookahead for another list item marker + [ \t]* + {0}[ \t]+ + ) + ) + )", markerAny, tabWidth - 1); + + // We use a different prefix before nested lists than top-level lists. + // See extended comment in _ProcessListItems(). + if (listLevel > 0) + { + pattern = "^" + wholeList; + text = Regex.Replace(text, pattern, new MatchEvaluator(ListEvaluator), RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace); + } + else + { + pattern = @"(?:(?<=\n\n)|\A\n?)" + wholeList; + text = Regex.Replace(text, pattern, new MatchEvaluator(ListEvaluator), RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace); + } + + return text; + } + + private string ListEvaluator(Match match) + { + string list = match.Groups[1].Value; + string listType = Regex.IsMatch(match.Groups[3].Value, markerUL) ? "ul" : "ol"; + string result = null; + + // Turn double returns into triple returns, so that we can make a + // paragraph for the last item in a list, if necessary: + list = Regex.Replace(list, @"\n{2,}", "\n\n\n"); + result = ProcessListItems(list, markerAny); + result = string.Format("<{0}>\n{1}\n", listType, result); + + return result; + } + + /// + /// Process the contents of a single ordered or unordered list, splitting it + /// into individual list items. + /// + private string ProcessListItems(string list, string marker) + { + /* + The listLevel global keeps track of when we're inside a list. + Each time we enter a list, we increment it; when we leave a list, + we decrement. If it's zero, we're not in a list anymore. + + We do this because when we're not inside a list, we want to treat + something like this: + + I recommend upgrading to version + 8. Oops, now this line is treated + as a sub-list. + + As a single paragraph, despite the fact that the second line starts + with a digit-period-space sequence. + + Whereas when we're inside a list (or sub-list), that line will be + treated as the start of a sub-list. What a kludge, huh? This is + an aspect of Markdown's syntax that's hard to parse perfectly + without resorting to mind-reading. Perhaps the solution is to + change the syntax rules such that sub-lists must start with a + starting cardinal number; e.g. "1." or "a.". + */ + + listLevel++; + + // Trim trailing blank lines: + list = Regex.Replace(list, @"\n{2,}\z", "\n"); + + string pattern = string.Format( + @"(\n)? # leading line = $1 + (^[ \t]*) # leading whitespace = $2 + ({0}) [ \t]+ # list marker = $3 + ((?s:.+?) # list item text = $4 + (\n{{1,2}})) + (?= \n* (\z | \2 ({0}) [ \t]+))", marker); + + list = Regex.Replace(list, pattern, new MatchEvaluator(ListEvaluator2), + RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline); + listLevel--; + return list; + } + + private string ListEvaluator2(Match match) + { + string item = match.Groups[4].Value; + string leadingLine = match.Groups[1].Value; + + + if ((leadingLine != null && leadingLine != string.Empty) || Regex.IsMatch(item, @"\n{2,}")) + item = RunBlockGamut(Outdent(item)); + else + { + // Recursion for sub-lists: + item = DoLists(Outdent(item)); + item = item.TrimEnd('\n'); + item = RunSpanGamut(item); + } + + return string.Format("
  • {0}
  • \n", item); + } + + #endregion + + #region Process code blocks + + private string DoCodeBlocks(string text) + { + // TODO: Should we allow 2 empty lines here or only one? + string pattern = string.Format(@" + (?:\n\n|\A) + ( # $1 = the code block -- one or more lines, starting with a space/tab + (?: + (?:[ ]{{{0}}} | \t) # Lines must start with a tab or a tab-width of spaces + .*\n+ + )+ + ) + ((?=^[ ]{{0,{0}}}\S)|\Z) # Lookahead for non-space at line-start, or end of doc", + tabWidth); + + text = Regex.Replace(text, pattern, + new MatchEvaluator(CodeBlockEvaluator), + RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace); + + return text; + } + + private string CodeBlockEvaluator(Match match) + { + string codeBlock = match.Groups[1].Value; + codeBlock = EncodeCode(Outdent(codeBlock)); + + // Trim leading newlines and trailing whitespace + codeBlock = Regex.Replace(codeBlock, @"^\n+", string.Empty); + codeBlock = Regex.Replace(codeBlock, @"\s+\z", string.Empty); + + return string.Concat("\n\n
    ", codeBlock, "\n
    \n\n"); + } + + #endregion + + #region Process code spans + + private string DoCodeSpans(string text) + { + /* + * Backtick quotes are used for spans. + * You can use multiple backticks as the delimiters if you want to + include literal backticks in the code span. So, this input: + + Just type ``foo `bar` baz`` at the prompt. + + Will translate to: + +

    Just type foo `bar` baz at the prompt.

    + + There's no arbitrary limit to the number of backticks you + can use as delimters. If you need three consecutive backticks + in your code, use four for delimiters, etc. + + * You can use spaces to get literal backticks at the edges: + + ... type `` `bar` `` ... + + Turns to: + + ... type `bar` ... + */ + + string pattern = @" + (`+) # $1 = Opening run of ` + (.+?) # $2 = The code block + (?", s, ""); + } + + #endregion + + #region Encode/escape certain characters inside Markdown code runs + + /// + /// Encode/escape certain characters inside Markdown code runs. + /// + /// + /// The point is that in code, these characters are literals, and lose their + /// special Markdown meanings. + /// + private string EncodeCode(string code) + { + code = code.Replace("&", "&").Replace("<", "<").Replace(">", ">"); + + foreach (string key in escapeTable.Keys) + code = code.Replace(key, escapeTable[key].ToString()); + + return code; + } + + #endregion + + #region Process bold and italics + + private string DoItalicsAndBold(string text) + { + // must go first: + text = Regex.Replace(text, @"(\*\*|__) (?=\S) (.+?[*_]*) (?<=\S) \1", + new MatchEvaluator(BoldEvaluator), + RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline); + + // Then : + text = Regex.Replace(text, @"(\*|_) (?=\S) (.+?) (?<=\S) \1", + new MatchEvaluator(ItalicsEvaluator), + RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline); + return text; + } + + private string ItalicsEvaluator(Match match) + { + return string.Format("{0}", match.Groups[2].Value); + } + + private string BoldEvaluator(Match match) + { + return string.Format("{0}", match.Groups[2].Value); + } + + #endregion + + #region Process blockquotes + + private string DoBlockQuotes(string text) + { + string pattern = + @"( # Wrap whole match in $1 + ( + ^[ \t]*>[ \t]? # '>' at the start of a line + .+\n # rest of the first line + (.+\n)* # subsequent consecutive lines + \n* # blanks + )+ + )"; + + text = Regex.Replace(text, pattern, new MatchEvaluator(BlockQuoteEvaluator), RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline); + return text; + } + + private string BlockQuoteEvaluator(Match match) + { + string bq = match.Groups[1].Value; + + // Trim one level of quoting - trim whitespace-only lines + bq = Regex.Replace(bq, @"^[ \t]*>[ \t]?", string.Empty, RegexOptions.Multiline); + bq = Regex.Replace(bq, @"^[ \t]+$", string.Empty, RegexOptions.Multiline); + + bq = RunBlockGamut(bq); + bq = Regex.Replace(bq, @"^", " ", RegexOptions.Multiline); + + // These leading spaces screw with
     content, so we need to fix that:
    +            bq = Regex.Replace(bq, @"(\s*
    .+?
    )", new MatchEvaluator(BlockQuoteEvaluator2), RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline); + + return string.Format("
    \n{0}\n
    \n\n", bq); + } + + private string BlockQuoteEvaluator2(Match match) + { + string pre = match.Groups[1].Value; + pre = Regex.Replace(pre, @"^ ", string.Empty, RegexOptions.Multiline); + + return pre; + } + + #endregion + + #region Create paragraph tags + + private string FormParagraphs(string text) + { + // Strip leading and trailing lines: + text = Regex.Replace(text, @"^\n+", string.Empty); + text = Regex.Replace(text, @"\n+\z", string.Empty); + + string[] grafs = Regex.Split(text, @"\n{2,}"); + + // Wrap

    tags. + for (int i = 0; i < grafs.Length; i++) + { + // Milan Negovan: I'm adding an additional check for an empty block of code. + // Otherwise an empty

    is created. + if (htmlBlocks[grafs[i]] == null && grafs[i].Length > 0) + { + string block = grafs[i]; + + block = RunSpanGamut(block); + block = Regex.Replace(block, @"^([ \t]*)", "

    "); + block += "

    "; + + grafs[i] = block; + } + } + + // Unhashify HTML blocks + for (int i = 0; i < grafs.Length; i++) + { + string block = (string)htmlBlocks[grafs[i]]; + + if (block != null) + grafs[i] = block; + } + + return string.Join("\n\n", grafs); + + } + + #endregion + + #region Process emails and links + + private string DoAutoLinks(string text) + { + text = Regex.Replace(text, "<((https?|ftp):[^'\">\\s]+)>", new MatchEvaluator(HyperlinkEvaluator)); + + // Email addresses: + string pattern = + @"< + (?:mailto:)? + ( + [-.\w]+ + \@ + [-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+ + ) + >"; + + text = Regex.Replace(text, pattern, new MatchEvaluator(EmailEvaluator), RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace); + + return text; + } + + private string HyperlinkEvaluator(Match match) + { + string link = match.Groups[1].Value; + return string.Format("{0}", link); + } + + private string EmailEvaluator(Match match) + { + string email = UnescapeSpecialChars(match.Groups[1].Value); + + /* + Input: an email address, e.g. "foo@example.com" + + Output: the email address as a mailto link, with each character + of the address encoded as either a decimal or hex entity, in + the hopes of foiling most address harvesting spam bots. E.g.: + + foo + @example.com + + Based by a filter by Matthew Wickline, posted to the BBEdit-Talk + mailing list: + + */ + email = "mailto:" + email; + + // leave ':' alone (to spot mailto: later) + email = Regex.Replace(email, @"([^\:])", new MatchEvaluator(EncodeEmailEvaluator)); + + email = string.Format("{0}", email); + + // strip the mailto: from the visible part + email = Regex.Replace(email, "\">.+?:", "\">"); + return email; + } + + private string EncodeEmailEvaluator(Match match) + { + char c = Convert.ToChar(match.Groups[1].Value); + + Random rnd = new Random(); + int r = rnd.Next(0, 100); + + // Original author note: + // Roughly 10% raw, 45% hex, 45% dec + // '@' *must* be encoded. I insist. + if (r > 90 && c != '@') return c.ToString(); + if (r < 45) return string.Format("&#x{0:x};", (int)c); + + return string.Format("&#x{0:x};", (int)c); + } + + #endregion + + #region EncodeAmpsAndAngles, EncodeBackslashEscapes, UnescapeSpecialChars, Outdent, UnslashQuotes + + /// + /// Smart processing for ampersands and angle brackets that need to be encoded. + /// + private string EncodeAmpsAndAngles(string text) + { + // Ampersand-encoding based entirely on Nat Irons's Amputator MT plugin: + // http://bumppo.net/projects/amputator/ + + text = Regex.Replace(text, @"&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)", "&"); + + // Encode naked <'s + text = Regex.Replace(text, @"<(?![a-z/?\$!])", "<", RegexOptions.IgnoreCase); + + return text; + } + + private string EncodeBackslashEscapes(string value) + { + // Must process escaped backslashes first. + foreach (string key in backslashEscapeTable.Keys) + value = value.Replace(key, backslashEscapeTable[key].ToString()); + + return value; + } + + /// + /// Swap back in all the special characters we've hidden. + /// + private string UnescapeSpecialChars(string text) + { + foreach (string key in escapeTable.Keys) + text = text.Replace(escapeTable[key].ToString(), key); + + return text; + } + + /// + /// Remove one level of line-leading tabs or spaces + /// + private string Outdent(string block) + { + return Regex.Replace(block, @"^(\t|[ ]{1," + tabWidth.ToString() + @"})", string.Empty, RegexOptions.Multiline); + } + #endregion + + #region Replace tabs with spaces and pad them to tab width + + private string Detab(string text) + { + // Inspired from a post by Bart Lateur: + // http://www.nntp.perl.org/group/perl.macperl.anyperl/154 + return Regex.Replace(text, @"^(.*?)\t", new MatchEvaluator(TabEvaluator), RegexOptions.Multiline); + } + + private string TabEvaluator(Match match) + { + string leading = match.Groups[1].Value; + return string.Concat(leading, RepeatString(" ", tabWidth - leading.Length % tabWidth)); + } + + #endregion + + #region Helper methods (RepeatString & ComputeMD5) + + /// + /// This is to emulate what's evailable in PHP + /// + /// + /// + /// + private static string RepeatString(string text, int count) + { + string res = null; + + for (int i = 0; i < count; i++) + res += text; + + return res; + } + + /// + /// Calculate an MD5 hash of an arbitrary string + /// + /// + /// + private static string ComputeMD5(string text) + { + MD5 algo = MD5.Create(); + byte[] plainText = Encoding.UTF8.GetBytes(text); + byte[] hashedText = algo.ComputeHash(plainText); + string res = null; + + foreach (byte b in hashedText) + res += b.ToString("x2"); + + return res; + } + #endregion + } +} \ No newline at end of file diff --git a/src/MarkdownSharp/MarkdownOptions.cs b/src/MarkdownSharp/MarkdownOptions.cs new file mode 100644 index 0000000..ce9620d --- /dev/null +++ b/src/MarkdownSharp/MarkdownOptions.cs @@ -0,0 +1,172 @@ +using System; +using System.Collections.Specialized; +using System.Configuration; +using System.Runtime.CompilerServices; +using System.Web.Configuration; + +namespace MarkdownSharp +{ + /// + /// Container for Markdown options. This class is immutable, create a new instance + /// if you want to change the options after construction. + /// + public class MarkdownOptions + { + /// + /// Default constructor. First loads default values, then + /// overrides them with any values specified in the configuration file. + /// Configuration values are specified in the <appSettings> + /// section of the config file and take the form Markdown.PropertyName + /// where PropertyName is any of the properties in this class. + /// + public MarkdownOptions() : this(true) { } + + /// + /// Sets all values to their defaults, and if loadFromConfigFile + /// is true it overrides them with configuration file values. + /// Configuration values are specified in the <appSettings> + /// section of the config file and take the form Markdown.PropertyName + /// where PropertyName is any of the properties in this class. + /// + /// True to override defaults with values from config file. + public MarkdownOptions(bool loadFromConfigFile) + : this(loadFromConfigFile, new[] { ConfigurationManager.AppSettings, WebConfigurationManager.AppSettings }) + { + } + + + /// + /// Constructor for internal use and unit testing. + /// + /// + /// + internal MarkdownOptions(bool loadFromConfigFile, NameValueCollection[] configProviders) + { + Defaults(); + if (!loadFromConfigFile) return; + + + foreach (var appSettings in configProviders) + { + foreach (string key in appSettings.Keys) + { + switch (key) + { + case "Markdown.AutoHyperlink": + AutoHyperlink = Convert.ToBoolean(appSettings[key]); + break; + case "Markdown.AutoNewlines": + AutoNewlines = Convert.ToBoolean(appSettings[key]); + break; + case "Markdown.EmptyElementSuffix": + EmptyElementSuffix = appSettings[key]; + break; + case "Markdown.EncodeProblemUrlCharacters": + EncodeProblemUrlCharacters = Convert.ToBoolean(appSettings[key]); + break; + case "Markdown.LinkEmails": + LinkEmails = Convert.ToBoolean(appSettings[key]); + break; + case "Markdown.NestDepth": + NestDepth = Convert.ToInt32(appSettings[key]); + break; + case "Markdown.StrictBoldItalic": + StrictBoldItalic = Convert.ToBoolean(appSettings[key]); + break; + case "Markdown.TabWidth": + TabWidth = Convert.ToInt32(appSettings[key]); + break; + } + } + } + } + + + /// + /// Sets all options explicitly and does not attempt to override them with values + /// from configuration file. + /// + /// + /// + /// + /// + /// + /// + /// + /// + public MarkdownOptions(bool autoHyperlink, bool autoNewlines, string emptyElementsSuffix, + bool encodeProblemUrlCharacters, bool linkEmails, int nestDepth, bool strictBoldItalic, + int tabWidth) + { + AutoHyperlink = autoHyperlink; + AutoNewlines = autoNewlines; + EmptyElementSuffix = emptyElementsSuffix; + EncodeProblemUrlCharacters = encodeProblemUrlCharacters; + LinkEmails = linkEmails; + NestDepth = nestDepth; + StrictBoldItalic = strictBoldItalic; + TabWidth = tabWidth; + } + + /// + /// Sets all fields to their default values + /// + private void Defaults() + { + AutoHyperlink = false; + AutoNewlines = false; + EmptyElementSuffix = " />"; + EncodeProblemUrlCharacters = false; + LinkEmails = true; + NestDepth = 6; + StrictBoldItalic = false; + TabWidth = 4; + } + + /// + /// when true, (most) bare plain URLs are auto-hyperlinked + /// WARNING: this is a significant deviation from the markdown spec + /// + public bool AutoHyperlink { get; private set; } + + /// + /// when true, RETURN becomes a literal newline + /// WARNING: this is a significant deviation from the markdown spec + /// + public bool AutoNewlines { get; private set; } + + /// + /// use ">" for HTML output, or " />" for XHTML output + /// + public string EmptyElementSuffix { get; private set; } + + /// + /// when true, problematic URL characters like [, ], (, and so forth will be encoded + /// WARNING: this is a significant deviation from the markdown spec + /// + public bool EncodeProblemUrlCharacters { get; private set; } + + /// + /// when false, email addresses will never be auto-linked + /// WARNING: this is a significant deviation from the markdown spec + /// + public bool LinkEmails { get; private set; } + + /// + /// maximum nested depth of [] and () supported by the transform + /// + public int NestDepth { get; private set; } + + /// + /// when true, bold and italic require non-word characters on either side + /// WARNING: this is a significant deviation from the markdown spec + /// + public bool StrictBoldItalic { get; private set; } + + /// + /// Tabs are automatically converted to spaces as part of the transform + /// this variable determines how "wide" those tabs become in spaces + /// + public int TabWidth { get; private set; } + } +} diff --git a/src/MarkdownSharp/MarkdownSharp.csproj b/src/MarkdownSharp/MarkdownSharp.csproj new file mode 100644 index 0000000..3f2ae8a --- /dev/null +++ b/src/MarkdownSharp/MarkdownSharp.csproj @@ -0,0 +1,95 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {37619116-CCE8-465A-8B1F-081CA53364BB} + Library + Properties + MarkdownSharp + MarkdownSharp + v3.5 + 512 + + + + + 3.5 + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + AllRules.ruleset + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + AllRules.ruleset + + + + + + 3.5 + + + + + + + + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + \ No newline at end of file diff --git a/src/MarkdownWin/MarkdownWin.csproj b/src/MarkdownWin/MarkdownWin.csproj index ac49640..4a41fb8 100644 --- a/src/MarkdownWin/MarkdownWin.csproj +++ b/src/MarkdownWin/MarkdownWin.csproj @@ -40,9 +40,6 @@ - - ..\..\packages\MarkdownSharp.1.13.0.0\lib\35\MarkdownSharp.dll - @@ -95,6 +92,12 @@ + + + {37619116-CCE8-465A-8B1F-081CA53364BB} + MarkdownSharp + +