Compare commits

...

No commits in common. "v0.1.0" and "master" have entirely different histories.

4 changed files with 31 additions and 93 deletions

4
README Normal file
View file

@ -0,0 +1,4 @@
This is initial, an INI parsing library for the D programming language.
Reference documentation can be found in the source code as Ddoc comments.
A quick start guide can be found at <https://reformers.dev/initial>.

View file

@ -1,67 +0,0 @@
## initial - INI parsing library for the D programming language
My attempt at making a sane and high-quality INI parsing library for D.
```ini
[section]
key = value
```
An INI file's contents is stored in an `INIUnit` structure. This contains
multiple `INISection`s stored in an associative array that you can read
or set yourself.
initial also provides serialisation facilities that can turn `INIUnit`s
and `INISection`s 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.
## Demo
```d
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
Download initial.d and put it 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
```
## Progress
### Finished
- Keys
- Sections
- Default section
- Comments
### Todo
- Key referencing
- Testing D:

View file

@ -1,9 +1,9 @@
{
"name": "initial",
"description": "INI parsing library for the D programming language",
"description": "INI parser",
"authors": ["Jeremy Baxter"],
"copyright": "Copyright © 2024, Jeremy Baxter",
"authors": ["Jeremy Baxter <jeremy@baxters.nz>"],
"copyright": "Copyright © 2024 Jeremy Baxter",
"license": "BSL-1.0",
"targetType": "library",

View file

@ -3,27 +3,29 @@
*
* Boost Software License - Version 1.0 - August 17th, 2003
*
* Permission is hereby granted, free of charge, to any person or organization
* obtaining a copy of the software and accompanying documentation covered by
* this license (the "Software") to use, reproduce, display, distribute,
* execute, and transmit the Software, and to prepare derivative works of the
* Software, and to permit third-parties to whom the Software is furnished to
* do so, all subject to the following:
* Permission is hereby granted, free of charge, to any person or
* organization obtaining a copy of the software and accompanying
* documentation covered by this license (the "Software") to use,
* reproduce, display, distribute, execute, and transmit the Software,
* and to prepare derivative works of the Software, and to permit
* third-parties to whom the Software is furnished to do so, all
* subject to the following:
*
* The copyright notices in the Software and this entire statement, including
* the above license grant, this restriction and the following disclaimer,
* must be included in all copies of the Software, in whole or in part, and
* all derivative works of the Software, unless such copies or derivative
* works are solely in the form of machine-executable object code generated by
* a source language processor.
* The copyright notices in the Software and this entire statement,
* including the above license grant, this restriction and the following
* disclaimer, must be included in all copies of the Software, in whole or
* in part, and all derivative works of the Software, unless such copies or
* derivative works are solely in the form of machine-executable object
* code generated by a source language processor.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
* SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
* FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND
* NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE
* DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY,
* WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
/++
@ -215,10 +217,9 @@ struct INISection
this(string name) nothrow
{
this.name = name;
keys = new string[string];
}
/+
/++
+ Returns the value of `k` in this section or
+ `defaultValue` if the key is not present.
+/
@ -234,10 +235,10 @@ struct INISection
+ with a message containing location information.
+/
T
keyAs(T)(string k, string defaultValue = null)
keyAs(T)(string k, T defaultValue)
{
try
return key(k, defaultValue).to!T();
return k in keys ? keys[k].to!T() : defaultValue;
catch (ConvException)
throw new INITypeException(
format!"unable to convert [%s].%s to %s"(name, k, T.stringof));