citeproc-hs-0.3.9: A Citation Style Language implementation in Haskell

Portability | unportable
Stability | unstable
Maintainer | Andrea Rossato <andrea.rossato@unitn.it>
Safe Haskell | None

Text.CSL.Style

Description

The Style types

Synopsis

- data Style = Style {
  - styleVersion :: String
  - styleClass :: String
  - styleInfo :: Maybe CSInfo
  - styleDefaultLocale :: String
  - styleLocale :: [Locale]
  - styleAbbrevs :: [Abbrev]
  - csOptions :: [Option]
  - csMacros :: [MacroMap]
  - citation :: Citation
  - biblio :: Maybe Bibliography
  }
- data Locale = Locale {
  - localeVersion :: String
  - localeLang :: String
  - localeOptions :: [Option]
  - localeTerms :: [CslTerm]
  - localeDate :: [Element]
  }
- mergeLocales :: String -> Locale -> [Locale] -> [Locale]
- data CslTerm = CT {
  - cslTerm :: String
  - termForm :: Form
  - termGender :: Gender
  - termGenderForm :: Gender
  - termSingular :: String
  - termPlural :: String
  - termMatch :: String
  }
- newTerm :: CslTerm
- findTerm :: String -> Form -> [CslTerm] -> Maybe CslTerm
- findTerm' :: String -> Form -> Gender -> [CslTerm] -> Maybe CslTerm
- hasOrdinals :: Data a => a -> Bool
- rmOrdinals :: Data a => a -> a
- type Abbrev = (String, [(String, Map String String)])
- type MacroMap = (String, [Element])
- data Citation = Citation {
  - citOptions :: [Option]
  - citSort :: [Sort]
  - citLayout :: Layout
  }
- data Bibliography = Bibliography {
  - bibOptions :: [Option]
  - bibSort :: [Sort]
  - bibLayout :: Layout
  }
- type Option = (String, String)
- mergeOptions :: [Option] -> [Option] -> [Option]
- data Layout = Layout {
  - layFormat :: Formatting
  - layDelim :: Delimiter
  - elements :: [Element]
  }
- data Element
  - = Choose IfThen [IfThen] [Element]
  - | Macro String Formatting
  - | Const String Formatting
  - | Variable [String] Form Formatting Delimiter
  - | Term String Form Formatting Bool
  - | Label String Form Formatting Plural
  - | Number String NumericForm Formatting
  - | Names [String] [Name] Formatting Delimiter [Element]
  - | Substitute [Element]
  - | Group Formatting Delimiter [Element]
  - | Date [String] DateForm Formatting Delimiter [DatePart] String
- data IfThen = IfThen Condition Match [Element]
- data Condition = Condition {
  - isType :: [String]
  - isSet :: [String]
  - isNumeric :: [String]
  - isUncertainDate :: [String]
  - isPosition :: [String]
  - disambiguation :: [String]
  - isLocator :: [String]
  }
- type Delimiter = String
- data Match
  - = Any
  - | All
  - | None
- match :: Match -> [Bool] -> Bool
- data DatePart = DatePart {
  - dpName :: String
  - dpForm :: String
  - dpRangeDelim :: String
  - dpFormatting :: Formatting
  }
- defaultDate :: [DatePart]
- data Sort
  - = SortVariable String Sorting
  - | SortMacro String Sorting Int Int String
- data Sorting
  - = Ascending String
  - | Descending String
- compare' :: String -> String -> Ordering
- data Form
  - = Long
  - | Short
  - | Count
  - | Verb
  - | VerbShort
  - | Symbol
  - | NotSet
- data Gender
  - = Feminine
  - | Masculine
  - | Neuter
- data NumericForm
  - = Numeric
  - | Ordinal
  - | Roman
  - | LongOrdinal
- data DateForm
  - = TextDate
  - | NumericDate
  - | NoFormDate
- data Plural
  - = Contextual
  - | Always
  - | Never
- data Name
  - = Name Form Formatting NameAttrs Delimiter [NamePart]
  - | NameLabel Form Formatting Plural
  - | EtAl Formatting String
