module HtmlText (fromText, getTitleFiles, reference) where
import Data.Char
import Notation
import Html
import Tag
import LineParser
----------------------------------------------------------------
fromText :: String -> LineParser String
fromText str = case parse text "fromText" str of
Right cooked -> return cooked
Left _ -> fail ": link or quote error"
----------------------------------------------------------------
text :: Parser String
text = do spaces
ss <- many (link <|> shrinkSpaces <|> rawtext)
return $ concat ss
link :: Parser String
link = do char pikiAOpen
title <- word
space
url <- word
char pikiAClose
return $ (reference title) ### ("a",[("href",url)])
shrinkSpaces :: Parser String
shrinkSpaces = do many1 space
try (do eof; return "") <|> return " "
rawtext :: Parser String
rawtext = do c <- anyChar
if c == pikiEscape
then do c' <- anyChar; return [c']
else return $ referenceChar c
----------------------------------------------------------------
word :: Parser String
word = quoted <|> unquoted
quoted :: Parser String
quoted = do char '"'
str <- many1 $ noneOf "\t\n[]\""
char '"'
return str
unquoted :: Parser String
unquoted = many1 $ noneOf " \t\n[]\""
----------------------------------------------------------------
{-
getTitleFiles :: String -> Either ParseError [Image]
getTitleFiles = parse titleFiles "getTitleFiles"
-}
getTitleFiles :: String -> LineParser [Image]
getTitleFiles str = case parse titleFiles "getTitleFiles" str of
Right imgs -> return imgs
Left _ -> fail ": no '@ title file'"
titleFiles :: Parser [Image]
titleFiles = do spaces
tfs <- sepBy1 titleFile spaces
return tfs
titleFile :: Parser Image
titleFile = do title <- word
spaces
file <- word
return $ Image (reference title) file
----------------------------------------------------------------
reference :: String -> String
reference = concatMap referenceChar
referenceChar :: Char -> String
referenceChar '<' = "<"
referenceChar '>' = ">"
referenceChar '&' = "&"
referenceChar '"' = """
referenceChar c = [c]