config-ini-0.2.0.1: A library for simple INI-based configuration files.

Data.Ini.Config.Raw

Description

Warning! This module is subject to change in the future, and therefore should not be relied upon to have a consistent API.

Synopsis

# INI types

newtype RawIni Source #

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.

Constructors

 RawIni FieldsfromRawIni :: Seq (NormalizedText, IniSection)

Instances

 Source # Methods(==) :: RawIni -> RawIni -> Bool #(/=) :: RawIni -> RawIni -> Bool # Source # MethodsshowsPrec :: Int -> RawIni -> ShowS #showList :: [RawIni] -> ShowS #

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.

Constructors

 IniSection FieldsisName :: TextThe name of the section, as it appears in the original INI sourceisVals :: Seq (NormalizedText, IniValue)The key-value mapping within that section. Key names here are normalized to lower-case and stripped of whitespace. This sequence retains the ordering of the original source file.isStartLine :: IntThe line on which the section begins. This field is ignored when serializing, and is only used for error messages produced when parsing and deserializing an INI structure.isEndLine :: IntThe line on which the section ends. This field is ignored when serializing, and is only used for error messages produced when parsing and deserializing an INI structure.isComments :: Seq BlankLineThe blank lines and comments that appear prior to the section head declaration, retained for pretty-printing identical INI files.

Instances

 Source # Methods Source # MethodsshowList :: [IniSection] -> ShowS #

data IniValue Source #

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.

Constructors

 IniValue FieldsvLineNo :: IntThe line on which the key/value mapping appears. This field is ignored when serializing, and is only used for error messages produced when parsing and deserializing an INI structure.vName :: TextThe name of the key, as it appears in the INI source.vValue :: TextThe value of the keyvComments :: Seq BlankLine vCommentedOut :: BoolRight now, this will never show up in a parsed INI file, but it's used when emitting a default INI file: it causes the key-value line to include a leading comment as well.vDelimiter :: Char

Instances

 Source # Methods Source # MethodsshowList :: [IniValue] -> ShowS #

data BlankLine Source #

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.

Constructors

 CommentLine Char Text BlankLine

Instances

 Source # Methods Source # MethodsshowList :: [BlankLine] -> ShowS #

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

Constructors

 NormalizedText FieldsactualText :: Text normalizedText :: Text

Instances

 Source # Methods Source # Methods Source # MethodsshowList :: [NormalizedText] -> ShowS #

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

Parse a Text value into an Ini value, retaining a maximal amount of structure as needed to reconstruct the original INI file.

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

Arguments

 :: 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.

Arguments

 :: 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.

Arguments

 :: 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.