module ID3.Parser.Header
( parseHeader
, parseFooter
)
where
import Text.ParserCombinators.Poly.State
import ID3.Parser.General
import ID3.Type.Header
import ID3.Type.Flags
import Data.Accessor
---,-----------------------------
parseHeader :: TagParser ID3Header
parseHeader = do
string "ID3" `err` "ID3"
parseHeader_
parseHeader_ = do
v <- parseVersion `err` "tag version"
f <- parseFlags `err` "tag flags"
s <- parseSize `err` "tag size"
return $ initID3Header [tagVersion^=v, tagFlags^=f, tagSize^=s]
parseVersion :: TagParser TagVersion
parseVersion = count 2 anyWord8
parseFlags :: TagParser TagFlags
parseFlags = do
fs <- parseFlags_ [1..4]
return $ mkFlags [1..4] fs
parseSize :: TagParser TagSize
parseSize = parseSize_ 4
parseFooter :: TagParser ID3Header
parseFooter = do
string "3DI"
parseHeader_