TOML is a configuration file grammar for humans. It is easier to read and edit than the alternatives yet arguably more useful as it is strongly typed: values come back as integer, double, (multiline-) character (strings), boolean or Datetime. Moreover, complex nesting and arrays are supported as well.
This package uses the C++11 implementation written by Chase Geigle in cpptoml to provide a parser that can be used by R.
Consider the following TOML input example input:
# This is a TOML document.
title = "TOML Example"
[owner]
name = "Tom Preston-Werner"
dob = 1979-05-27T07:32:00-08:00 # First class dates
[database]
server = "192.168.1.1"
ports = [ 8001, 8001, 8002 ]
connection_max = 5000
enabled = true
[servers]
# Indentation (tabs and/or spaces) is allowed but not required
[servers.alpha]
ip = "10.0.0.1"
dc = "eqdc10"
[servers.beta]
ip = "10.0.0.2"
dc = "eqdc10"
[clients]
data = [ ["gamma", "delta"], [1, 2] ]
# Line breaks are OK when inside arrays
hosts = [
"alpha",
"omega"
]
Once parsed, note how R has properly typed input:
> library(RcppTOML)
R> parseTOML("inst/toml/example.toml")
R5
List of $ clients :List of 2
$ data :List of 2
..$ : chr [1:2] "gamma" "delta"
.. ..$ : int [1:2] 1 2
.. ..$ hosts: chr [1:2] "alpha" "omega"
..$ database:List of 4
$ connection_max: int 5000
..$ enabled : logi TRUE
..$ ports : int [1:3] 8001 8001 8002
..$ server : chr "192.168.1.1"
..$ owner :List of 2
$ dob : POSIXct[1:1], format: "1979-05-27 15:32:00"
..$ name: chr "Tom Preston-Werner"
..$ servers :List of 2
$ alpha:List of 2
..$ dc: chr "eqdc10"
.. ..$ ip: chr "10.0.0.1"
.. ..$ beta :List of 2
..$ dc: chr "eqdc10"
.. ..$ ip: chr "10.0.0.2"
.. ..$ title : chr "TOML Example"
> R
See the other examples and the upstream documentation for more. Also note that most decent editors have proper TOML support which makes editing and previewing a breeze:
The package is on CRAN and can be installed from every mirror via
install.packages("RcppTOML")
Development releases may be provided by the ghrr repository which can accessed via
## if needed, first do: install.packages("drat")
::addRepo("ghrr") drat
Feature-complete with TOML v0.5.0, see the tests/ directory. It parses everything that the underlying cpptoml parses with the same (sole) exception of unicode escape characters in strings.
The package is on CRAN and can be installed via a standard
install.packages("RcppTOML")
As we rely on the tinytest package, the already-installed package can also be verified via
::test_package("RcppTOML") tinytest
at any later point.
Dirk Eddelbuettel
GPL (>= 2)