• Stars
    star
    31
  • Rank 795,213 (Top 17 %)
  • Language
    C++
  • License
    GNU General Publi...
  • Created about 9 years ago
  • Updated 12 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Rcpp Bindings to C++ parser for TOML files

RcppTOML: Rcpp bindings for TOML

CI License CRAN Dependencies Downloads Last Commit

What is TOML?

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.

For several years, this package used the C++11 library cpptoml written by Chase Geigle. However, as that library is no longer maintained, current versions now use the newer C++17 library toml++ by Mark Gillard.

Example

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"
]

It can be read in one statement and once parsed, R now has properly typed input as shown in default print method:

R> library(RcppTOML)
R> parseTOML("inst/toml/example.toml")
List of 5
 $ 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:

Installation

Installation from source requires a C++17 compiler, and g++ versions 8 and onward should suffice.

From CRAN

The package is on CRAN and can be installed from every mirror via

install.packages("RcppTOML")

From the ghrr-drat

Development releases may be provided by the ghrr repository which can accessed via

## if needed, first do:  install.packages("drat")
drat::addRepo("ghrr")

after which install.packages("RcppTOML) which access this repo.

Alternatively, set the repo information on the fly as e.g. in

repos <- c("https://ghrr.github.io/drat", "https://cloud.r-project.org")
install.packages("RcppTOML", repos=repos)

which points to the ghrr repository as well as a standard CRAN mirror, but just for the length of this installation step.

Status

Earlier versions relied upon cpptoml and were feature-complete with TOML v0.5.0 (see the tests/ directory). They already parsed everything that the underlying cpptoml parsed with the same (sole) exception of unicode escape characters in strings.

Since switching to toml++ the package takes advantage of its comprehensive TOML v1.0.0 support and should now be fully 1.0.0 compliant. Some new tests were added to demonstrate this.

As toml++ also offers export to JSON and YAML as well as TOML writing, we may add support to some of these features going forward.

Continued Testing

As we rely on the tinytest package, the already-installed package can also be verified via

tinytest::test_package("RcppTOML")

at any point in time.

Author

Dirk Eddelbuettel

License

GPL (>= 2)

More Repositories

1

littler

A scripting and command-line front-end for GNU R
R
293
star
2

tint

Tint is not Tufte
R
259
star
3

gsir-te

Getting Started in R -- Tinyverse Edition
R
226
star
4

mkl4deb

Adding the Intel MKL to a Debian / Ubuntu system via one simple script
Shell
204
star
5

binb

Binb is not Beamer
TeX
188
star
6

r2u

CRAN as Ubuntu Binaries
R
183
star
7

anytime

Anything to POSIXct or Date Converter
R
153
star
8

drat

Drat R Archive Template
HTML
148
star
9

pinp

Pinp Is Not PNAS -- Two-Column PDF Template
TeX
146
star
10

rinside

Seamless embedding of R in C++ programs
C++
130
star
11

rcppsimdjson

Rcpp Bindings for the 'simdjson' Header Library
C++
113
star
12

rquantlib

R interface to the QuantLib library
C++
111
star
13

linl

Linl Is Not Letter -- Markdown-based LaTeX Letter Template
TeX
110
star
14

digest

R package to create compact hash digests of R objects
C
108
star
15

rpushbullet

R interface to the awesome Pushbullet service
R
94
star
16

bh

R package providing Boost Header files
C++
80
star
17

crp

Archived copies of the CRAN Repo Policy
HTML
72
star
18

rcppannoy

Rcpp bindings for Annoy
C++
69
star
19

rprotobuf

R Interface to Protocol Buffers
C++
68
star
20

ctv-finance

CRAN Task View: Empirical Finance
R
55
star
21

samples-rmarkdown-metropolis

RMarkdown with Metropolis/Mtheme for Beamer
Makefile
52
star
22

nanotime

Nanosecond Resolution Time Functionality for R
R
52
star
23

rcppredis

R interface to Redis using the hiredis library
C
49
star
24

rcppexamples

Examples of using Rcpp to interface R and C++
C++
45
star
25

inline

Inline C, C++ or Fortran functions in R
R
40
star
26

tidycpp

Tidy C++ wrapping of the C API of R
C++
38
star
27

ctv-hpc

CRAN Task View: High-Performance Computing with R
R
38
star
28

rcppkalman

Kalman filtering via RcppArmadillo
MATLAB
35
star
29

pkgkitten

Create simple packages which pass R CMD check
R
33
star
30

rcppgsl

Rcpp integration for GNU GSL vectors and matrices
TeX
30
star
31

rfoaas

R interface to FOAAS service
R
28
star
32

rcppcnpy

Rcpp bindings for NumPy files
C++
26
star
33

rvowpalwabbit

R interface to the Vowpal Wabbit
C++
24
star
34

rcppcctz

Rcpp interface to CCTZ library
C++
22
star
35

r-ci

CI for R at Travis, GitHub Actions, Azure Pipelines, ...
22
star
36

ttdo

Extend tinytest with diffobj
R
21
star
37

tinythemes

Lightweight Repackaging of 'Themes' for 'ggplot2'
R
20
star
38

rcppmsgpack

MsgPack Headers for R / msgpack.org[R]
C++
19
star
39

rcppfastfloat

Rcpp Bindings for the 'fastfloat' Header-Only Library
C++
19
star
40

rcppbdt

Rcpp bindings for Boost Date_Time
C++
17
star
41

docker-ubuntu-r

Docker images for R on Ubuntu
Shell
17
star
42

rcppstreams

A C++ DSEL for real-time event stream processing
C++
15
star
43

t4

Support repo for T^4 Video Lightning Talks
Shell
15
star
44

rticles-gallery

Preview of Templates in the rticles Package
R
14
star
45

dtts

Time-series functionality based on nanotime and data.table
R
14
star
46

rcppspdlog

Bundling of spdlog for use from R and Rcpp
C++
14
star
47

filter-journal-spam

spamassassin blocked-list to avoid traffic from predatory publishers
Makefile
13
star
48

tiledb-user2021

Repository for useR! 2021 TileDB Tutorial Helper Package
R
13
star
49

rcppde

Rcpp port of Differential Evolution
C++
13
star
50

pgapack

A general-purpose, data-structure-neutral, and parallel genetic algorithm library
C
12
star
51

rcppnloptexample

Rcpp Example for accessing NLopt
C++
12
star
52

ppa-rstudio

apt install rstudio rstudio-server quarto
R
12
star
53

prrd

Parallel Running of Reverse Depends
R
12
star
54

rcppdate

R package providing date C++ library header files
C++
11
star
55

lwplot

(Experimental but working) LightWeight Plot / Leland Wilkinson Plot -- a ggplot2 2.1.0 fork aiming for lighter weight
R
11
star
56

rcppziggurat

Rcpp bindings for different Ziggurat RNG implementations
C++
11
star
57

pkg-fonts-fira

(Unofficial) Debian packaging for Mozilla Fira fonts
Makefile
11
star
58

asioheaders

R package providing Asio C++ library header files
C++
11
star
59

td

R interface to 'twelvedata' API
R
11
star
60

rapiserialize

Serialization from the C API for R
C++
10
star
61

minm

Minm Is Not Meta: One way to get several RMarkdown-using packages
10
star
62

rapidatetime

Datetime functionality from the C API for R
C
10
star
63

samples-uzuerich-2017-06

Some Examples for Rcpp Workshop
9
star
64

rcppxts

Rcpp interface to xts objects
C++
9
star
65

rcppapt

Rcpp Interface to the APT Package Manager
C++
9
star
66

dang

A collection of utility functions for R
R
8
star
67

samplecode

Example code for talks or workshops
HTML
8
star
68

earthmovdist

Earth Mover's Distance for R via the Emd-L1 library
C++
8
star
69

rcppfastad

Rcpp Bindings to FastAD Automatic Differentiation
C++
8
star
70

rcpputs

Rcpp bindings for algorithms for unevenly spaced time series
C++
8
star
71

random

R package for true random numbers from random.org
R
8
star
72

dieharder-rgb

Random number generator tester
C
7
star
73

beancounter

Stock Portfolio Performance Tool
Perl
7
star
74

gcbd

R package for GPU/CPU benchmarking on Debian-based systems
R
7
star
75

rdieharder

R interface to the Dieharder RNG test suite
C
7
star
76

ldlasb

Lies, Damned Lies, and Selective Benchmarks
C++
6
star
77

user2022-r-core-panel

useR! 2022 R Core Keynote and Panel
6
star
78

r-travis

Tools for using R with Travis, GitHub Actions and other CI backends
Shell
6
star
79

docker-debian-r

Docker image for R on Debian
Shell
6
star
80

dieharder

C
6
star
81

spotifytop50us

Visualize Most Popular Songs from the Top50
R
6
star
82

rf2

Iteration Two of RinFinance.com
5
star
83

rcpp_comparison_convolution

Rcpp versus C on the Standard Convolution Example
R
5
star
84

rbenchmark

Benchmarking routine for R
R
5
star
85

safy

Show the Global Environment Some Appreciation
R
5
star
86

snap-r-base

Snapcraft for R
R
5
star
87

pkg-latex-metropolis

[deprecated as Metropolis is now in TeXLive and hence Debian] (Unofficial) Debian packaging for Metropolis theme for Beamer
TeX
5
star
88

sanitizers

Sample R package with C/C++ code to trigger Address and Undefined Behaviour Sanitizers
C++
5
star
89

stackoverflow

Grabbag repo collecting some answers I posted. If only I had started this repo a decade ago...
HTML
5
star
90

data-examples

Unpacked data sets with Gapminder, Titanic and more
R
4
star
91

rmsfact

Amazing Random Facts About the World's Greatest Hacker
R
4
star
92

rocker-tiledb

Unofficial Development Docker files for R and TileDB
Makefile
4
star
93

arch

Arrow R and C Helpers
C
4
star
94

gaussfacts

The Greatest Mathematician since Antiquity
R
4
star
95

pkg-fonts-jetbrains-mono

(Unofficial) Debian packaging for Jetbrains Mono fonts
Makefile
4
star
96

pkg-fonts-plex

(Unofficial) Debian packaging for IBM Plex fonts
Makefile
4
star
97

drr35

Temporary repository for Debian packages built with R 3.5.0
3
star
98

docker-swc

Docker image for Software Carpentry
3
star
99

crc32c

R Package for crc32c with hardware-acceleration and software fallback
C++
3
star
100

cook-county-tax-model

Modeling Cook County Property Taxes
R
3
star