cpp-hocon  0.3.0
C++ HOCON Parser

Travis CI Appveyor

This is a port of the TypesafeConfig library to C++.

The library provides C++ support for the HOCON configuration file format.

MMMMMMMMMMMMMMMMMMMM
.====================.
MMMMMMMMMMMMMMMMMMMMMM
.MMMMMMMMMMMMMMMMMMMMMM.
===.7MMMIN7NMMMMMMMMM7M=MMMM,===
MMM.7MM: DMMMMM7 :MMM=MMM
MMM.7MM, DMMMMM? ~MMM=MMM
MMM.7MMM~++~?MMMMMMM~++~MMMM=MMM
.MMMMMMMMMMMMMMMMMMMMMM.
MMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMM
MMM HOCON MMM
MMMMMMMMMMMMMMMMMMMMMM
.MMMMMMMMMMMMMMMMMM.
.MMMMMMMMMMMMMMMMMM.
.MMMMMMMMMMMMMMMMMMMMMMMM
. MMMMMMMMMMMMM88MMMMMMMMMM8MM .
7=MMMMMMMM++ A CONFIG FILE ++M8MMMMMM7=
M=MMMMMMMM+ FORMAT DESIGNED +M8MMMMMM7M
M=MMMMMMMM++ FOR HUMANS ++M8MMMMMM7M
=MMMMMMMMMMMMMMMMM88MMMMMMMMMM8MMMMMM7
7MM.88MMMMMMMMMMM88MMMMMMMMMMO88 MM8
7MM MMMMMMMMMMM88MMMMMMMMMM8 MM8
7MM MMMMMMMMMMM88MMMMMMMMMM8 MM8
7MM MMMDMMMM?MM88MM?MMMMOMM8 MM8

To get started, install it, then to parse a file:

#include <hocon/parser/config_document_factory.hpp>
#include <leatherman/file_util/file.hpp>
using hocon::config_document_factory::parse_file;
using leatherman::file_util::write_to_file;
int main(int argc, char** argv) {
auto doc = parse_file("/path/to/file.conf");
doc.with_value_text("a.b", "42");
write_to_file(doc.render(), "/path/to/file.conf");
return 0;
}

You can use hocon::config_document_factory::parse_string to parse a string. config_document is used to modify a file while preserving all formatting. Use config to read from the config or if you don't care about preserving formatting.

Note that file extensions matter. A .conf file will be parsed as HOCON, a .json file will be parsed as JSON, and other extensions will be ignored.

See the docs for more.

Caveats

This is a mostly complete implementation of the HOCON format. It currently has some known limitations

  • Include requires the location specifier, i.e. include "foo" won't work but include file("foo") will. URL is not yet implemented, and classpath won't be supported as it makes less sense outside of the JVM.
  • Unicode testing is absent so support is unknown. There are likely things that won't work.

Install

Build Requirements

  • OSX or Linux
  • GCC >= 4.8 or Clang >= 3.4 (with libc++)
  • CMake >= 3.2.2
  • Boost Libraries >= 1.54
  • Leatherman

Pre-Build

Prepare the cmake release environment:

$ mkdir release
$ cd release
$ cmake ..

Optionally, also prepare the debug environment:

$ mkdir debug
$ cd debug
$ cmake -DCMAKE_BUILD_TYPE=Debug ..

Building

  1. Enter your build environment of choice, i.e. cd release or cd debug
  2. make
  3. (optional) install with make install

Testing

Run tests with make test.