Я использую Text.ParserCombinators.Parsec
и Text.XHtml
проанализировать вход и получить вывод HTML.
Если мой вход:
* First item, First level ** First item, Second level ** Second item, Second level * Second item, First level
Мой вывод должен быть:
Я записал это, но очевидно не работаю рекурсивно
list = do{ s <- many1 item;return (olist << s) }
item = do{
(count 1 (char '*'))
;s <- manyTill anyChar newline
;return ( li << s)
}
Какие-либо идеи? Рекурсия может быть больше чем двумя уровнями.
Спасибо!
list n = do first <- item n
rest <- many $ try $ try (list (n+1)) <|> item n
return $ ulist << (first : rest)
item n = do count n (char '*')
s <- manyTill anyChar newline
return $ li << s
Теперь проанализируйте (список 1) "foo" "* a \ n ** a 1 \ n ** a 2 \ n * b \ n ** b 1 \ n ** b 2 \ n "
вернет то, что вы просили.
Обратите внимание, что вложенные списки сами должны быть внутри li, чтобы это был действительный xhtml.