Copyright | (c) Getty Ritter 2017 |
---|---|
License | BSD |
Maintainer | Getty Ritter <config-ini@infinitenegativeutility.com> |
Stability | experimental |
Safe Haskell | None |
Language | Haskell2010 |
Warning! This module is subject to change in the future, and therefore should not be relied upon to have a consistent API.
- newtype RawIni = RawIni {}
- data IniSection = IniSection {
- isName :: Text
- isVals :: Seq (NormalizedText, IniValue)
- isStartLine :: Int
- isEndLine :: Int
- isComments :: Seq BlankLine
- data IniValue = IniValue {}
- data BlankLine
- data NormalizedText = NormalizedText {
- actualText :: Text
- normalizedText :: Text
- normalize :: Text -> NormalizedText
- parseRawIni :: Text -> Either String RawIni
- printRawIni :: RawIni -> Text
- lookupInSection :: Text -> Text -> RawIni -> Seq Text
- lookupSection :: Text -> RawIni -> Seq IniSection
- lookupValue :: Text -> IniSection -> Seq IniValue
INI types
An Ini
value is a mapping from section names to
IniSection
values. The section names in this mapping are
normalized to lower-case and stripped of whitespace. This
sequence retains the ordering of the original source file.
data IniSection Source #
An IniSection
consists of a name, a mapping of key-value pairs,
and metadata about where the section starts and ends in the
file. The section names found in isName
are not normalized
to lower-case or stripped of whitespace, and thus should appear
exactly as they appear in the original source file.
IniSection | |
|
An IniValue
represents a key-value mapping, and also stores the
line number where it appears. The key names and values found in
vName
and vValue
respectively are _not_ normalized to
lower-case or stripped of whitespace, and thus should appear
exactly as they appear in the original source file.
IniValue | |
|
We want to keep track of the whitespace/comments in between KV lines, so this allows us to track those lines in a reproducible way.
data NormalizedText Source #
The NormalizedText
type is an abstract representation of text
which has had leading and trailing whitespace removed and been
normalized to lower-case, but from which we can still extract the
original, non-normalized version. This acts like the normalized
text for the purposes of Eq
and Ord
operations, so
normalize
" x " ==normalize
"X"
This type is used to store section and key names in the
normalize :: Text -> NormalizedText Source #
The constructor function to build a NormalizedText
value. You
probably shouldn't be using this module directly, but if for some
reason you are using it, then you should be using this function to
create NormalizedText
values.
serializing and deserializing
parseRawIni :: Text -> Either String RawIni Source #
Parse a Text
value into an Ini
value, retaining a maximal
amount of structure as needed to reconstruct the original INI file.
printRawIni :: RawIni -> Text Source #
Serialize an INI file to text, complete with any comments which appear in the INI structure, and retaining the aesthetic details which are present in the INI file.
inspection
:: Text | The section name. Will be normalized prior to comparison. |
-> Text | The key. Will be normalized prior to comparison. |
-> RawIni | The Ini to search. |
-> Seq Text |
Look up an Ini value by section name and key. Returns the sequence of matches.
:: Text | The section name. Will be normalized prior to comparison. |
-> RawIni | The Ini to search. |
-> Seq IniSection |
Look up an Ini section by name. Returns a sequence of all matching section records.
:: Text | The key. Will be normalized prior to comparison. |
-> IniSection | The section to search. |
-> Seq IniValue |
Look up an Ini key's value in a given section by the key. Returns the sequence of matches.