Commit Graph

37 Commits

Author SHA1 Message Date
Mark Gillard
6135deb6a3 added additional metafunctions
also:
- reduced bloat by removing unnecessary std::forwards and std::moves
- minor cleanup of example code
2021-05-21 14:28:45 +03:00
friendlyanon
a9262c672f
Modernize the CMake build files (#102)
List of things that this commit brings:
* Makes the project `FetchContent` ready
  This is achieved by conditionally executing code that is only useful
  for a consumer of the project, such as examples.
* Componentize the install rules
  Because this is a header-only library, its install rules should be
  categorized in a dev component (think foo-dev packages in apt). By
  assigning all install rules to a component, the project no longer
  clobbers the global component when vendored (see the previous point).
* Provide an interface similar to the install interface when vendored
  This is achieved by adding SYSTEM to the include directories
  conditionally and only providing targets that are actually needed.
* Make the project architecture independant
  This is achieved by setting the ARCH_INDEPENDENT argument when
  generating the version config file, which is available since CMake
  3.14. This feature is intended to be used for header-only libraries.
* Misc changes for trivial packaging
  The install rules are written in a way that allows package maintainers
  to trivially package the project.

Co-authored-by: friendlyanon <friendlyanon@users.noreply.github.com>
2021-05-20 22:03:35 +03:00
Mark Gillard
1baad21734 removed <fstream> requirement for parse_file
also:
- fixed false-positive char_8 support detection on older compilers
- removed extraneous `TOML_API` declarations
2021-05-19 14:36:25 +03:00
Mark Gillard
a29ecda102 fix crash with pathologically-nested inputs (closes #100)
also:
- fixed parse_result natvis
- added parse_result default constructor
- added nested value limit example to error printer
2021-05-18 01:39:01 +03:00
Mark Gillard
0fcbfbe655 fixed segfault JSON-formatting a failed parse_result (closes #96)
also:
- fixed config error in example `.vcxproj` files
- fixed spurious newline after JSON formatting a table
- fixed VS intellisense not detecting TOML_COMPILER_EXCEPTIONS correctly
- moved `parse_result` to a separate header
- made more internal macros require semicolons
- removed some old deprecations
- minor documentation fixes
2021-05-06 14:28:29 +03:00
Mark Gillard
53f29d9365 restructuring and minor refactoring
There's no new functionality here. It's purely tooling + CI stuff:
- moved `python` => `tools`
- moved documentation images to subfolder
- moved `vs/tests` to tests/vs projects
- moved `vs` solution etc to root
- added semicolons to macros
- added cpp.hint to help VS intellisense
- migrated documentation generation to external lib
2021-04-18 22:58:41 +03:00
Claus Klein
dcfab29e70
add cmake files to build and install header only library (#85)
* add cmake build and install support

export cmake config package too

* enable bootstap build without cmake config package

cleanup cmake list file
2021-02-02 18:45:59 +02:00
Mark Gillard
1ef6c0c6c8 update copyright year [skip ci] 2021-01-02 17:48:47 +02:00
Mark Gillard
30b756f993 fixed parser not handling overlong float literals correctly
also a few other edge cases (see #65)
2020-10-10 11:45:53 +03:00
Mark Gillard
33f7d732a1 fixed issue handling malformed utf-8 2020-10-10 00:30:12 +03:00
Mark Gillard
6255dd765c fixed issue handling malformed utf-8 at EOF (closes #65) 2020-10-09 23:49:06 +03:00
rezahousseini
aca6327cd8
Rename Windows.h to windows.h for mingw-w64 (#63)
Co-authored-by: Reza Housseini <reza.housseini@mecos.com>
2020-09-30 16:14:25 +03:00
Mark Gillard
1381240e10 meson refactoring
- renamed options to `snake_case`
- tests, examples and cmake config now explicitly disabled when used as a subproject
- removed small_binaries (it's now implicit when building as release)
- added minimum meson version 0.53
2020-09-05 13:26:12 +03:00
Mark Gillard
e19fb41517 Added more explicit control over budget in toml_generator example 2020-08-14 12:06:34 +03:00
Mark Gillard
11a0e84ced added additional node_view constructors
also made node conversion operators explicit
2020-08-13 14:53:55 +03:00
Mark Gillard
40d87de5b5 cleaned up some compiler warning management spam
also:
- removed `std::endl` from example code in documentation
- trimmed some fat from the toml.hpp generator
2020-08-11 18:07:02 +03:00
Mark Gillard
2efb15bf9e added insert, emplace, push_back etc. compatibility with node_views
In service of satisfying #49.
2020-07-28 01:21:41 +03:00
Mark Gillard
fd07301bae improved support for __fp16, _Float16 and __float128
also:
- fixed a bunch of doxygen parsing issues
- added `#define` leak detection to the single-header script
- renamed `TOML_ALL_INLINE` to `TOML_HEADER_ONLY` (the old one still works too)
- simplified abi namespace definitions
2020-07-25 20:50:24 +03:00
Mark Gillard
ca6f639fb9 fixed narrowing conversion warnings when constructing int values from unsigned
also:
- added ability to construct values from wide strings and u8 strings
- added non-template version of array::is_homogeneous()
- added explicit instantiations for more template types when `!TOML_ALL_INLINE`
- cleaned up abi namespaces
- simplified build and test machinery on windows
- removed TOML_CHAR_8_STRINGS since it no longer makes sense
2020-07-20 00:40:55 +03:00
Mark Gillard
cb791fe0ef expanded allowable conversion semantics of value and value_or
also:
- fixed infinity and NaN-related code breaking when using -ffast-math and friends
- added much more detail to many static_assert error messages
- added more test permutations of various compiler flags
- added many more static checks to test code
2020-07-17 16:33:56 +03:00
Mark Gillard
de07ba7187 string value serialization now emits literals where possible (closes #43)
also added support for wide strings on Windows (closes #42):
- added wide-string path arg overloads of `parse()` and `parse_file()`
- added wide-string support to all relevant `table` and `array` ops
- added `std::wstring` support to `node::value()` and `node::value_or()`
- added `std::wstring` support to `node_view::value()` and `node_view::value_or()`
- added wide-string overloads of `table::operator[]`
- added wide-string overloads of `node_view::operator[]`
- added `source_region::wide_path()`
- added `TOML_WINDOWS_COMPAT` switch for explicitly enabling/disabling this stuff

also:
- fixed internal macro `assert_or_assume` leaking out of `toml_parser.hpp`
- deprecated `node_view::get()` in favour of `node_view::node()`
- minor documentation fixes
- minor cleanup
2020-07-14 20:50:24 +03:00
Mark Gillard
f52949a481 refactoring parser to reduce binary sizes
Basically boils down to eliminating excessive template instantiations.
2020-06-29 17:49:48 +03:00
Mark Gillard
40a1a03315 simplified test code to reduce bloat and improve compile times 2020-06-29 01:57:59 +03:00
Mark Gillard
761690d4a6 fixed BOM check causing EOF on very short iostream inputs
also fixed a number of small parsing conformance issues
2020-06-25 17:33:01 +03:00
Mark Gillard
83315a3912 fixed multi-line strings being allowed in keys
also:
- significantly improved the performance of toml::parse_file
- improved the performance of printing to streams for deepy-nested TOML data
- simplified some of the examples
- added more tests
- cleaned up some of the test code
2020-06-08 18:31:23 +03:00
Mark Gillard
289c95cb51 renamed table proxy pair members to first and second to match STL (closes #30)
also:
- implemented `table_iterator::operator -> ()` (closes #29)
- added `array::resize()` and `array::truncate()` (closes #33)
- refactored BOM handling to make static analyzer happy (closes #34)
- added `array::capacity()`, `array::shrink_to_fit()`, `array::max_size()`
- implemented non-const -> const conversion for table and array iterators
2020-05-23 17:35:47 +03:00
Mark Gillard
0c2279d15a minor improvements to the wording of some error messages
also:
- added 'error_printer' example
2020-04-14 12:45:32 +03:00
Mark Gillard
0fbdc945bb fix examples breaking CI =/ 2020-04-14 08:45:24 +03:00
Mark Gillard
61304ac519 added toml_generator example 2020-04-14 08:25:03 +03:00
Mark Gillard
42af364887 refactored parser
Mainly to simplify a the error handling code (it had gotten a bit verbose), but also to reduce compiled binary sizes.

also:
- moved windows terminal code page stuff in examples to a separate file
2020-04-11 19:43:38 +03:00
Mark Gillard
44e5b1b1e2 added missing operator<< for parse_error
also:
- fixed printing bug in operator << for source_position
- improved quality of error messages for boolean and inf/nan parsing
- documentation fixes
2020-02-25 23:11:40 +02:00
Mark Gillard
3d653de7c9 fixed potential ODR issues relating to exception mode handling (fixes #6)
also:
- fixed truncation of floating-point values when using ostreams
- fixed some minor documentation issues (fixes #8)
- fixed missing value deduction guides for dates and times
- added serialization round-trip tests (closes #9)
- added node::is_number()
- added node_view::is_number()
- added node_view::value_or() (closes #7)
- added hexfloat parsing support for all implementations, not just <charconv> ones
2020-02-22 16:10:32 +02:00
Mark Gillard
635dec5c8e added printing for arrays
also
- added many member functions to `array`
- added more documentation
- added format_flags
- added some additional cleaning steps to `generate_single_header.py`
- made formatters work for any node type, not just tables
- fixed documentation header obscuring content during jumps
2020-01-12 23:23:35 +02:00
Mark Gillard
ab5ffa5a3c moved date and time stuff to separate header
also:
- merged all the separate integer parsing functions
- renamed the member functions of parse_error for clarity
- added the beginnings of a doxygen pipeline
2020-01-11 23:15:24 +02:00
Mark Gillard
537eb30080 added iterators for tables and arrays
also:
- fixed parsing table headers allowing invalid characters
- fixed implicit fallthrough warnings
- fixed some issues parsing dates and times
- added `table::erase`
- added `array::operator[]`
- added `value::operator*`
- added stream operators for date, time and date_time
- added `impl::print_to_stream`
- added more parsing diagnostics
- added many tests
2020-01-10 19:33:58 +02:00
Mark Gillard
40ffee43fb added json_formatter
also:
- added `toml_version.h`
- added version number to toml.hpp
- added `node::visit()`
- added `table::empty()`
- added `array::empty()`
- added version number to `toml.hpp`
- added ostream operator overload for `source_position`
- added tests for string escape sequences
- added tests for + in bare keys (toml/issues/687)
- added tests for hexfloat literals (toml/issues/562)
- added c++20 char8_t detection to meson
- moved third party submodules to `/extern`
- refactored noexcept version of `parse_result` to be more useful
- refactored all code to 'mostly' stick to a 120 column limit
- fixed some minor stuff picked up by gcc9
2020-01-06 22:24:53 +02:00
Mark Gillard
930bf0ad58 new file: .circleci/config.yml
new file:   .editorconfig
new file:   .gitattributes
new file:   .gitignore
new file:   .gitmodules
new file:   LICENSE
new file:   README.md
new file:   examples/example.cpp
new file:   examples/example.toml
new file:   examples/meson.build
new file:   include/toml++/toml.h
new file:   include/toml++/toml_array.h
new file:   include/toml++/toml_common.h
new file:   include/toml++/toml_formatter.h
new file:   include/toml++/toml_node.h
new file:   include/toml++/toml_node_view.h
new file:   include/toml++/toml_parser.h
new file:   include/toml++/toml_table.h
new file:   include/toml++/toml_utf8.h
new file:   include/toml++/toml_utf8_generated.h
new file:   include/toml++/toml_value.h
new file:   meson.build
new file:   python/ci_single_header_check.py
new file:   python/generate_single_header.py
new file:   python/generate_unicode_functions.py
new file:   tests/catch2
new file:   tests/catch2.h
new file:   tests/lifetimes.cpp
new file:   tests/main.cpp
new file:   tests/meson.build
new file:   tests/parsing_arrays.cpp
new file:   tests/parsing_booleans.cpp
new file:   tests/parsing_comments.cpp
new file:   tests/parsing_dates_and_times.cpp
new file:   tests/parsing_floats.cpp
new file:   tests/parsing_integers.cpp
new file:   tests/parsing_key_value_pairs.cpp
new file:   tests/parsing_spec_example.cpp
new file:   tests/parsing_strings.cpp
new file:   tests/parsing_tables.cpp
new file:   tests/tests.cpp
new file:   tests/tests.h
new file:   toml.hpp
new file:   vs/.runsettings
new file:   vs/example.vcxproj
new file:   vs/test_char.vcxproj
new file:   vs/test_char8.vcxproj
new file:   vs/test_char8_noexcept.vcxproj
new file:   vs/test_char_noexcept.vcxproj
new file:   vs/test_strict_char.vcxproj
new file:   vs/test_strict_char8.vcxproj
new file:   vs/test_strict_char8_noexcept.vcxproj
new file:   vs/test_strict_char_noexcept.vcxproj
new file:   vs/toml++.natvis
new file:   vs/toml++.props
new file:   vs/toml++.sln
new file:   vs/toml++.vcxproj
new file:   vs/toml++.vcxproj.filters
2020-01-04 16:21:38 +02:00