module Wumpus.Basic.FontLoader.AfmV4Dot1Parser
(
parseAfmV4Dot1File
) where
import Wumpus.Basic.FontLoader.AfmParserBase
import Wumpus.Basic.FontLoader.Base
import Wumpus.Basic.Utils.ParserCombinators
import Wumpus.Core
import Control.Applicative
parseAfmV4Dot1File :: FilePath -> IO (Either ParseError AfmFile)
parseAfmV4Dot1File filepath = runParserEither p <$> readFile filepath
where
p = afmFileParser charMetricsV4Dot1
charMetricsV4Dot1 :: CharParser AfmGlyphMetrics
charMetricsV4Dot1 = AfmGlyphMetrics <$>
characterCode
<*> widthVector
<*> metric "N" "" name1
<* charBBox
<* many (symbol "L" *> ligature_body <* semi)
<* newlineOrEOF
where
ligature_body = ((,) <$> name <*> name)
widthVector :: CharParser (Vec2 AfmUnit)
widthVector = (symbol "WX" *> ((\w -> vec w 0) <$> number) <* semi)
<|> (symbol "W" *> (vec <$> number <*> number) <* semi)
characterCode :: CharParser Int
characterCode = metric "CH" (1) hexInt <|> metric "C" (1) cint