add rules to allow * by itself

add escape characters
db4
Doug Coleman 2008-02-26 12:50:19 -06:00
parent bca3dfcf2c
commit a5807774e0
2 changed files with 28 additions and 12 deletions

View File

@ -2,11 +2,15 @@ USING: farkup kernel tools.test ;
IN: temporary
[ "<ul><li>foo</li></ul>" ] [ "-foo" parse-farkup ] unit-test
[ "<ul><li>foo</li></ul>" ] [ "-foo\n" parse-farkup ] unit-test
[ "<ul><li>foo</li></ul>\n" ] [ "-foo\n" parse-farkup ] unit-test
[ "<ul><li>foo</li><li>bar</li></ul>" ] [ "-foo\n-bar" parse-farkup ] unit-test
[ "<ul><li>foo</li><li>bar</li></ul>" ] [ "-foo\n-bar\n" parse-farkup ] unit-test
[ "<ul><li>foo</li><li>bar</li></ul>\n" ] [ "-foo\n-bar\n" parse-farkup ] unit-test
[ "<ul><li>foo</li></ul><p>bar</p>" ] [ "-foo\nbar\n" parse-farkup ] unit-test
[ "*foo\nbar\n" parse-farkup ] must-fail
[ "<ul><li>foo</li></ul><p>\nbar\n</p>" ] [ "-foo\nbar\n" parse-farkup ] unit-test
[ "<p>*foo\nbar\n</p>" ] [ "*foo\nbar\n" parse-farkup ] unit-test
[ "<p><strong>Wow!</strong></p>" ] [ "*Wow!*" parse-farkup ] unit-test
[ "<p><em>Wow.</em></p>" ] [ "_Wow._" parse-farkup ] unit-test
[ "<p>*</p>" ] [ "*" parse-farkup ] unit-test
[ "<p>*</p>" ] [ "\\*" parse-farkup ] unit-test
[ "<p>**</p>" ] [ "\\**" parse-farkup ] unit-test

View File

@ -3,16 +3,24 @@
USING: arrays io kernel memoize namespaces peg
peg.ebnf sequences strings html.elements xml.entities
xmode.code2html splitting io.streams.string html
html.elements sequences.deep unicode.categories ;
html.elements sequences.deep ascii ;
! unicode.categories ;
USE: tools.walker
IN: farkup
MEMO: any-char ( -- parser ) [ drop t ] satisfy ;
: delimiters ( -- string )
"*_^~%=[-|\\\n" ; inline
MEMO: text ( -- parser )
[ "*_^~%=[-|\n" member? not ] satisfy repeat1
[ delimiters member? not ] satisfy repeat1
[ >string escape-string ] action ;
MEMO: delimiter ( -- parser )
[ dup delimiters member? swap CHAR: \n = not and ] satisfy
[ 1string ] action ;
: delimited ( str html -- parser )
[
over token hide ,
@ -20,6 +28,9 @@ MEMO: text ( -- parser )
token hide ,
] seq* ;
MEMO: escaped-char ( -- parser )
[ "\\" token hide , any-char , ] seq* [ >string ] action ;
MEMO: strong ( -- parser ) "*" "strong" delimited ;
MEMO: emphasis ( -- parser ) "_" "em" delimited ;
MEMO: superscript ( -- parser ) "^" "sup" delimited ;
@ -89,16 +100,17 @@ MEMO: line ( -- parser )
[
text , strong , emphasis , link ,
superscript , subscript , inline-code ,
escaped-char , delimiter ,
] choice* repeat1 ;
MEMO: paragraph ( -- parser )
[
line [
dup [ [ blank? ] all? ] deep-all?
[ "<p>" swap "</p>" 3array ] unless
] action ,
"\n" token hide ,
] choice* ;
line ,
"\n" token ,
] choice* repeat1 [
dup [ dup string? not swap [ blank? ] all? or ] deep-all?
[ "<p>" swap "</p>" 3array ] unless
] action ;
MEMO: farkup ( -- parser )
[