- type NameAttrs = [(String, String)]
- data NamePart = NamePart String Formatting
- isPlural :: Plural -> Int -> Bool
- isName :: Name -> Bool
- isNames :: Element -> Bool
- hasEtAl :: [Name] -> Bool
- data Formatting = Formatting {
  - prefix :: String
  - suffix :: String
  - fontFamily :: String
  - fontStyle :: String
  - fontVariant :: String
  - fontWeight :: String
  - textDecoration :: String
  - verticalAlign :: String
  - textCase :: String
  - display :: String
  - quotes :: Quote
  - stripPeriods :: Bool
  - noCase :: Bool
  - noDecor :: Bool
  }
- rmTitleCase :: Formatting -> Formatting
- data Quote
  - = NativeQuote
  - | ParsedQuote
  - | NoQuote
- emptyFormatting :: Formatting
- unsetAffixes :: Formatting -> Formatting
- mergeFM :: Formatting -> Formatting -> Formatting
- data CSInfo = CSInfo {
  - csiTitle :: String
  - csiAuthor :: CSAuthor
  - csiCategories :: [CSCategory]
  - csiId :: String
  - csiUpdated :: String
  }
- data CSAuthor = CSAuthor String String String
- data CSCategory = CSCategory String String String
- data FormattedOutput
  - = FO Formatting [FormattedOutput]
  - | FN String Formatting
  - | FS String Formatting
  - | FDel String
  - | FUrl Target Formatting
  - | FPan [Inline]
  - | FNull
- data Output
  - = ONull
  - | OSpace
  - | OPan [Inline]
  - | ODel String
  - | OStr String Formatting
  - | OLabel String Formatting
  - | ONum Int Formatting
  - | OCitNum Int Formatting
  - | ODate [Output]
  - | OYear String String Formatting
  - | OYearSuf String String [Output] Formatting
  - | OName String [Output] [[Output]] Formatting
  - | OContrib String String [Output] [Output] [[Output]]
  - | OUrl Target Formatting
  - | OLoc [Output] Formatting
  - | Output [Output] Formatting
- data Affix
  - = PlainText String
  - | PandocText [Inline]
- type Citations = [[Cite]]
- data Cite = Cite {
  - citeId :: String
  - citePrefix :: Affix
  - citeSuffix :: Affix
  - citeLabel :: String
  - citeLocator :: String
  - citeNoteNumber :: String
  - citePosition :: String
  - nearNote :: Bool
  - authorInText :: Bool
  - suppressAuthor :: Bool
  - citeHash :: Int
  }
- emptyAffix :: Affix
- emptyCite :: Cite
- data CitationGroup = CG [(Cite, Output)] Formatting Delimiter [(Cite, Output)]
- data BiblioData = BD {
  - citations :: [[FormattedOutput]]
  - bibliography :: [[FormattedOutput]]
  }
- data CiteData = CD {
  - key :: String
  - collision :: [Output]
  - disambYS :: [Output]
  - disambData :: [[Output]]
  - disambed :: [Output]
  - sameAs :: [String]
  - citYear :: String
  }
- data NameData = ND {
  - nameKey :: String
  - nameCollision :: [Output]
  - nameDisambData :: [[Output]]
  - nameDataSolved :: [Output]
  }
- formatOutputList :: [Output] -> [FormattedOutput]
- formatOutput :: Output -> FormattedOutput
- mapGroupOutput :: (Output -> [a]) -> CitationGroup -> [a]
- proc :: (Typeable a, Data b) => (a -> a) -> b -> b
- proc' :: (Typeable a, Data b) => (a -> a) -> b -> b
- query :: (Typeable a, Data b) => (a -> [c]) -> b -> [c]
- rmGivenNames :: Output -> Output
- rmNameHash :: Output -> Output
- addGivenNames :: [Output] -> [Output]
- addYearSuffix :: Output -> Output
- hasYear :: Output -> Bool
- hasYearSuf :: Output -> Bool
- betterThen :: Eq a => [a] -> [a] -> [a]

# Documentation

data Style Source

The representation of a parsed CSL style.

Constructors

Style |

Fields

styleVersion :: String
styleClass :: String
styleInfo :: Maybe CSInfo
styleDefaultLocale :: String
styleLocale :: [Locale]
styleAbbrevs :: [Abbrev]
csOptions :: [Option]
csMacros :: [MacroMap]
citation :: Citation
biblio :: Maybe Bibliography

Instances

Data Style |
Read Style |
Show Style |
Typeable Style |

data Locale Source

