From 7cc5b73ea7c314d87eb3eabe8686d49b7980ed5d Mon Sep 17 00:00:00 2001 From: rekado Date: Fri, 26 Oct 2012 22:58:15 +0800 Subject: [PATCH 01/10] New extension: strike through with two tildes --- markdown_output.c | 5 +++++ markdown_parser.leg | 13 ++++++++++++- markdown_peg.h | 1 + 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/markdown_output.c b/markdown_output.c index b814a4ec..ef4435e0 100644 --- a/markdown_output.c +++ b/markdown_output.c @@ -212,6 +212,11 @@ static void print_html_element(GString *out, element *elt, bool obfuscate) { print_html_element_list(out, elt->children, obfuscate); g_string_append_printf(out, ""); break; + case STRIKE: + g_string_append_printf(out, ""); + print_html_element_list(out, elt->children, obfuscate); + g_string_append_printf(out, ""); + break; case LIST: print_html_element_list(out, elt->children, obfuscate); break; diff --git a/markdown_parser.leg b/markdown_parser.leg index 2a98877e..3d935d0c 100644 --- a/markdown_parser.leg +++ b/markdown_parser.leg @@ -389,6 +389,7 @@ Inline = Str | Space | Strong | Emph + | Strike | Image | Link | NoteReference @@ -441,6 +442,7 @@ Symbol = < SpecialChar > UlOrStarLine = (UlLine | StarLine) { $$ = mk_str(yytext); } StarLine = < "****" '*'* > | < Spacechar '*'+ &Spacechar > UlLine = < "____" '_'* > | < Spacechar '_'+ &Spacechar > +TildeLine = < "~~~~" '~'* > | < Spacechar '~'+ &Spacechar > Emph = EmphStar | EmphUl @@ -482,6 +484,15 @@ StrongUl = TwoUlOpen TwoUlClose { a = cons($$, a); } { $$ = mk_list(STRONG, a); } +TwoTildeOpen = !TildeLine "~~" !Spacechar !Newline +TwoTildeClose = !Spacechar !Newline a:Inline "~~" { $$ = a; } + +Strike = TwoTildeOpen + a:StartList + ( !TwoTildeClose Inline { a = cons($$, a); } )* + TwoTildeClose { a = cons($$, a); } + { $$ = mk_list(STRIKE, a); } + Image = '!' ( ExplicitLink | ReferenceLink ) { if ($$->key == LINK) { $$->key = IMAGE; @@ -622,7 +633,7 @@ Nonspacechar = !Spacechar !Newline . Newline = '\n' | '\r' '\n'? Sp = Spacechar* Spnl = Sp (Newline Sp)? -SpecialChar = '*' | '_' | '`' | '&' | '[' | ']' | '(' | ')' | '<' | '!' | '#' | '\\' | '\'' | '"' | ExtendedSpecialChar +SpecialChar = '~' | '*' | '_' | '`' | '&' | '[' | ']' | '(' | ')' | '<' | '!' | '#' | '\\' | '\'' | '"' | ExtendedSpecialChar NormalChar = !( SpecialChar | Spacechar | Newline ) . NonAlphanumeric = [\000-\057\072-\100\133-\140\173-\177] Alphanumeric = [0-9A-Za-z] | '\200' | '\201' | '\202' | '\203' | '\204' | '\205' | '\206' | '\207' | '\210' | '\211' | '\212' | '\213' | '\214' | '\215' | '\216' | '\217' | '\220' | '\221' | '\222' | '\223' | '\224' | '\225' | '\226' | '\227' | '\230' | '\231' | '\232' | '\233' | '\234' | '\235' | '\236' | '\237' | '\240' | '\241' | '\242' | '\243' | '\244' | '\245' | '\246' | '\247' | '\250' | '\251' | '\252' | '\253' | '\254' | '\255' | '\256' | '\257' | '\260' | '\261' | '\262' | '\263' | '\264' | '\265' | '\266' | '\267' | '\270' | '\271' | '\272' | '\273' | '\274' | '\275' | '\276' | '\277' | '\300' | '\301' | '\302' | '\303' | '\304' | '\305' | '\306' | '\307' | '\310' | '\311' | '\312' | '\313' | '\314' | '\315' | '\316' | '\317' | '\320' | '\321' | '\322' | '\323' | '\324' | '\325' | '\326' | '\327' | '\330' | '\331' | '\332' | '\333' | '\334' | '\335' | '\336' | '\337' | '\340' | '\341' | '\342' | '\343' | '\344' | '\345' | '\346' | '\347' | '\350' | '\351' | '\352' | '\353' | '\354' | '\355' | '\356' | '\357' | '\360' | '\361' | '\362' | '\363' | '\364' | '\365' | '\366' | '\367' | '\370' | '\371' | '\372' | '\373' | '\374' | '\375' | '\376' | '\377' diff --git a/markdown_peg.h b/markdown_peg.h index d70c1abd..c03d1704 100644 --- a/markdown_peg.h +++ b/markdown_peg.h @@ -37,6 +37,7 @@ enum keys { LIST, /* A generic list of values. For ordered and bullet lists, HTML, EMPH, STRONG, + STRIKE, PLAIN, PARA, LISTITEM, From b59fb98b040600a6869f9f2799eaba9ba3f73d65 Mon Sep 17 00:00:00 2001 From: rekado Date: Sat, 27 Oct 2012 12:53:42 +0800 Subject: [PATCH 02/10] require space between "#" and heading text --- markdown_parser.leg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/markdown_parser.leg b/markdown_parser.leg index 3d935d0c..a0d15219 100644 --- a/markdown_parser.leg +++ b/markdown_parser.leg @@ -53,7 +53,7 @@ Plain = a:Inlines AtxInline = !Newline !(Sp? '#'* Sp Newline) Inline -AtxStart = < ( "######" | "#####" | "####" | "###" | "##" | "#" ) > +AtxStart = < ( "######" | "#####" | "####" | "###" | "##" | "#" ) ' '+ > { $$ = mk_element(H1 + (strlen(yytext) - 1)); } AtxHeading = s:AtxStart Sp? a:StartList ( AtxInline { a = cons($$, a); } )+ (Sp? '#'* Sp)? Newline From 5480b07e5d2e765cfd7a4e0c9b53c745947b4703 Mon Sep 17 00:00:00 2001 From: rekado Date: Sat, 27 Oct 2012 12:53:42 +0800 Subject: [PATCH 03/10] require space between "#" and heading text --- markdown_parser.leg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/markdown_parser.leg b/markdown_parser.leg index 2a98877e..c05c0045 100644 --- a/markdown_parser.leg +++ b/markdown_parser.leg @@ -56,7 +56,7 @@ AtxInline = !Newline !(Sp? '#'* Sp Newline) Inline AtxStart = < ( "######" | "#####" | "####" | "###" | "##" | "#" ) > { $$ = mk_element(H1 + (strlen(yytext) - 1)); } -AtxHeading = s:AtxStart Sp? a:StartList ( AtxInline { a = cons($$, a); } )+ (Sp? '#'* Sp)? Newline +AtxHeading = s:AtxStart Spacechar+ a:StartList ( AtxInline { a = cons($$, a); } )+ (Sp? '#'* Sp)? Newline { $$ = mk_list(s->key, a); free(s); } From 9556c5467c1cd60448de8337cfff3bbbebbc7e35 Mon Sep 17 00:00:00 2001 From: rekado Date: Sat, 27 Oct 2012 18:26:20 +0800 Subject: [PATCH 04/10] disable strike-through extension by default --- markdown.c | 8 ++++++-- markdown_lib.h | 3 ++- markdown_parser.leg | 7 ++++--- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/markdown.c b/markdown.c index 8a45a593..b9630cbe 100644 --- a/markdown.c +++ b/markdown.c @@ -71,6 +71,7 @@ int main(int argc, char * argv[]) { static gboolean opt_notes = FALSE; static gboolean opt_filter_html = FALSE; static gboolean opt_filter_styles = FALSE; + static gboolean opt_strike = FALSE; static gboolean opt_allext = FALSE; static GOptionEntry entries[] = @@ -87,8 +88,9 @@ int main(int argc, char * argv[]) { /* Options to active syntax extensions. These appear separately in --help. */ static GOptionEntry ext_entries[] = { - { "smart", 0, 0, G_OPTION_ARG_NONE, &opt_smart, "use smart typography extension", NULL }, - { "notes", 0, 0, G_OPTION_ARG_NONE, &opt_notes, "use notes extension", NULL }, + { "smart", 0, 0, G_OPTION_ARG_NONE, &opt_smart, "use smart typography extension", NULL }, + { "notes", 0, 0, G_OPTION_ARG_NONE, &opt_notes, "use notes extension", NULL }, + { "strike", 0, 0, G_OPTION_ARG_NONE, &opt_strike, "use strike-through extension", NULL }, { NULL } }; @@ -127,6 +129,8 @@ int main(int argc, char * argv[]) { extensions = extensions | EXT_FILTER_HTML; if (opt_filter_styles) extensions = extensions | EXT_FILTER_STYLES; + if (opt_strike) + extensions = extensions | EXT_STRIKE; if (opt_to == NULL) output_format = HTML_FORMAT; diff --git a/markdown_lib.h b/markdown_lib.h index bcd6e43c..17caf5bb 100644 --- a/markdown_lib.h +++ b/markdown_lib.h @@ -6,7 +6,8 @@ enum markdown_extensions { EXT_SMART = 0x01, EXT_NOTES = 0x02, EXT_FILTER_HTML = 0x04, - EXT_FILTER_STYLES = 0x08 + EXT_FILTER_STYLES = 0x08, + EXT_STRIKE = 0x10 }; enum markdown_formats { diff --git a/markdown_parser.leg b/markdown_parser.leg index 3d935d0c..480da1b8 100644 --- a/markdown_parser.leg +++ b/markdown_parser.leg @@ -484,10 +484,11 @@ StrongUl = TwoUlOpen TwoUlClose { a = cons($$, a); } { $$ = mk_list(STRONG, a); } -TwoTildeOpen = !TildeLine "~~" !Spacechar !Newline -TwoTildeClose = !Spacechar !Newline a:Inline "~~" { $$ = a; } +TwoTildeOpen = &{ extension(EXT_STRIKE) } !TildeLine "~~" !Spacechar !Newline +TwoTildeClose = &{ extension(EXT_STRIKE) } !Spacechar !Newline a:Inline "~~" { $$ = a; } -Strike = TwoTildeOpen +Strike = &{ extension(EXT_STRIKE) } + TwoTildeOpen a:StartList ( !TwoTildeClose Inline { a = cons($$, a); } )* TwoTildeClose { a = cons($$, a); } From 29862b258f6ba0772c9eb23911273a17d97dcbfb Mon Sep 17 00:00:00 2001 From: rekado Date: Sat, 27 Oct 2012 20:13:02 +0800 Subject: [PATCH 05/10] New extension: autolink for converting bare URLs to links --- README.markdown | 3 +++ markdown.c | 10 +++++++--- markdown_lib.h | 3 ++- markdown_parser.leg | 7 ++++--- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/README.markdown b/README.markdown index 1d491864..7700a9bc 100644 --- a/README.markdown +++ b/README.markdown @@ -134,6 +134,8 @@ The `--smart` extension provides "smart quotes", dashes, and ellipses. The `--notes` extension provides a footnote syntax like that of Pandoc or PHP Markdown Extra. +The `--autolink` extension converts bare URLs into links. + Using the library ================= @@ -160,6 +162,7 @@ bitwise `&` operator and the following constants: - `EXT_NOTES` turns on footnote syntax. [Pandoc's footnote syntax][] is used here. - `EXT_FILTER_HTML` filters out raw HTML (except for styles). - `EXT_FILTER_STYLES` filters out styles in HTML. + - `EXT_AUTOLINK` turns bare URLs into links. [Pandoc's footnote syntax]: http://johnmacfarlane.net/pandoc/README.html#footnotes diff --git a/markdown.c b/markdown.c index b9630cbe..b08fb805 100644 --- a/markdown.c +++ b/markdown.c @@ -72,6 +72,7 @@ int main(int argc, char * argv[]) { static gboolean opt_filter_html = FALSE; static gboolean opt_filter_styles = FALSE; static gboolean opt_strike = FALSE; + static gboolean opt_autolink = FALSE; static gboolean opt_allext = FALSE; static GOptionEntry entries[] = @@ -88,9 +89,10 @@ int main(int argc, char * argv[]) { /* Options to active syntax extensions. These appear separately in --help. */ static GOptionEntry ext_entries[] = { - { "smart", 0, 0, G_OPTION_ARG_NONE, &opt_smart, "use smart typography extension", NULL }, - { "notes", 0, 0, G_OPTION_ARG_NONE, &opt_notes, "use notes extension", NULL }, - { "strike", 0, 0, G_OPTION_ARG_NONE, &opt_strike, "use strike-through extension", NULL }, + { "smart", 0, 0, G_OPTION_ARG_NONE, &opt_smart, "use smart typography extension", NULL }, + { "notes", 0, 0, G_OPTION_ARG_NONE, &opt_notes, "use notes extension", NULL }, + { "strike", 0, 0, G_OPTION_ARG_NONE, &opt_strike, "use strike-through extension", NULL }, + { "autolink", 0, 0, G_OPTION_ARG_NONE, &opt_autolink, "autolink bare URLs", NULL }, { NULL } }; @@ -131,6 +133,8 @@ int main(int argc, char * argv[]) { extensions = extensions | EXT_FILTER_STYLES; if (opt_strike) extensions = extensions | EXT_STRIKE; + if (opt_autolink) + extensions = extensions | EXT_AUTOLINK; if (opt_to == NULL) output_format = HTML_FORMAT; diff --git a/markdown_lib.h b/markdown_lib.h index 17caf5bb..a26db2c2 100644 --- a/markdown_lib.h +++ b/markdown_lib.h @@ -7,7 +7,8 @@ enum markdown_extensions { EXT_NOTES = 0x02, EXT_FILTER_HTML = 0x04, EXT_FILTER_STYLES = 0x08, - EXT_STRIKE = 0x10 + EXT_STRIKE = 0x10, + EXT_AUTOLINK = 0x20 }; enum markdown_formats { diff --git a/markdown_parser.leg b/markdown_parser.leg index 421c0929..d30648de 100644 --- a/markdown_parser.leg +++ b/markdown_parser.leg @@ -383,8 +383,7 @@ Inlines = a:StartList ( !Endline Inline { a = cons($$, a); } | c:Endline &Inline { a = cons(c, a); } )+ Endline? { $$ = mk_list(LIST, a); } -Inline = Str - | Endline +Inline = Endline | UlOrStarLine | Space | Strong @@ -392,6 +391,7 @@ Inline = Str | Strike | Image | Link + | Str | NoteReference | InlineNote | Code @@ -557,7 +557,8 @@ TitleDouble = '"' < ( !( '"' Sp ( ')' | Newline ) ) . )* > '"' AutoLink = AutoLinkUrl | AutoLinkEmail -AutoLinkUrl = '<' < [A-Za-z]+ "://" ( !Newline !'>' . )+ > '>' +AutoLinkUrl = ( '<' < [A-Za-z]+ "://" ( !Newline !'>' . )+ > '>' + | &{ extension(EXT_AUTOLINK) } < [A-Za-z]+ "://" ( !Newline Nonspacechar )+ > ) { $$ = mk_link(mk_str(yytext), yytext, ""); } AutoLinkEmail = '<' ( "mailto:" )? < [-A-Za-z0-9+_./!%~$]+ '@' ( !Newline !'>' . )+ > '>' From 4d6c94210d3e44ea2a5aa94307950b613000c0f3 Mon Sep 17 00:00:00 2001 From: rekado Date: Sat, 27 Oct 2012 20:13:02 +0800 Subject: [PATCH 06/10] New extension: autolink for converting bare URLs to links --- README.markdown | 3 +++ markdown.c | 10 +++++++--- markdown_lib.h | 3 ++- markdown_parser.leg | 7 ++++--- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/README.markdown b/README.markdown index 1d491864..7700a9bc 100644 --- a/README.markdown +++ b/README.markdown @@ -134,6 +134,8 @@ The `--smart` extension provides "smart quotes", dashes, and ellipses. The `--notes` extension provides a footnote syntax like that of Pandoc or PHP Markdown Extra. +The `--autolink` extension converts bare URLs into links. + Using the library ================= @@ -160,6 +162,7 @@ bitwise `&` operator and the following constants: - `EXT_NOTES` turns on footnote syntax. [Pandoc's footnote syntax][] is used here. - `EXT_FILTER_HTML` filters out raw HTML (except for styles). - `EXT_FILTER_STYLES` filters out styles in HTML. + - `EXT_AUTOLINK` turns bare URLs into links. [Pandoc's footnote syntax]: http://johnmacfarlane.net/pandoc/README.html#footnotes diff --git a/markdown.c b/markdown.c index b9630cbe..b08fb805 100644 --- a/markdown.c +++ b/markdown.c @@ -72,6 +72,7 @@ int main(int argc, char * argv[]) { static gboolean opt_filter_html = FALSE; static gboolean opt_filter_styles = FALSE; static gboolean opt_strike = FALSE; + static gboolean opt_autolink = FALSE; static gboolean opt_allext = FALSE; static GOptionEntry entries[] = @@ -88,9 +89,10 @@ int main(int argc, char * argv[]) { /* Options to active syntax extensions. These appear separately in --help. */ static GOptionEntry ext_entries[] = { - { "smart", 0, 0, G_OPTION_ARG_NONE, &opt_smart, "use smart typography extension", NULL }, - { "notes", 0, 0, G_OPTION_ARG_NONE, &opt_notes, "use notes extension", NULL }, - { "strike", 0, 0, G_OPTION_ARG_NONE, &opt_strike, "use strike-through extension", NULL }, + { "smart", 0, 0, G_OPTION_ARG_NONE, &opt_smart, "use smart typography extension", NULL }, + { "notes", 0, 0, G_OPTION_ARG_NONE, &opt_notes, "use notes extension", NULL }, + { "strike", 0, 0, G_OPTION_ARG_NONE, &opt_strike, "use strike-through extension", NULL }, + { "autolink", 0, 0, G_OPTION_ARG_NONE, &opt_autolink, "autolink bare URLs", NULL }, { NULL } }; @@ -131,6 +133,8 @@ int main(int argc, char * argv[]) { extensions = extensions | EXT_FILTER_STYLES; if (opt_strike) extensions = extensions | EXT_STRIKE; + if (opt_autolink) + extensions = extensions | EXT_AUTOLINK; if (opt_to == NULL) output_format = HTML_FORMAT; diff --git a/markdown_lib.h b/markdown_lib.h index 17caf5bb..a26db2c2 100644 --- a/markdown_lib.h +++ b/markdown_lib.h @@ -7,7 +7,8 @@ enum markdown_extensions { EXT_NOTES = 0x02, EXT_FILTER_HTML = 0x04, EXT_FILTER_STYLES = 0x08, - EXT_STRIKE = 0x10 + EXT_STRIKE = 0x10, + EXT_AUTOLINK = 0x20 }; enum markdown_formats { diff --git a/markdown_parser.leg b/markdown_parser.leg index 480da1b8..180062dd 100644 --- a/markdown_parser.leg +++ b/markdown_parser.leg @@ -383,8 +383,7 @@ Inlines = a:StartList ( !Endline Inline { a = cons($$, a); } | c:Endline &Inline { a = cons(c, a); } )+ Endline? { $$ = mk_list(LIST, a); } -Inline = Str - | Endline +Inline = Endline | UlOrStarLine | Space | Strong @@ -392,6 +391,7 @@ Inline = Str | Strike | Image | Link + | Str | NoteReference | InlineNote | Code @@ -557,7 +557,8 @@ TitleDouble = '"' < ( !( '"' Sp ( ')' | Newline ) ) . )* > '"' AutoLink = AutoLinkUrl | AutoLinkEmail -AutoLinkUrl = '<' < [A-Za-z]+ "://" ( !Newline !'>' . )+ > '>' +AutoLinkUrl = ( '<' < [A-Za-z]+ "://" ( !Newline !'>' . )+ > '>' + | &{ extension(EXT_AUTOLINK) } < [A-Za-z]+ "://" ( !Newline Nonspacechar )+ > ) { $$ = mk_link(mk_str(yytext), yytext, ""); } AutoLinkEmail = '<' ( "mailto:" )? < [-A-Za-z0-9+_./!%~$]+ '@' ( !Newline !'>' . )+ > '>' From 8d06016b461f451f70940888258f235405888b28 Mon Sep 17 00:00:00 2001 From: rekado Date: Sat, 27 Oct 2012 21:04:00 +0800 Subject: [PATCH 07/10] fix problems with explicit links and autolink extension --- markdown_parser.leg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/markdown_parser.leg b/markdown_parser.leg index d30648de..0f6cfc42 100644 --- a/markdown_parser.leg +++ b/markdown_parser.leg @@ -558,7 +558,7 @@ TitleDouble = '"' < ( !( '"' Sp ( ')' | Newline ) ) . )* > '"' AutoLink = AutoLinkUrl | AutoLinkEmail AutoLinkUrl = ( '<' < [A-Za-z]+ "://" ( !Newline !'>' . )+ > '>' - | &{ extension(EXT_AUTOLINK) } < [A-Za-z]+ "://" ( !Newline Nonspacechar )+ > ) + | &{ extension(EXT_AUTOLINK) } !'[' < [A-Za-z]+ "://" ( !Newline !']' Nonspacechar )+ > ) { $$ = mk_link(mk_str(yytext), yytext, ""); } AutoLinkEmail = '<' ( "mailto:" )? < [-A-Za-z0-9+_./!%~$]+ '@' ( !Newline !'>' . )+ > '>' From 594819f2481c33b9e4e0389c4b79036323143985 Mon Sep 17 00:00:00 2001 From: rekado Date: Sat, 27 Oct 2012 21:04:00 +0800 Subject: [PATCH 08/10] fix problems with explicit links and autolink extension --- markdown_parser.leg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/markdown_parser.leg b/markdown_parser.leg index 180062dd..f5fd2de4 100644 --- a/markdown_parser.leg +++ b/markdown_parser.leg @@ -558,7 +558,7 @@ TitleDouble = '"' < ( !( '"' Sp ( ')' | Newline ) ) . )* > '"' AutoLink = AutoLinkUrl | AutoLinkEmail AutoLinkUrl = ( '<' < [A-Za-z]+ "://" ( !Newline !'>' . )+ > '>' - | &{ extension(EXT_AUTOLINK) } < [A-Za-z]+ "://" ( !Newline Nonspacechar )+ > ) + | &{ extension(EXT_AUTOLINK) } !'[' < [A-Za-z]+ "://" ( !Newline !']' Nonspacechar )+ > ) { $$ = mk_link(mk_str(yytext), yytext, ""); } AutoLinkEmail = '<' ( "mailto:" )? < [-A-Za-z0-9+_./!%~$]+ '@' ( !Newline !'>' . )+ > '>' From 3be9c07a10855b145f9d41954d8c289655433315 Mon Sep 17 00:00:00 2001 From: rekado Date: Sun, 28 Oct 2012 09:18:24 +0800 Subject: [PATCH 09/10] New extension: hard wrap Insert linebreaks inside paragraphs where the origin Markdown document had newlines (by default, Markdown ignores these newlines). EXT_HARD_WRAP --hardwrap --- markdown.c | 8 ++++++-- markdown_lib.h | 3 ++- markdown_parser.leg | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/markdown.c b/markdown.c index 8a45a593..7c98a6ea 100644 --- a/markdown.c +++ b/markdown.c @@ -71,6 +71,7 @@ int main(int argc, char * argv[]) { static gboolean opt_notes = FALSE; static gboolean opt_filter_html = FALSE; static gboolean opt_filter_styles = FALSE; + static gboolean opt_hardwrap = FALSE; static gboolean opt_allext = FALSE; static GOptionEntry entries[] = @@ -87,8 +88,9 @@ int main(int argc, char * argv[]) { /* Options to active syntax extensions. These appear separately in --help. */ static GOptionEntry ext_entries[] = { - { "smart", 0, 0, G_OPTION_ARG_NONE, &opt_smart, "use smart typography extension", NULL }, - { "notes", 0, 0, G_OPTION_ARG_NONE, &opt_notes, "use notes extension", NULL }, + { "smart", 0, 0, G_OPTION_ARG_NONE, &opt_smart, "use smart typography extension", NULL }, + { "notes", 0, 0, G_OPTION_ARG_NONE, &opt_notes, "use notes extension", NULL }, + { "hardwrap", 0, 0, G_OPTION_ARG_NONE, &opt_hardwrap, "respect linebreaks in paragraphs", NULL }, { NULL } }; @@ -127,6 +129,8 @@ int main(int argc, char * argv[]) { extensions = extensions | EXT_FILTER_HTML; if (opt_filter_styles) extensions = extensions | EXT_FILTER_STYLES; + if (opt_hardwrap) + extensions = extensions | EXT_HARD_WRAP; if (opt_to == NULL) output_format = HTML_FORMAT; diff --git a/markdown_lib.h b/markdown_lib.h index bcd6e43c..a48f1068 100644 --- a/markdown_lib.h +++ b/markdown_lib.h @@ -6,7 +6,8 @@ enum markdown_extensions { EXT_SMART = 0x01, EXT_NOTES = 0x02, EXT_FILTER_HTML = 0x04, - EXT_FILTER_STYLES = 0x08 + EXT_FILTER_STYLES = 0x08, + EXT_HARD_WRAP = 0x40 }; enum markdown_formats { diff --git a/markdown_parser.leg b/markdown_parser.leg index 2a98877e..87dfddd0 100644 --- a/markdown_parser.leg +++ b/markdown_parser.leg @@ -430,7 +430,7 @@ NormalEndline = Sp Newline !BlankLine !'>' !AtxStart TerminalEndline = Sp Newline Eof { $$ = NULL; } -LineBreak = " " NormalEndline +LineBreak = ( " " NormalEndline | &{ extension(EXT_HARD_WRAP) } NormalEndline ) { $$ = mk_element(LINEBREAK); } Symbol = < SpecialChar > From 1bb290c66bf80bd858833f9c8bbab084a49b3cd3 Mon Sep 17 00:00:00 2001 From: rekado Date: Wed, 7 Nov 2012 18:25:43 +0800 Subject: [PATCH 10/10] disable autolinking within labels --- markdown_parser.leg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/markdown_parser.leg b/markdown_parser.leg index 996c2430..3b66e8d2 100644 --- a/markdown_parser.leg +++ b/markdown_parser.leg @@ -562,7 +562,7 @@ TitleDouble = '"' < ( !( '"' Sp ( ')' | Newline ) ) . )* > '"' AutoLink = AutoLinkUrl | AutoLinkEmail AutoLinkUrl = ( '<' < [A-Za-z]+ "://" ( !Newline !'>' . )+ > '>' - | &{ extension(EXT_AUTOLINK) } !'[' < [A-Za-z]+ "://" ( !Newline !']' Nonspacechar )+ > ) + | &{ extension(EXT_AUTOLINK) } !'[' < [A-Za-z]+ "://" ( !Newline !']' Nonspacechar )+ > !']' ) { $$ = mk_link(mk_str(yytext), yytext, ""); } AutoLinkEmail = '<' ( "mailto:" )? < [-A-Za-z0-9+_./!%~$]+ '@' ( !Newline !'>' . )+ > '>'