INI parsing library for D
Find a file
Jeremy Baxter c00e0fa7e6 avoid converting objects twice
If I have an object of type T and want to set it as the default
value for a call to .keyAs(), I have to convert it to a string first.
This string would then get converted again in case the key doesn't exist
in the section.
2024-06-18 17:42:36 +12:00
.gitignore add basic gitignore 2024-01-26 13:31:22 +13:00
COPYING license under the Boost Software License 2024-01-24 21:04:26 +13:00
dub.json update dub.json 2024-06-05 12:39:51 +12:00
initial.d avoid converting objects twice 2024-06-18 17:42:36 +12:00
README.md add copying notice 2024-06-05 12:33:14 +12:00

initial - INI parser for the D programming language

My attempt at making a sane and high-quality INI parsing library for D.

[section]
key = value

The contents of an INI file is stored in an INIUnit structure. This contains an associative array of INISections that you can read or set yourself.

initial also provides serialisation facilities that can turn INIUnits and INISections back into an INI document. Handy for if your program has some sort of GUI configuration interface or if you're passing around INI through a network connection.

initial.d is licensed under the Boost Software License, version 1.0. See COPYING for the full licence text.

Demo

INIUnit ini;

/* write INI data to an INIUnit */
ini["section"]["key"] = "value";
ini["section"]["num"] = "4.8";

/* read INI data */
readINI(ini, `
    [section]
    num = 5.3
`);

assert(ini["section"]["key"] == "value");
assert(ini["section"]["num"] == "5.3");

/* read INI from file */
readINIFile(ini, "config.ini");

/* write INI to file */
import std.file : write;
write("config.ini", ini.serialise());

Usage

Copy initial.d to somewhere in your import path, then compile it alongside your program and link it in. Or you can do it all at once by using -i.

dmd program.d initial.d
dmd -i program.d

Documentation can be found by reading the documentation comments in the code.

Progress

Finished

  • Keys
  • Sections
  • Default section
  • Comments

Unimplemented

  • Key referencing

Currently initial.d does all I need it to, and I consider it complete. However if you have any questions, feel free to send an email to my public inbox or directly to my address (jeremy@baxters.nz). Patches are also welcome which you can generate with git format-patch and attach to an email or just copy into the body of an email (git send-email can do this automatically).