Constructors

Locale |

Fields

localeVersion :: String
localeLang :: String
localeOptions :: [Option]
localeTerms :: [CslTerm]
localeDate :: [Element]

Instances

Eq Locale |
Data Locale |
Read Locale |
Show Locale |
Typeable Locale |

mergeLocales :: String -> Locale -> [Locale] -> [Locale]Source

With the `defaultLocale`, the locales-xx-XX.xml loaded file and the parsed `Style` cs:locale elements, produce the final `Locale` as the only element of a list, taking into account CSL locale prioritization.

data CslTerm Source

Constructors

CT |

Fields

cslTerm :: String
termForm :: Form
termGender :: Gender
termGenderForm :: Gender
termSingular :: String
termPlural :: String
termMatch :: String

Instances

Eq CslTerm |
Data CslTerm |
Read CslTerm |
Show CslTerm |
Typeable CslTerm |

newTerm :: CslTerm Source

findTerm :: String -> Form -> [CslTerm] -> Maybe CslTerm Source

findTerm' :: String -> Form -> Gender -> [CslTerm] -> Maybe CslTerm Source

hasOrdinals :: Data a => a -> Bool Source

rmOrdinals :: Data a => a -> aSource

type Abbrev = (String, [(String, Map String String)])Source

type MacroMap = (String, [Element])Source

data Citation Source

Constructors

Citation |

Fields

citOptions :: [Option]
citSort :: [Sort]
citLayout :: Layout

Instances

Data Citation |
Read Citation |
Show Citation |
Typeable Citation |

data Bibliography Source

Constructors

Bibliography |

Fields

bibOptions :: [Option]
bibSort :: [Sort]
bibLayout :: Layout

Instances

Data Bibliography |
Read Bibliography |
Show Bibliography |
Typeable Bibliography |

type Option = (String, String)Source

mergeOptions :: [Option] -> [Option] -> [Option]Source

data Layout Source

Constructors

Layout |

Fields

layFormat :: Formatting
layDelim :: Delimiter
elements :: [Element]

Instances

Data Layout |
Read Layout |
Show Layout |
Typeable Layout |
XmlPickler Layout |

data Element Source

Constructors

Choose IfThen [IfThen] [Element] |
Macro String Formatting |
Const String Formatting |
Variable [String] Form Formatting Delimiter |
Term String Form Formatting Bool |
Label String Form Formatting Plural |
Number String NumericForm Formatting |
Names [String] [Name] Formatting Delimiter [Element] |
Substitute [Element] |
Group Formatting Delimiter [Element] |
Date [String] DateForm Formatting Delimiter [DatePart] String |

Instances

Eq Element |
Data Element |
Read Element |
Show Element |
Typeable Element |
XmlPickler Element |

data IfThen Source

Constructors

IfThen Condition Match [Element] |

Instances

Eq IfThen |
Data IfThen |
Read IfThen |
Show IfThen |
Typeable IfThen |
XmlPickler IfThen |

data Condition Source

Constructors

Condition |

Fields

isType :: [String]
isSet :: [String]
isNumeric :: [String]
isUncertainDate :: [String]
isPosition :: [String]
disambiguation :: [String]
isLocator :: [String]

Instances

Eq Condition |
Data Condition |
Read Condition |
Show Condition |
Typeable Condition |
XmlPickler Condition |

type Delimiter = String Source

data Match Source

Constructors

Any |
All |
None |

Instances

Eq Match |
Data Match |
Read Match |
Show Match |
Typeable Match |
XmlPickler Match |

match :: Match -> [Bool] -> Bool Source

data DatePart Source

Constructors

DatePart |

Fields

dpName :: String
dpForm :: String
dpRangeDelim :: String
dpFormatting :: Formatting

Instances

Eq DatePart |
Data DatePart |
Read DatePart |
Show DatePart |
Typeable DatePart |
XmlPickler DatePart |

defaultDate :: [DatePart]Source

data Sort Source

Constructors

SortVariable String Sorting |
SortMacro String Sorting Int Int String |

Instances

Eq Sort |
Data Sort |
Read Sort |
Show Sort |
Typeable Sort |
XmlPickler Sort |

data Sorting Source

Constructors

Ascending String |
Descending String |

Instances

Eq Sorting |
Data Sorting |
Ord Sorting |
Read Sorting |
Show Sorting |
Typeable Sorting |

