handle \r\n,\r like \n
							parent
							
								
									4186034de6
								
							
						
					
					
						commit
						fad5df79df
					
				| 
						 | 
					@ -16,10 +16,18 @@ IN: farkup.tests
 | 
				
			||||||
[ "<p>**</p>" ] [ "\\**" convert-farkup ] unit-test
 | 
					[ "<p>**</p>" ] [ "\\**" convert-farkup ] unit-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[ "" ] [ "\n\n" 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
 | 
					[ "\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\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>" ] [ "\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
 | 
					[ "<p>foo</p>\n<p>bar</p>" ] [ "foo\n\n\nbar" convert-farkup ] unit-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9,14 +9,14 @@ IN: farkup
 | 
				
			||||||
<PRIVATE
 | 
					<PRIVATE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: delimiters ( -- string )
 | 
					: delimiters ( -- string )
 | 
				
			||||||
    "*_^~%[-=|\\\n" ; inline
 | 
					    "*_^~%[-=|\\\r\n" ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MEMO: text ( -- parser )
 | 
					MEMO: text ( -- parser )
 | 
				
			||||||
    [ delimiters member? not ] satisfy repeat1
 | 
					    [ delimiters member? not ] satisfy repeat1
 | 
				
			||||||
    [ >string escape-string ] action ;
 | 
					    [ >string escape-string ] action ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MEMO: delimiter ( -- parser )
 | 
					MEMO: delimiter ( -- parser )
 | 
				
			||||||
    [ dup delimiters member? swap "\n=" member? not and ] satisfy
 | 
					    [ dup delimiters member? swap "\r\n=" member? not and ] satisfy
 | 
				
			||||||
    [ 1string ] action ;
 | 
					    [ 1string ] action ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: surround-with-foo ( string tag -- seq )
 | 
					: surround-with-foo ( string tag -- seq )
 | 
				
			||||||
| 
						 | 
					@ -37,8 +37,11 @@ MEMO: emphasis ( -- parser ) "_" "em" delimited ;
 | 
				
			||||||
MEMO: superscript ( -- parser ) "^" "sup" delimited ;
 | 
					MEMO: superscript ( -- parser ) "^" "sup" delimited ;
 | 
				
			||||||
MEMO: subscript ( -- parser ) "~" "sub" delimited ;
 | 
					MEMO: subscript ( -- parser ) "~" "sub" delimited ;
 | 
				
			||||||
MEMO: inline-code ( -- parser ) "%" "code" delimited ;
 | 
					MEMO: inline-code ( -- parser ) "%" "code" delimited ;
 | 
				
			||||||
MEMO: nl ( -- parser ) "\n" token ;
 | 
					MEMO: nl ( -- parser )
 | 
				
			||||||
MEMO: 2nl ( -- parser ) "\n\n" token hide ;
 | 
					    "\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: h1 ( -- parser ) "=" "h1" delimited ;
 | 
				
			||||||
MEMO: h2 ( -- parser ) "==" "h2" delimited ;
 | 
					MEMO: h2 ( -- parser ) "==" "h2" delimited ;
 | 
				
			||||||
MEMO: h3 ( -- parser ) "===" "h3" delimited ;
 | 
					MEMO: h3 ( -- parser ) "===" "h3" delimited ;
 | 
				
			||||||
| 
						 | 
					@ -119,7 +122,7 @@ MEMO: list-item ( -- parser )
 | 
				
			||||||
    ] seq* [ "li" surround-with-foo ] action ;
 | 
					    ] seq* [ "li" surround-with-foo ] action ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MEMO: list ( -- parser )
 | 
					MEMO: list ( -- parser )
 | 
				
			||||||
    list-item "\n" token hide list-of
 | 
					    list-item nl hide list-of
 | 
				
			||||||
    [ "ul" surround-with-foo ] action ;
 | 
					    [ "ul" surround-with-foo ] action ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MEMO: table-column ( -- parser )
 | 
					MEMO: table-column ( -- parser )
 | 
				
			||||||
| 
						 | 
					@ -151,8 +154,8 @@ MEMO: line ( -- parser )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MEMO: paragraph ( -- parser )
 | 
					MEMO: paragraph ( -- parser )
 | 
				
			||||||
    line
 | 
					    line
 | 
				
			||||||
    "\n" token over 2seq repeat0
 | 
					    nl over 2seq repeat0
 | 
				
			||||||
    "\n" token "\n" token ensure-not 2seq optional 3seq
 | 
					    nl nl ensure-not 2seq optional 3seq
 | 
				
			||||||
    [
 | 
					    [
 | 
				
			||||||
        dup [ dup string? not swap [ blank? ] all? or ] deep-all?
 | 
					        dup [ dup string? not swap [ blank? ] all? or ] deep-all?
 | 
				
			||||||
        [ "<p>" swap "</p>" 3array ] unless
 | 
					        [ "<p>" swap "</p>" 3array ] unless
 | 
				
			||||||
| 
						 | 
					@ -163,7 +166,7 @@ PRIVATE>
 | 
				
			||||||
PEG: parse-farkup ( -- parser )
 | 
					PEG: parse-farkup ( -- parser )
 | 
				
			||||||
    [
 | 
					    [
 | 
				
			||||||
        list , table , h1 , h2 , h3 , h4 , code , paragraph , 2nl , nl ,
 | 
					        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  -- )
 | 
					: write-farkup ( parse-result  -- )
 | 
				
			||||||
    [ dup string? [ write ] [ drop ] if ] deep-each ;
 | 
					    [ dup string? [ write ] [ drop ] if ] deep-each ;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue