From fad5df79dfa2a2dc41891f4d9b1e1b859e4ad821 Mon Sep 17 00:00:00 2001 From: Doug Coleman <doug.coleman@gmail.com> Date: Fri, 23 May 2008 23:33:20 -0500 Subject: [PATCH] handle \r\n,\r like \n --- extra/farkup/farkup-tests.factor | 8 ++++++++ extra/farkup/farkup.factor | 19 +++++++++++-------- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/extra/farkup/farkup-tests.factor b/extra/farkup/farkup-tests.factor index 7176486f8e..b6e46cfe7d 100755 --- a/extra/farkup/farkup-tests.factor +++ b/extra/farkup/farkup-tests.factor @@ -16,10 +16,18 @@ IN: farkup.tests [ "<p>**</p>" ] [ "\\**" convert-farkup ] unit-test [ "" ] [ "\n\n" convert-farkup ] unit-test +[ "" ] [ "\r\n\r\n" convert-farkup ] unit-test +[ "" ] [ "\r\r\r\r" convert-farkup ] unit-test +[ "\n" ] [ "\r\r\r" convert-farkup ] unit-test [ "\n" ] [ "\n\n\n" convert-farkup ] unit-test [ "<p>foo</p><p>bar</p>" ] [ "foo\n\nbar" convert-farkup ] unit-test +[ "<p>foo</p><p>bar</p>" ] [ "foo\r\n\r\nbar" convert-farkup ] unit-test +[ "<p>foo</p><p>bar</p>" ] [ "foo\r\rbar" convert-farkup ] unit-test +[ "<p>foo</p><p>bar</p>" ] [ "foo\r\r\nbar" convert-farkup ] unit-test [ "\n<p>bar\n</p>" ] [ "\nbar\n" convert-farkup ] unit-test +[ "\n<p>bar\n</p>" ] [ "\rbar\r" convert-farkup ] unit-test +[ "\n<p>bar\n</p>" ] [ "\r\nbar\r\n" convert-farkup ] unit-test [ "<p>foo</p>\n<p>bar</p>" ] [ "foo\n\n\nbar" convert-farkup ] unit-test diff --git a/extra/farkup/farkup.factor b/extra/farkup/farkup.factor index 15b7b4b72c..51a5a10bd9 100755 --- a/extra/farkup/farkup.factor +++ b/extra/farkup/farkup.factor @@ -9,14 +9,14 @@ IN: farkup <PRIVATE : delimiters ( -- string ) - "*_^~%[-=|\\\n" ; inline + "*_^~%[-=|\\\r\n" ; inline MEMO: text ( -- parser ) [ delimiters member? not ] satisfy repeat1 [ >string escape-string ] action ; MEMO: delimiter ( -- parser ) - [ dup delimiters member? swap "\n=" member? not and ] satisfy + [ dup delimiters member? swap "\r\n=" member? not and ] satisfy [ 1string ] action ; : surround-with-foo ( string tag -- seq ) @@ -37,8 +37,11 @@ MEMO: emphasis ( -- parser ) "_" "em" delimited ; MEMO: superscript ( -- parser ) "^" "sup" delimited ; MEMO: subscript ( -- parser ) "~" "sub" delimited ; MEMO: inline-code ( -- parser ) "%" "code" delimited ; -MEMO: nl ( -- parser ) "\n" token ; -MEMO: 2nl ( -- parser ) "\n\n" token hide ; +MEMO: nl ( -- parser ) + "\r\n" token [ drop "\n" ] action + "\r" token [ drop "\n" ] action + "\n" token 3choice ; +MEMO: 2nl ( -- parser ) nl hide nl hide 2seq ; MEMO: h1 ( -- parser ) "=" "h1" delimited ; MEMO: h2 ( -- parser ) "==" "h2" delimited ; MEMO: h3 ( -- parser ) "===" "h3" delimited ; @@ -119,7 +122,7 @@ MEMO: list-item ( -- parser ) ] seq* [ "li" surround-with-foo ] action ; MEMO: list ( -- parser ) - list-item "\n" token hide list-of + list-item nl hide list-of [ "ul" surround-with-foo ] action ; MEMO: table-column ( -- parser ) @@ -151,8 +154,8 @@ MEMO: line ( -- parser ) MEMO: paragraph ( -- parser ) line - "\n" token over 2seq repeat0 - "\n" token "\n" token ensure-not 2seq optional 3seq + nl over 2seq repeat0 + nl nl ensure-not 2seq optional 3seq [ dup [ dup string? not swap [ blank? ] all? or ] deep-all? [ "<p>" swap "</p>" 3array ] unless @@ -163,7 +166,7 @@ PRIVATE> PEG: parse-farkup ( -- parser ) [ list , table , h1 , h2 , h3 , h4 , code , paragraph , 2nl , nl , - ] choice* repeat0 "\n" token optional 2seq ; + ] choice* repeat0 nl optional 2seq ; : write-farkup ( parse-result -- ) [ dup string? [ write ] [ drop ] if ] deep-each ;