compare' :: String -> String -> Ordering Source

data Form Source

Constructors

Long |
Short |
Count |
Verb |
VerbShort |
Symbol |
NotSet |

Instances

Eq Form |
Data Form |
Read Form |
Show Form |
Typeable Form |
XmlPickler Form |

data Gender Source

Constructors

Feminine |
Masculine |
Neuter |

Instances

Eq Gender |
Data Gender |
Read Gender |
Show Gender |
Typeable Gender |
XmlPickler Gender |

data NumericForm Source

Constructors

Numeric |
Ordinal |
Roman |
LongOrdinal |

Instances

Eq NumericForm |
Data NumericForm |
Read NumericForm |
Show NumericForm |
Typeable NumericForm |
XmlPickler NumericForm |

data DateForm Source

Constructors

TextDate |
NumericDate |
NoFormDate |

Instances

Eq DateForm |
Data DateForm |
Read DateForm |
Show DateForm |
Typeable DateForm |
XmlPickler DateForm |

data Plural Source

Constructors

Contextual |
Always |
Never |

Instances

Eq Plural |
Data Plural |
Read Plural |
Show Plural |
Typeable Plural |

data Name Source

Constructors

Name Form Formatting NameAttrs Delimiter [NamePart] |
NameLabel Form Formatting Plural |
EtAl Formatting String |

Instances

Eq Name |
Data Name |
Read Name |
Show Name |
Typeable Name |
XmlPickler Name |

type NameAttrs = [(String, String)]Source

data NamePart Source

Constructors

NamePart String Formatting |

Instances

Eq NamePart |
Data NamePart |
Read NamePart |
Show NamePart |
Typeable NamePart |
XmlPickler NamePart |

isPlural :: Plural -> Int -> Bool Source

isName :: Name -> Bool Source

isNames :: Element -> Bool Source

hasEtAl :: [Name] -> Bool Source

data Formatting Source

Constructors

Formatting |

Fields

prefix :: String
suffix :: String
fontFamily :: String
fontStyle :: String
fontVariant :: String
fontWeight :: String
textDecoration :: String
verticalAlign :: String
textCase :: String
display :: String
quotes :: Quote
stripPeriods :: Bool
noCase :: Bool
noDecor :: Bool

Instances

Eq Formatting |
Data Formatting |
Ord Formatting |
Read Formatting |
Show Formatting |
Typeable Formatting |
XmlPickler Formatting |

rmTitleCase :: Formatting -> Formatting Source

data Quote Source

Constructors

NativeQuote |
ParsedQuote |
NoQuote |

Instances

Eq Quote |
Data Quote |
Ord Quote |
Read Quote |
Typeable Quote |

emptyFormatting :: Formatting Source

unsetAffixes :: Formatting -> Formatting Source

mergeFM :: Formatting -> Formatting -> Formatting Source

data CSInfo Source

Constructors

CSInfo |

Fields

csiTitle :: String
csiAuthor :: CSAuthor
csiCategories :: [CSCategory]
csiId :: String
csiUpdated :: String

Instances

Data CSInfo |
Read CSInfo |
Show CSInfo |
Typeable CSInfo |
XmlPickler CSInfo |

data CSAuthor Source

Constructors

CSAuthor String String String |

Instances

Eq CSAuthor |
Data CSAuthor |
Read CSAuthor |
Show CSAuthor |
Typeable CSAuthor |
XmlPickler CSAuthor |

data CSCategory Source

Constructors

CSCategory String String String |

Instances

Eq CSCategory |
Data CSCategory |
Read CSCategory |
Show CSCategory |
Typeable CSCategory |
XmlPickler CSCategory |

data FormattedOutput Source

The formatted output, produced after post-processing the evaluated citations.

Constructors

FO Formatting [FormattedOutput] | List of `FormatOutput` items
FN String Formatting | Formatted number
FS String Formatting | Formatted string
FDel String | Delimeter string
FUrl Target Formatting | Formatted URL
FPan [Inline] | Pandoc inline elements
FNull | Null formatting item

Instances

Eq FormattedOutput |
Show FormattedOutput |

data Output Source

The `Output` generated by the evaluation of a style. Must be further processed for disambiguation and collapsing.

Constructors

