gdritter repos ptolemy / master ptolemy-core / Text / Ptolemy / Core.hs
master

Tree @master (Download .tar.gz)

Core.hs @master

b45d2cc
 
 
4a11d3d
8a34d6b
4a11d3d
 
 
 
 
 
 
 
 
 
 
 
 
 
b45d2cc
 
 
 
 
b4f8141
 
 
 
8a34d6b
b4f8141
b45d2cc
 
 
 
 
 
 
 
b4f8141
b45d2cc
 
 
 
 
 
 
b4f8141
 
 
 
 
b45d2cc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b4f8141
 
 
 
 
 
 
b45d2cc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
module Text.Ptolemy.Core where

import           Data.Text (Text)
import           Data.Map.Strict (Map)
import           Data.Vector (Vector, fromList)

type Reader = Text -> Either String Ptolemy
type Writer = Ptolemy -> Text

data Ptolemy = Ptolemy
  { meta     :: Maybe Meta
  , document :: Document
  } deriving (Eq, Show, Read, Ord)

data Meta = Meta { fromMeta :: Map Text MetaValue }
  deriving (Eq, Show, Read, Ord)

data MetaValue = MetaValue
  deriving (Eq, Show, Read, Ord)

type Document = Vector Block
type DocumentList = Vector Document
type Chunk = Vector Inline

newtype PtolemyError = PtolemyError { ptolemyErrorMessage :: String }
  deriving (Eq, Show)

vec :: [a] -> Vector a
vec = fromList

data Block
  = Plain Chunk
  | Para Chunk
  | CodeBlock Attr Text
  | RawBlock Format Text
  | BlockQuote Document
  | OrderedList ListAttributes DocumentList
  | BulletList DocumentList
  | DefinitionList (Vector Definition)
  | Header Int Attr Chunk
  | HorizontalRule
--  | Table ???
  | Div Attr Document
  | Null
    deriving (Eq, Show, Read, Ord)

data Definition = Definition
  { dfTerm       :: Chunk
  , dfDefinition :: DocumentList
  } deriving (Eq, Show, Read, Ord)

data Inline
  = Str Text
  | Emph Chunk
  | Strong Chunk
  | Strikeout Chunk
  | Superscript Chunk
  | Subscript Chunk
  | SmallCaps Chunk
  | Quoted QuoteType Chunk
  | Cite (Vector Citation) Chunk
  | Code Attr Text
  | Space
  | SoftBreak
  | LineBreak
  | Math MathType Text
  | RawInline Format Text
  | Link Attr Chunk Target
  | Image Attr Chunk Target
  | Note Document
  | Span Attr Chunk
    deriving (Eq, Show, Read, Ord)

data Attr = Attr
  { attrIdentifier :: Text
  , attrClasses :: Vector Text
  , attrProps :: Vector (Text, Text)
  } deriving (Eq, Show, Read, Ord)

emptyAttr :: Attr
emptyAttr = Attr
  { attrIdentifier = ""
  , attrClasses    = vec []
  , attrProps      = vec []
  }

data ListAttributes = ListAttributes
  { laWhatever    :: Int -- XXX What is this field for?
  , laNumberStyle :: ListNumberStyle
  , laNumberDelim :: ListNumberDelim
  } deriving (Eq, Show, Read, Ord)

data Citation = Citation
  { ciId      :: Text
  , ciPrefix  :: Chunk
  , ciSuffix  :: Chunk
  , ciMode    :: CitationMode
  , ciNoteNum :: Int
  , ciHash    :: Int
  } deriving (Eq, Show, Read, Ord)

data CitationMode
  = AuthorInText
  | SuppressAuthor
  | NormalCitation
    deriving (Eq, Show, Read, Ord)

data ListNumberStyle
  = DefaultStyle
  | Example
  | Decimal
  | LowerRoman
  | UpperRoman
  | LowerAlpha
  | UpperAlpha
    deriving (Eq, Show, Read, Ord)

data ListNumberDelim
  = DefaultDelim
  | Period
  | OneParen
  | TwoParens
    deriving (Eq, Show, Read, Ord)

data QuoteType = SingleQuote | DoubleQuote
  deriving (Eq, Show, Read, Ord)

data MathType = DisplayMath | InlineMath
  deriving (Eq, Show, Read, Ord)

newtype Format = Format { fromFormat :: Text }
  deriving (Eq, Show, Read, Ord)

data Target = Target
  { tgtURL   :: Text
  , tgtTitle :: Text
  } deriving (Eq, Show, Read, Ord)