ctini ~master
A compile-time and run-time INI parser.
To use this package, run the following command in your project's root directory:
Manual usage
Put the following dependency into your project's dependences section:
CtIni
Usage
Compile-time
Simply import ctini.ctini
, instantiate IniConfig
with the file name of an INI file,
and assign it to a variable.
Don't forget to set the include path with th -J option for DMD, or the stringImportPaths setting for dub
See the example below for how to access the settings.
Run-time
Import ctini.rtini
, and call iniConfig()
with the filename of an INI file, or iniConfigFromString()
with
a string containing the INI configuration.
If you attempt to access a setting or section that doesn't exist, or that has the wrong type, an Exception will be thrown.
Example
INI file:
[Section]
;A comment
intValue = 3 #Also a comment
stringValue = "string"
floatvalue =123.45 ; <-- flexible whitespace
[Section.Subsection]
boolValue = false
D file (compile-time):
import ctini.ctini;
enum config = IniConfig!"config.ini";
void main() {
//Four data types
//Everything available at compile time
static assert(config.Section.intValue == 3);
static assert(config.Section.stringValue == "string");
static assert(config.Section.floatValue == 123.45f);
static assert(config.Section.Subsection.boolValue == false);
}
D file (run-time):
import ctini.rtini;
void main() {
auto config = iniConfig("config.ini");
static assert(config.Section.intValue!int == 3);
static assert(config.Section.stringValue!string == "string");
static assert(config.Section.floatValue!float == 123.45f);
static assert(config.Section.Subsection.boolValue!bool == false);
}
Advanced
If you want more advanced or custom behaviour, import ctini.common
, and use the parseSections()
function, which returns an AA of sections mapped to their id (which is just the fully qualified section
name with .
s replaced with _
s).
Notes
Variable and section names should follow D identifier rules, and cannot be D keywords.
Every variable must be in a section (there must be a section heading before any variables are set).
A section cannot have two variables with the same name, but two different sections can have variables with the same name.
The final object is a
std.typecons.Tuple
, and can be used accordingly (for compile-time).Running
dub --config=regen
will allow you to regenerate the INI grammar, but this should only be necessary if you decide to editinclude/INI.peg
.
TODO
- Settings without sections
- Validating against user-defined types (with default values)
- Single quote strings
- Nicer errors (nb: the errors are somewhat nicer when parsing at runtime)
- Registered by David Osborne
- ~master released 5 years ago
- krendil/ctini
- MIT
- Copyright © 2014, David Osborne
- Authors:
- Dependencies:
- pegged
- Versions:
-
0.2.1 2014-Feb-22 0.2.0 2014-Feb-21 0.1.1 2014-Jan-28 ~master 2019-May-21 - Download Stats:
-
-
0 downloads today
-
0 downloads this week
-
0 downloads this month
-
743 downloads total
-
- Score:
- 1.1
- Short URL:
- ctini.dub.pm