ONull |
OSpace |
OPan [Inline] |
ODel String | A delimiter string.
OStr String Formatting | A simple `String`
OLabel String Formatting | A label used for roles
ONum Int Formatting | A number (used to count contributors)
OCitNum Int Formatting | The citation number
ODate [Output] | A (possibly) ranged date
OYear String String Formatting | The year and the citeId
OYearSuf String String [Output] Formatting | The year suffix, the citeId and a holder for collision data
OName String [Output] [[Output]] Formatting | A (family) name with the list of given names.
OContrib String String [Output] [Output] [[Output]] | The citation key, the role (author, editor, etc.), the contributor(s), the output needed for year suf. disambiguation, and everything used for name disambiguation.
OUrl Target Formatting | An URL
OLoc [Output] Formatting | The citation's locator
Output [Output] Formatting | Some nested `Output`

Instances

Eq Output |
Data Output |
Ord Output |
Show Output |
Typeable Output |

data Affix Source

Constructors

PlainText String |
PandocText [Inline] |

Instances

Eq Affix |
Data Affix |
Ord Affix |
Read Affix |
Show Affix |
Typeable Affix |
JSON Affix | Needed for the test-suite.

type Citations = [[Cite]]Source

data Cite Source

Constructors

Cite |

Fields

citeId :: String
citePrefix :: Affix
citeSuffix :: Affix
citeLabel :: String
citeLocator :: String
citeNoteNumber :: String
citePosition :: String
nearNote :: Bool
authorInText :: Bool
suppressAuthor :: Bool
citeHash :: Int

Instances

Eq Cite |
Data Cite |
Show Cite |
Typeable Cite |

emptyAffix :: Affix Source

emptyCite :: Cite Source

data CitationGroup Source

A citation group: the first list has a single member when the citation group starts with an author-in-text cite, the `Formatting` to be applied, the `Delimiter` between individual citations and the list of evaluated citations.

Constructors

CG [(Cite, Output)] Formatting Delimiter [(Cite, Output)] |

Instances

Eq CitationGroup |
Data CitationGroup |
Show CitationGroup |
Typeable CitationGroup |

data BiblioData Source

Constructors

BD |

Fields

citations :: [[FormattedOutput]]
bibliography :: [[FormattedOutput]]

Instances

Show BiblioData |

data CiteData Source

A record with all the data to produce the `FormattedOutput` of a citation: the citation key, the part of the formatted citation that may be colliding with other citations, the form of the citation when a year suffix is used for disambiguation , the data to disambiguate it (all possible contributors and all possible given names), and, after processing, the disambiguated citation and its year, initially empty.

Constructors

CD |

Fields

key :: String
collision :: [Output]
disambYS :: [Output]
disambData :: [[Output]]
disambed :: [Output]
sameAs :: [String]
citYear :: String

Instances

Eq CiteData |
Data CiteData |
Show CiteData |
Typeable CiteData |

data NameData Source

Constructors

ND |

Fields

nameKey :: String
nameCollision :: [Output]
nameDisambData :: [[Output]]
nameDataSolved :: [Output]

Instances

Eq NameData |
Data NameData |
Show NameData |
Typeable NameData |

formatOutputList :: [Output] -> [FormattedOutput]Source

formatOutput :: Output -> FormattedOutput Source

Convert evaluated `Output` into `FormattedOutput`, ready for the output filters.

mapGroupOutput :: (Output -> [a]) -> CitationGroup -> [a]Source

Map the evaluated output of a citation group.

proc :: (Typeable a, Data b) => (a -> a) -> b -> bSource

A generic processing function.

proc' :: (Typeable a, Data b) => (a -> a) -> b -> bSource

A generic processing function: process a data structure in top-down manner.

query :: (Typeable a, Data b) => (a -> [c]) -> b -> [c]Source

A generic query function.

rmGivenNames :: Output -> Output Source

Removes all given names form a `OName` element with `proc`.

rmNameHash :: Output -> Output Source

addGivenNames :: [Output] -> [Output]Source

Add, with `proc`, a give name to the family name. Needed for disambiguation.

addYearSuffix :: Output -> Output Source

Add the year suffix to the year. Needed for disambiguation.

hasYear :: Output -> Bool Source

hasYearSuf :: Output -> Bool Source

betterThen :: Eq a => [a] -> [a] -> [a]Source