Repository files navigation

toml-java

A parser for TOML files with minimum dependencies.

Javadoc

Goals

  1. To conform to the TOML specification as much as possible.
  2. To return a Java object tree/subtree with no custom classes.
  3. To have as little runtime dependencies as possible (currently only Antlr4 runtime is required).

Maven & Gradle coordinates

  • Current version: 13.5.1
    • 13 - Dependency on Antlr 4.13.1
    • 5 - TOML grammar version 5 (supports TOML 1.1 specification)
    • 1 - Release 1

Maven:

<dependency>
<groupId>net.vieiro</groupId>
<artifactId>toml-java</artifactId>
<version>13.5.1</version>
</dependency>

Gradle:

implementation 'net.vieiro:toml-java:13.5.1'

Basic usage

This main API of this library has just two public classes:

  • TOMLParser, used to parse a TOML document.
  • TOML, the result of the parsing, that contains:
    • The parsed java object tree getRoot().
    • The errors generated during parsing, if any getErrors().
    • Different query methods for analyging the generated object graph.
    • Methods for dumping the java object graph to JSON.

A basic parsing of a TOML document would be:

// Parse an InputStreamTOMLtoml = TOMLParser.parseFromInputStream(input);
// No errors should be producedassert(toml.getErrors().isEmpty());
// Obtain the parsed object treeMap<String, Object> parsed = toml.getRoot();
// Or query the parsed object treeStringred = toml.getString("fruits/0/physical/color").orElse(null);

Antlr4 Parser

The ANTLR4 parser (automatically generated) is also available under the net.vieiro.toml.antlr4 package. This API is considered stable in minor version. If the grammar changes then the minor version will be also upgraded.

Type mapping

The Java object tree generated after parsing a TOML document is created with the following Java types:

TOML TypeJava Type
IntegerLong
BooleanBoolean
FloatDouble (including PositiveInfinity, NegativeInfinity or NaN)
StringString
Offset date-timeOffsetDateTime
Local date-timeLocalDateTime
Local dateLocalDate
Local timeLocalTime
ArrayList<Object>
TableMap<String, Object>
Array of TablesList<Map<String, Object>>

Javadoc API

See the Javadoc for this project for more details.

Querying

The TOML generated object tree can be queried using a very simple language: you specify a path separated with forward slashes, specifying either the name of a table or an integer when accessing an array.

For instance, given the following TOML document:

[[fruits]]
name = "apple"
[fruits.physical] # subtablecolor = "red"shape = "round"
[[fruits.varieties]] # nested array of tablesname = "red delicious"
[[fruits.varieties]]
name = "granny smith"
[[fruits]]
name = "banana"
[[fruits.varieties]]
name = "plantain"

You can query it, once parsed, as follows:

// Parse an InputStreamTOMLtoml = TOMLParser.parseFromInputStream(input);
// Returns "red"Stringred = toml.getString("fruits/0/physical/color").orElse(null);
// Returns "plantain"Stringplantain = toml.getString("fruits/1/varieties/0/name").orElse(null);
// Also returns "plantain", note the negative indexStringplantain_too = toml.getString("fruits/1/varieties/-1/name").orElse(null);

You can use negative indexes (-1, -2) for accessing arrays from the end.

See TOML.java for different query methods.

Subtree queries

In order to parse complex TOML documents, one can retrieve a subtree and query it. For instance, given the following TOML document:

[package]
name = "parquet"version = {workspace = true}
[dependencies]
arrow-array = {worskpace = true, optional = true}

You could query it using either the TOML "root" object or use a subtree TOML object, like so:

// Parse the documentTOMLtoml = TOMLParser.parseFromInputStream(...);
// Query the value of "dependencies/arrow-array/optional"booloptional1 = toml.getBoolean("dependencies/arrow-array/optional").orElse(false);
// Or query a subtreebooloptional2 = toml.getSubtree("dependencies").getBoolean("arrow-array/optional").orElse(false);

More advanced querying

You can use more advanced techniques and expression languages for querying the object tree. The unit tests have some examples for querying the object tree using OGNL (but you could use JXPath, Spring SpEL, etc.).

JSON Serialization

You can dump a TOML parsing result into JSON without requiring extra dependencies:

// Parse an InputStreamTOMLtoml = TOMLParser.parseFromString(
"[dog.\"tater.man\"]\n"
+ "type.name = \"pug\"");
toml.writeJSON(System.out);

Produces:

{"dog":{"tater.man":{"type":{"name":"pug"}}}}

Bugs

Please file an issue if you find a TOML document that can't be parsed with this library.

Release notes

1.1.1 Initial version

This version depends on Antlr4 v4.13.1.

1.1.11 Dependency downgrade

This version depends on Antlr4 v4.11.1 (changed to adhere to NetBeans Antlr4 version).

2.13.1 Antlr4 Lexer & Parser

  • Changed versioning scheme. Major: Grammar version, Minor: Antlr4 version, Patch: bug fixes. (e.g. 2.13.1 means Grammar version 2, Antlr 4.13.X, Release 1)
  • The Antlr4 lexer and parser is now considered a public API.
  • Updated the lexer to work nicely with unclosed literal strings (for NetBeans IDE Editor integration).
  • Upgraded Antlr4 runtime to v4.13.1 again.
  • Simple query language now ignores contiguous or leading spaces (this is, the following queries are equivalent: "/a/b", "a/b", "a//b").
  • Added "subtree" queries, to ease analyzing subtrees.

13.3.1

  • Changed versioning scheme to:
    • Major: antlr version (for instance, 13 means Antlr 4.13.X
    • Minor: toml-java grammar version.
    • Patch: bug fixes
  • The lexer now detects incomplete tokens and properly reports them with token INVALID_VALUE.
    • This is useful for the NetBeans Antlr bridge.
  • toml-java runs 555 unit tests.

13.4.1

  • Downgrading to JDK8 class format.
  • Grammar updated to version 4: lexer detects more unexpected tokens.

13.4.2

  • Handling of unclosed inline-tables and arrays with invalid tokens for NetBeans.

13.5.1

  • Support TOML v1.1

About

TOML parser for Java

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

toml-java

A parser for TOML files with minimum dependencies.

Javadoc

Goals

  1. To conform to the TOML specification as much as possible.
  2. To return a Java object tree/subtree with no custom classes.
  3. To have as little runtime dependencies as possible (currently only Antlr4 runtime is required).

Maven & Gradle coordinates

  • Current version: 13.5.1
    • 13 - Dependency on Antlr 4.13.1
    • 5 - TOML grammar version 5 (supports TOML 1.1 specification)
    • 1 - Release 1

Maven:

<dependency>
<groupId>net.vieiro</groupId>
<artifactId>toml-java</artifactId>
<version>13.5.1</version>
</dependency>

Gradle:

implementation 'net.vieiro:toml-java:13.5.1'

Basic usage

This main API of this library has just two public classes:

  • TOMLParser, used to parse a TOML document.
  • TOML, the result of the parsing, that contains:
    • The parsed java object tree getRoot().
    • The errors generated during parsing, if any getErrors().
    • Different query methods for analyging the generated object graph.
    • Methods for dumping the java object graph to JSON.

A basic parsing of a TOML document would be:

// Parse an InputStreamTOMLtoml = TOMLParser.parseFromInputStream(input);
// No errors should be producedassert(toml.getErrors().isEmpty());
// Obtain the parsed object treeMap<String, Object> parsed = toml.getRoot();
// Or query the parsed object treeStringred = toml.getString("fruits/0/physical/color").orElse(null);

Antlr4 Parser

The ANTLR4 parser (automatically generated) is also available under the net.vieiro.toml.antlr4 package. This API is considered stable in minor version. If the grammar changes then the minor version will be also upgraded.

Type mapping

The Java object tree generated after parsing a TOML document is created with the following Java types:

TOML TypeJava Type
IntegerLong
BooleanBoolean
FloatDouble (including PositiveInfinity, NegativeInfinity or NaN)
StringString
Offset date-timeOffsetDateTime
Local date-timeLocalDateTime
Local dateLocalDate
Local timeLocalTime
ArrayList<Object>
TableMap<String, Object>
Array of TablesList<Map<String, Object>>

Javadoc API

See the Javadoc for this project for more details.

Querying

The TOML generated object tree can be queried using a very simple language: you specify a path separated with forward slashes, specifying either the name of a table or an integer when accessing an array.

For instance, given the following TOML document:

[[fruits]]
name = "apple"
[fruits.physical] # subtablecolor = "red"shape = "round"
[[fruits.varieties]] # nested array of tablesname = "red delicious"
[[fruits.varieties]]
name = "granny smith"
[[fruits]]
name = "banana"
[[fruits.varieties]]
name = "plantain"

You can query it, once parsed, as follows:

// Parse an InputStreamTOMLtoml = TOMLParser.parseFromInputStream(input);
// Returns "red"Stringred = toml.getString("fruits/0/physical/color").orElse(null);
// Returns "plantain"Stringplantain = toml.getString("fruits/1/varieties/0/name").orElse(null);
// Also returns "plantain", note the negative indexStringplantain_too = toml.getString("fruits/1/varieties/-1/name").orElse(null);

You can use negative indexes (-1, -2) for accessing arrays from the end.

See TOML.java for different query methods.

Subtree queries

In order to parse complex TOML documents, one can retrieve a subtree and query it. For instance, given the following TOML document:

[package]
name = "parquet"version = {workspace = true}
[dependencies]
arrow-array = {worskpace = true, optional = true}

You could query it using either the TOML "root" object or use a subtree TOML object, like so:

// Parse the documentTOMLtoml = TOMLParser.parseFromInputStream(...);
// Query the value of "dependencies/arrow-array/optional"booloptional1 = toml.getBoolean("dependencies/arrow-array/optional").orElse(false);
// Or query a subtreebooloptional2 = toml.getSubtree("dependencies").getBoolean("arrow-array/optional").orElse(false);

More advanced querying

You can use more advanced techniques and expression languages for querying the object tree. The unit tests have some examples for querying the object tree using OGNL (but you could use JXPath, Spring SpEL, etc.).

JSON Serialization

You can dump a TOML parsing result into JSON without requiring extra dependencies:

// Parse an InputStreamTOMLtoml = TOMLParser.parseFromString(
"[dog.\"tater.man\"]\n"
+ "type.name = \"pug\"");
toml.writeJSON(System.out);

Produces:

{"dog":{"tater.man":{"type":{"name":"pug"}}}}

Bugs

Please file an issue if you find a TOML document that can't be parsed with this library.

Release notes

1.1.1 Initial version

This version depends on Antlr4 v4.13.1.

1.1.11 Dependency downgrade

This version depends on Antlr4 v4.11.1 (changed to adhere to NetBeans Antlr4 version).

2.13.1 Antlr4 Lexer & Parser

  • Changed versioning scheme. Major: Grammar version, Minor: Antlr4 version, Patch: bug fixes. (e.g. 2.13.1 means Grammar version 2, Antlr 4.13.X, Release 1)
  • The Antlr4 lexer and parser is now considered a public API.
  • Updated the lexer to work nicely with unclosed literal strings (for NetBeans IDE Editor integration).
  • Upgraded Antlr4 runtime to v4.13.1 again.
  • Simple query language now ignores contiguous or leading spaces (this is, the following queries are equivalent: "/a/b", "a/b", "a//b").
  • Added "subtree" queries, to ease analyzing subtrees.

13.3.1

  • Changed versioning scheme to:
    • Major: antlr version (for instance, 13 means Antlr 4.13.X
    • Minor: toml-java grammar version.
    • Patch: bug fixes
  • The lexer now detects incomplete tokens and properly reports them with token INVALID_VALUE.
    • This is useful for the NetBeans Antlr bridge.
  • toml-java runs 555 unit tests.

13.4.1

  • Downgrading to JDK8 class format.
  • Grammar updated to version 4: lexer detects more unexpected tokens.

13.4.2

  • Handling of unclosed inline-tables and arrays with invalid tokens for NetBeans.

13.5.1

  • Support TOML v1.1

About

TOML parser for Java

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

toml-java

A parser for TOML files with minimum dependencies.

Javadoc

Goals

  1. To conform to the TOML specification as much as possible.
  2. To return a Java object tree/subtree with no custom classes.
  3. To have as little runtime dependencies as possible (currently only Antlr4 runtime is required).

Maven & Gradle coordinates

  • Current version: 13.5.1
    • 13 - Dependency on Antlr 4.13.1
    • 5 - TOML grammar version 5 (supports TOML 1.1 specification)
    • 1 - Release 1

Maven:

<dependency>
<groupId>net.vieiro</groupId>
<artifactId>toml-java</artifactId>
<version>13.5.1</version>
</dependency>

Gradle:

implementation 'net.vieiro:toml-java:13.5.1'

Basic usage

This main API of this library has just two public classes:

  • TOMLParser, used to parse a TOML document.
  • TOML, the result of the parsing, that contains:
    • The parsed java object tree getRoot().
    • The errors generated during parsing, if any getErrors().
    • Different query methods for analyging the generated object graph.
    • Methods for dumping the java object graph to JSON.

A basic parsing of a TOML document would be:

// Parse an InputStreamTOMLtoml = TOMLParser.parseFromInputStream(input);
// No errors should be producedassert(toml.getErrors().isEmpty());
// Obtain the parsed object treeMap<String, Object> parsed = toml.getRoot();
// Or query the parsed object treeStringred = toml.getString("fruits/0/physical/color").orElse(null);

Antlr4 Parser

The ANTLR4 parser (automatically generated) is also available under the net.vieiro.toml.antlr4 package. This API is considered stable in minor version. If the grammar changes then the minor version will be also upgraded.

Type mapping

The Java object tree generated after parsing a TOML document is created with the following Java types:

TOML TypeJava Type
IntegerLong
BooleanBoolean
FloatDouble (including PositiveInfinity, NegativeInfinity or NaN)
StringString
Offset date-timeOffsetDateTime
Local date-timeLocalDateTime
Local dateLocalDate
Local timeLocalTime
ArrayList<Object>
TableMap<String, Object>
Array of TablesList<Map<String, Object>>

Javadoc API

See the Javadoc for this project for more details.

Querying

The TOML generated object tree can be queried using a very simple language: you specify a path separated with forward slashes, specifying either the name of a table or an integer when accessing an array.

For instance, given the following TOML document:

[[fruits]]
name = "apple"
[fruits.physical] # subtablecolor = "red"shape = "round"
[[fruits.varieties]] # nested array of tablesname = "red delicious"
[[fruits.varieties]]
name = "granny smith"
[[fruits]]
name = "banana"
[[fruits.varieties]]
name = "plantain"

You can query it, once parsed, as follows:

// Parse an InputStreamTOMLtoml = TOMLParser.parseFromInputStream(input);
// Returns "red"Stringred = toml.getString("fruits/0/physical/color").orElse(null);
// Returns "plantain"Stringplantain = toml.getString("fruits/1/varieties/0/name").orElse(null);
// Also returns "plantain", note the negative indexStringplantain_too = toml.getString("fruits/1/varieties/-1/name").orElse(null);

You can use negative indexes (-1, -2) for accessing arrays from the end.

See TOML.java for different query methods.

Subtree queries

In order to parse complex TOML documents, one can retrieve a subtree and query it. For instance, given the following TOML document:

[package]
name = "parquet"version = {workspace = true}
[dependencies]
arrow-array = {worskpace = true, optional = true}

You could query it using either the TOML "root" object or use a subtree TOML object, like so:

// Parse the documentTOMLtoml = TOMLParser.parseFromInputStream(...);
// Query the value of "dependencies/arrow-array/optional"booloptional1 = toml.getBoolean("dependencies/arrow-array/optional").orElse(false);
// Or query a subtreebooloptional2 = toml.getSubtree("dependencies").getBoolean("arrow-array/optional").orElse(false);

More advanced querying

You can use more advanced techniques and expression languages for querying the object tree. The unit tests have some examples for querying the object tree using OGNL (but you could use JXPath, Spring SpEL, etc.).

JSON Serialization

You can dump a TOML parsing result into JSON without requiring extra dependencies:

// Parse an InputStreamTOMLtoml = TOMLParser.parseFromString(
"[dog.\"tater.man\"]\n"
+ "type.name = \"pug\"");
toml.writeJSON(System.out);

Produces:

{"dog":{"tater.man":{"type":{"name":"pug"}}}}

Bugs

Please file an issue if you find a TOML document that can't be parsed with this library.

Release notes

1.1.1 Initial version

This version depends on Antlr4 v4.13.1.

1.1.11 Dependency downgrade

This version depends on Antlr4 v4.11.1 (changed to adhere to NetBeans Antlr4 version).

2.13.1 Antlr4 Lexer & Parser

  • Changed versioning scheme. Major: Grammar version, Minor: Antlr4 version, Patch: bug fixes. (e.g. 2.13.1 means Grammar version 2, Antlr 4.13.X, Release 1)
  • The Antlr4 lexer and parser is now considered a public API.
  • Updated the lexer to work nicely with unclosed literal strings (for NetBeans IDE Editor integration).
  • Upgraded Antlr4 runtime to v4.13.1 again.
  • Simple query language now ignores contiguous or leading spaces (this is, the following queries are equivalent: "/a/b", "a/b", "a//b").
  • Added "subtree" queries, to ease analyzing subtrees.

13.3.1

  • Changed versioning scheme to:
    • Major: antlr version (for instance, 13 means Antlr 4.13.X
    • Minor: toml-java grammar version.
    • Patch: bug fixes
  • The lexer now detects incomplete tokens and properly reports them with token INVALID_VALUE.
    • This is useful for the NetBeans Antlr bridge.
  • toml-java runs 555 unit tests.

13.4.1

  • Downgrading to JDK8 class format.
  • Grammar updated to version 4: lexer detects more unexpected tokens.

13.4.2

  • Handling of unclosed inline-tables and arrays with invalid tokens for NetBeans.

13.5.1

  • Support TOML v1.1

About

TOML parser for Java

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

toml-java

A parser for TOML files with minimum dependencies.

Javadoc

Goals

  1. To conform to the TOML specification as much as possible.
  2. To return a Java object tree/subtree with no custom classes.
  3. To have as little runtime dependencies as possible (currently only Antlr4 runtime is required).

Maven & Gradle coordinates

  • Current version: 13.5.1
    • 13 - Dependency on Antlr 4.13.1
    • 5 - TOML grammar version 5 (supports TOML 1.1 specification)
    • 1 - Release 1

Maven:

<dependency>
<groupId>net.vieiro</groupId>
<artifactId>toml-java</artifactId>
<version>13.5.1</version>
</dependency>

Gradle:

implementation 'net.vieiro:toml-java:13.5.1'

Basic usage

This main API of this library has just two public classes:

  • TOMLParser, used to parse a TOML document.
  • TOML, the result of the parsing, that contains:
    • The parsed java object tree getRoot().
    • The errors generated during parsing, if any getErrors().
    • Different query methods for analyging the generated object graph.
    • Methods for dumping the java object graph to JSON.

A basic parsing of a TOML document would be:

// Parse an InputStreamTOMLtoml = TOMLParser.parseFromInputStream(input);
// No errors should be producedassert(toml.getErrors().isEmpty());
// Obtain the parsed object treeMap<String, Object> parsed = toml.getRoot();
// Or query the parsed object treeStringred = toml.getString("fruits/0/physical/color").orElse(null);

Antlr4 Parser

The ANTLR4 parser (automatically generated) is also available under the net.vieiro.toml.antlr4 package. This API is considered stable in minor version. If the grammar changes then the minor version will be also upgraded.

Type mapping

The Java object tree generated after parsing a TOML document is created with the following Java types:

TOML TypeJava Type
IntegerLong
BooleanBoolean
FloatDouble (including PositiveInfinity, NegativeInfinity or NaN)
StringString
Offset date-timeOffsetDateTime
Local date-timeLocalDateTime
Local dateLocalDate
Local timeLocalTime
ArrayList<Object>
TableMap<String, Object>
Array of TablesList<Map<String, Object>>

Javadoc API

See the Javadoc for this project for more details.

Querying

The TOML generated object tree can be queried using a very simple language: you specify a path separated with forward slashes, specifying either the name of a table or an integer when accessing an array.

For instance, given the following TOML document:

[[fruits]]
name = "apple"
[fruits.physical] # subtablecolor = "red"shape = "round"
[[fruits.varieties]] # nested array of tablesname = "red delicious"
[[fruits.varieties]]
name = "granny smith"
[[fruits]]
name = "banana"
[[fruits.varieties]]
name = "plantain"

You can query it, once parsed, as follows:

// Parse an InputStreamTOMLtoml = TOMLParser.parseFromInputStream(input);
// Returns "red"Stringred = toml.getString("fruits/0/physical/color").orElse(null);
// Returns "plantain"Stringplantain = toml.getString("fruits/1/varieties/0/name").orElse(null);
// Also returns "plantain", note the negative indexStringplantain_too = toml.getString("fruits/1/varieties/-1/name").orElse(null);

You can use negative indexes (-1, -2) for accessing arrays from the end.

See TOML.java for different query methods.

Subtree queries

In order to parse complex TOML documents, one can retrieve a subtree and query it. For instance, given the following TOML document:

[package]
name = "parquet"version = {workspace = true}
[dependencies]
arrow-array = {worskpace = true, optional = true}

You could query it using either the TOML "root" object or use a subtree TOML object, like so:

// Parse the documentTOMLtoml = TOMLParser.parseFromInputStream(...);
// Query the value of "dependencies/arrow-array/optional"booloptional1 = toml.getBoolean("dependencies/arrow-array/optional").orElse(false);
// Or query a subtreebooloptional2 = toml.getSubtree("dependencies").getBoolean("arrow-array/optional").orElse(false);

More advanced querying

You can use more advanced techniques and expression languages for querying the object tree. The unit tests have some examples for querying the object tree using OGNL (but you could use JXPath, Spring SpEL, etc.).

JSON Serialization

You can dump a TOML parsing result into JSON without requiring extra dependencies:

// Parse an InputStreamTOMLtoml = TOMLParser.parseFromString(
"[dog.\"tater.man\"]\n"
+ "type.name = \"pug\"");
toml.writeJSON(System.out);

Produces:

{"dog":{"tater.man":{"type":{"name":"pug"}}}}

Bugs

Please file an issue if you find a TOML document that can't be parsed with this library.

Release notes

1.1.1 Initial version

This version depends on Antlr4 v4.13.1.

1.1.11 Dependency downgrade

This version depends on Antlr4 v4.11.1 (changed to adhere to NetBeans Antlr4 version).

2.13.1 Antlr4 Lexer & Parser

  • Changed versioning scheme. Major: Grammar version, Minor: Antlr4 version, Patch: bug fixes. (e.g. 2.13.1 means Grammar version 2, Antlr 4.13.X, Release 1)
  • The Antlr4 lexer and parser is now considered a public API.
  • Updated the lexer to work nicely with unclosed literal strings (for NetBeans IDE Editor integration).
  • Upgraded Antlr4 runtime to v4.13.1 again.
  • Simple query language now ignores contiguous or leading spaces (this is, the following queries are equivalent: "/a/b", "a/b", "a//b").
  • Added "subtree" queries, to ease analyzing subtrees.

13.3.1

  • Changed versioning scheme to:
    • Major: antlr version (for instance, 13 means Antlr 4.13.X
    • Minor: toml-java grammar version.
    • Patch: bug fixes
  • The lexer now detects incomplete tokens and properly reports them with token INVALID_VALUE.
    • This is useful for the NetBeans Antlr bridge.
  • toml-java runs 555 unit tests.

13.4.1

  • Downgrading to JDK8 class format.
  • Grammar updated to version 4: lexer detects more unexpected tokens.

13.4.2

  • Handling of unclosed inline-tables and arrays with invalid tokens for NetBeans.

13.5.1

  • Support TOML v1.1

About

TOML parser for Java

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

toml-java

A parser for TOML files with minimum dependencies.

Javadoc

Goals

  1. To conform to the TOML specification as much as possible.
  2. To return a Java object tree/subtree with no custom classes.
  3. To have as little runtime dependencies as possible (currently only Antlr4 runtime is required).

Maven & Gradle coordinates

  • Current version: 13.5.1
    • 13 - Dependency on Antlr 4.13.1
    • 5 - TOML grammar version 5 (supports TOML 1.1 specification)
    • 1 - Release 1

Maven:

<dependency>
<groupId>net.vieiro</groupId>
<artifactId>toml-java</artifactId>
<version>13.5.1</version>
</dependency>

Gradle:

implementation 'net.vieiro:toml-java:13.5.1'

Basic usage

This main API of this library has just two public classes:

  • TOMLParser, used to parse a TOML document.
  • TOML, the result of the parsing, that contains:
    • The parsed java object tree getRoot().
    • The errors generated during parsing, if any getErrors().
    • Different query methods for analyging the generated object graph.
    • Methods for dumping the java object graph to JSON.

A basic parsing of a TOML document would be:

// Parse an InputStreamTOMLtoml = TOMLParser.parseFromInputStream(input);
// No errors should be producedassert(toml.getErrors().isEmpty());
// Obtain the parsed object treeMap<String, Object> parsed = toml.getRoot();
// Or query the parsed object treeStringred = toml.getString("fruits/0/physical/color").orElse(null);

Antlr4 Parser

The ANTLR4 parser (automatically generated) is also available under the net.vieiro.toml.antlr4 package. This API is considered stable in minor version. If the grammar changes then the minor version will be also upgraded.

Type mapping

The Java object tree generated after parsing a TOML document is created with the following Java types:

TOML TypeJava Type
IntegerLong
BooleanBoolean
FloatDouble (including PositiveInfinity, NegativeInfinity or NaN)
StringString
Offset date-timeOffsetDateTime
Local date-timeLocalDateTime
Local dateLocalDate
Local timeLocalTime
ArrayList<Object>
TableMap<String, Object>
Array of TablesList<Map<String, Object>>

Javadoc API

See the Javadoc for this project for more details.

Querying

The TOML generated object tree can be queried using a very simple language: you specify a path separated with forward slashes, specifying either the name of a table or an integer when accessing an array.

For instance, given the following TOML document:

[[fruits]]
name = "apple"
[fruits.physical] # subtablecolor = "red"shape = "round"
[[fruits.varieties]] # nested array of tablesname = "red delicious"
[[fruits.varieties]]
name = "granny smith"
[[fruits]]
name = "banana"
[[fruits.varieties]]
name = "plantain"

You can query it, once parsed, as follows:

// Parse an InputStreamTOMLtoml = TOMLParser.parseFromInputStream(input);
// Returns "red"Stringred = toml.getString("fruits/0/physical/color").orElse(null);
// Returns "plantain"Stringplantain = toml.getString("fruits/1/varieties/0/name").orElse(null);
// Also returns "plantain", note the negative indexStringplantain_too = toml.getString("fruits/1/varieties/-1/name").orElse(null);

You can use negative indexes (-1, -2) for accessing arrays from the end.

See TOML.java for different query methods.

Subtree queries

In order to parse complex TOML documents, one can retrieve a subtree and query it. For instance, given the following TOML document:

[package]
name = "parquet"version = {workspace = true}
[dependencies]
arrow-array = {worskpace = true, optional = true}

You could query it using either the TOML "root" object or use a subtree TOML object, like so:

// Parse the documentTOMLtoml = TOMLParser.parseFromInputStream(...);
// Query the value of "dependencies/arrow-array/optional"booloptional1 = toml.getBoolean("dependencies/arrow-array/optional").orElse(false);
// Or query a subtreebooloptional2 = toml.getSubtree("dependencies").getBoolean("arrow-array/optional").orElse(false);

More advanced querying

You can use more advanced techniques and expression languages for querying the object tree. The unit tests have some examples for querying the object tree using OGNL (but you could use JXPath, Spring SpEL, etc.).

JSON Serialization

You can dump a TOML parsing result into JSON without requiring extra dependencies:

// Parse an InputStreamTOMLtoml = TOMLParser.parseFromString(
"[dog.\"tater.man\"]\n"
+ "type.name = \"pug\"");
toml.writeJSON(System.out);

Produces:

{"dog":{"tater.man":{"type":{"name":"pug"}}}}

Bugs

Please file an issue if you find a TOML document that can't be parsed with this library.

Release notes

1.1.1 Initial version

This version depends on Antlr4 v4.13.1.

1.1.11 Dependency downgrade

This version depends on Antlr4 v4.11.1 (changed to adhere to NetBeans Antlr4 version).

2.13.1 Antlr4 Lexer & Parser

  • Changed versioning scheme. Major: Grammar version, Minor: Antlr4 version, Patch: bug fixes. (e.g. 2.13.1 means Grammar version 2, Antlr 4.13.X, Release 1)
  • The Antlr4 lexer and parser is now considered a public API.
  • Updated the lexer to work nicely with unclosed literal strings (for NetBeans IDE Editor integration).
  • Upgraded Antlr4 runtime to v4.13.1 again.
  • Simple query language now ignores contiguous or leading spaces (this is, the following queries are equivalent: "/a/b", "a/b", "a//b").
  • Added "subtree" queries, to ease analyzing subtrees.

13.3.1

  • Changed versioning scheme to:
    • Major: antlr version (for instance, 13 means Antlr 4.13.X
    • Minor: toml-java grammar version.
    • Patch: bug fixes
  • The lexer now detects incomplete tokens and properly reports them with token INVALID_VALUE.
    • This is useful for the NetBeans Antlr bridge.
  • toml-java runs 555 unit tests.

13.4.1

  • Downgrading to JDK8 class format.
  • Grammar updated to version 4: lexer detects more unexpected tokens.

13.4.2

  • Handling of unclosed inline-tables and arrays with invalid tokens for NetBeans.

13.5.1

  • Support TOML v1.1

About

TOML parser for Java

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

toml-java

A parser for TOML files with minimum dependencies.

Javadoc

Goals

  1. To conform to the TOML specification as much as possible.
  2. To return a Java object tree/subtree with no custom classes.
  3. To have as little runtime dependencies as possible (currently only Antlr4 runtime is required).

Maven & Gradle coordinates

  • Current version: 13.5.1
    • 13 - Dependency on Antlr 4.13.1
    • 5 - TOML grammar version 5 (supports TOML 1.1 specification)
    • 1 - Release 1

Maven:

<dependency>
<groupId>net.vieiro</groupId>
<artifactId>toml-java</artifactId>
<version>13.5.1</version>
</dependency>

Gradle:

implementation 'net.vieiro:toml-java:13.5.1'

Basic usage

This main API of this library has just two public classes:

  • TOMLParser, used to parse a TOML document.
  • TOML, the result of the parsing, that contains:
    • The parsed java object tree getRoot().
    • The errors generated during parsing, if any getErrors().
    • Different query methods for analyging the generated object graph.
    • Methods for dumping the java object graph to JSON.

A basic parsing of a TOML document would be:

// Parse an InputStreamTOMLtoml = TOMLParser.parseFromInputStream(input);
// No errors should be producedassert(toml.getErrors().isEmpty());
// Obtain the parsed object treeMap<String, Object> parsed = toml.getRoot();
// Or query the parsed object treeStringred = toml.getString("fruits/0/physical/color").orElse(null);

Antlr4 Parser

The ANTLR4 parser (automatically generated) is also available under the net.vieiro.toml.antlr4 package. This API is considered stable in minor version. If the grammar changes then the minor version will be also upgraded.

Type mapping

The Java object tree generated after parsing a TOML document is created with the following Java types:

TOML TypeJava Type
IntegerLong
BooleanBoolean
FloatDouble (including PositiveInfinity, NegativeInfinity or NaN)
StringString
Offset date-timeOffsetDateTime
Local date-timeLocalDateTime
Local dateLocalDate
Local timeLocalTime
ArrayList<Object>
TableMap<String, Object>
Array of TablesList<Map<String, Object>>

Javadoc API

See the Javadoc for this project for more details.

Querying

The TOML generated object tree can be queried using a very simple language: you specify a path separated with forward slashes, specifying either the name of a table or an integer when accessing an array.

For instance, given the following TOML document:

[[fruits]]
name = "apple"
[fruits.physical] # subtablecolor = "red"shape = "round"
[[fruits.varieties]] # nested array of tablesname = "red delicious"
[[fruits.varieties]]
name = "granny smith"
[[fruits]]
name = "banana"
[[fruits.varieties]]
name = "plantain"

You can query it, once parsed, as follows:

// Parse an InputStreamTOMLtoml = TOMLParser.parseFromInputStream(input);
// Returns "red"Stringred = toml.getString("fruits/0/physical/color").orElse(null);
// Returns "plantain"Stringplantain = toml.getString("fruits/1/varieties/0/name").orElse(null);
// Also returns "plantain", note the negative indexStringplantain_too = toml.getString("fruits/1/varieties/-1/name").orElse(null);

You can use negative indexes (-1, -2) for accessing arrays from the end.

See TOML.java for different query methods.

Subtree queries

In order to parse complex TOML documents, one can retrieve a subtree and query it. For instance, given the following TOML document:

[package]
name = "parquet"version = {workspace = true}
[dependencies]
arrow-array = {worskpace = true, optional = true}

You could query it using either the TOML "root" object or use a subtree TOML object, like so:

// Parse the documentTOMLtoml = TOMLParser.parseFromInputStream(...);
// Query the value of "dependencies/arrow-array/optional"booloptional1 = toml.getBoolean("dependencies/arrow-array/optional").orElse(false);
// Or query a subtreebooloptional2 = toml.getSubtree("dependencies").getBoolean("arrow-array/optional").orElse(false);

More advanced querying

You can use more advanced techniques and expression languages for querying the object tree. The unit tests have some examples for querying the object tree using OGNL (but you could use JXPath, Spring SpEL, etc.).

JSON Serialization

You can dump a TOML parsing result into JSON without requiring extra dependencies:

// Parse an InputStreamTOMLtoml = TOMLParser.parseFromString(
"[dog.\"tater.man\"]\n"
+ "type.name = \"pug\"");
toml.writeJSON(System.out);

Produces:

{"dog":{"tater.man":{"type":{"name":"pug"}}}}

Bugs

Please file an issue if you find a TOML document that can't be parsed with this library.

Release notes

1.1.1 Initial version

This version depends on Antlr4 v4.13.1.

1.1.11 Dependency downgrade

This version depends on Antlr4 v4.11.1 (changed to adhere to NetBeans Antlr4 version).

2.13.1 Antlr4 Lexer & Parser

  • Changed versioning scheme. Major: Grammar version, Minor: Antlr4 version, Patch: bug fixes. (e.g. 2.13.1 means Grammar version 2, Antlr 4.13.X, Release 1)
  • The Antlr4 lexer and parser is now considered a public API.
  • Updated the lexer to work nicely with unclosed literal strings (for NetBeans IDE Editor integration).
  • Upgraded Antlr4 runtime to v4.13.1 again.
  • Simple query language now ignores contiguous or leading spaces (this is, the following queries are equivalent: "/a/b", "a/b", "a//b").
  • Added "subtree" queries, to ease analyzing subtrees.

13.3.1

  • Changed versioning scheme to:
    • Major: antlr version (for instance, 13 means Antlr 4.13.X
    • Minor: toml-java grammar version.
    • Patch: bug fixes
  • The lexer now detects incomplete tokens and properly reports them with token INVALID_VALUE.
    • This is useful for the NetBeans Antlr bridge.
  • toml-java runs 555 unit tests.

13.4.1

  • Downgrading to JDK8 class format.
  • Grammar updated to version 4: lexer detects more unexpected tokens.

13.4.2

  • Handling of unclosed inline-tables and arrays with invalid tokens for NetBeans.

13.5.1

  • Support TOML v1.1

About

TOML parser for Java

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

toml-java

A parser for TOML files with minimum dependencies.

Javadoc

Goals

  1. To conform to the TOML specification as much as possible.
  2. To return a Java object tree/subtree with no custom classes.
  3. To have as little runtime dependencies as possible (currently only Antlr4 runtime is required).

Maven & Gradle coordinates

  • Current version: 13.5.1
    • 13 - Dependency on Antlr 4.13.1
    • 5 - TOML grammar version 5 (supports TOML 1.1 specification)
    • 1 - Release 1

Maven:

<dependency>
<groupId>net.vieiro</groupId>
<artifactId>toml-java</artifactId>
<version>13.5.1</version>
</dependency>

Gradle:

implementation 'net.vieiro:toml-java:13.5.1'

Basic usage

This main API of this library has just two public classes:

  • TOMLParser, used to parse a TOML document.
  • TOML, the result of the parsing, that contains:
    • The parsed java object tree getRoot().
    • The errors generated during parsing, if any getErrors().
    • Different query methods for analyging the generated object graph.
    • Methods for dumping the java object graph to JSON.

A basic parsing of a TOML document would be:

// Parse an InputStreamTOMLtoml = TOMLParser.parseFromInputStream(input);
// No errors should be producedassert(toml.getErrors().isEmpty());
// Obtain the parsed object treeMap<String, Object> parsed = toml.getRoot();
// Or query the parsed object treeStringred = toml.getString("fruits/0/physical/color").orElse(null);

Antlr4 Parser

The ANTLR4 parser (automatically generated) is also available under the net.vieiro.toml.antlr4 package. This API is considered stable in minor version. If the grammar changes then the minor version will be also upgraded.

Type mapping

The Java object tree generated after parsing a TOML document is created with the following Java types:

TOML TypeJava Type
IntegerLong
BooleanBoolean
FloatDouble (including PositiveInfinity, NegativeInfinity or NaN)
StringString
Offset date-timeOffsetDateTime
Local date-timeLocalDateTime
Local dateLocalDate
Local timeLocalTime
ArrayList<Object>
TableMap<String, Object>
Array of TablesList<Map<String, Object>>

Javadoc API

See the Javadoc for this project for more details.

Querying

The TOML generated object tree can be queried using a very simple language: you specify a path separated with forward slashes, specifying either the name of a table or an integer when accessing an array.

For instance, given the following TOML document:

[[fruits]]
name = "apple"
[fruits.physical] # subtablecolor = "red"shape = "round"
[[fruits.varieties]] # nested array of tablesname = "red delicious"
[[fruits.varieties]]
name = "granny smith"
[[fruits]]
name = "banana"
[[fruits.varieties]]
name = "plantain"

You can query it, once parsed, as follows:

// Parse an InputStreamTOMLtoml = TOMLParser.parseFromInputStream(input);
// Returns "red"Stringred = toml.getString("fruits/0/physical/color").orElse(null);
// Returns "plantain"Stringplantain = toml.getString("fruits/1/varieties/0/name").orElse(null);
// Also returns "plantain", note the negative indexStringplantain_too = toml.getString("fruits/1/varieties/-1/name").orElse(null);

You can use negative indexes (-1, -2) for accessing arrays from the end.

See TOML.java for different query methods.

Subtree queries

In order to parse complex TOML documents, one can retrieve a subtree and query it. For instance, given the following TOML document:

[package]
name = "parquet"version = {workspace = true}
[dependencies]
arrow-array = {worskpace = true, optional = true}

You could query it using either the TOML "root" object or use a subtree TOML object, like so:

// Parse the documentTOMLtoml = TOMLParser.parseFromInputStream(...);
// Query the value of "dependencies/arrow-array/optional"booloptional1 = toml.getBoolean("dependencies/arrow-array/optional").orElse(false);
// Or query a subtreebooloptional2 = toml.getSubtree("dependencies").getBoolean("arrow-array/optional").orElse(false);

More advanced querying

You can use more advanced techniques and expression languages for querying the object tree. The unit tests have some examples for querying the object tree using OGNL (but you could use JXPath, Spring SpEL, etc.).

JSON Serialization

You can dump a TOML parsing result into JSON without requiring extra dependencies:

// Parse an InputStreamTOMLtoml = TOMLParser.parseFromString(
"[dog.\"tater.man\"]\n"
+ "type.name = \"pug\"");
toml.writeJSON(System.out);

Produces:

{"dog":{"tater.man":{"type":{"name":"pug"}}}}

Bugs

Please file an issue if you find a TOML document that can't be parsed with this library.

Release notes

1.1.1 Initial version

This version depends on Antlr4 v4.13.1.

1.1.11 Dependency downgrade

This version depends on Antlr4 v4.11.1 (changed to adhere to NetBeans Antlr4 version).

2.13.1 Antlr4 Lexer & Parser

  • Changed versioning scheme. Major: Grammar version, Minor: Antlr4 version, Patch: bug fixes. (e.g. 2.13.1 means Grammar version 2, Antlr 4.13.X, Release 1)
  • The Antlr4 lexer and parser is now considered a public API.
  • Updated the lexer to work nicely with unclosed literal strings (for NetBeans IDE Editor integration).
  • Upgraded Antlr4 runtime to v4.13.1 again.
  • Simple query language now ignores contiguous or leading spaces (this is, the following queries are equivalent: "/a/b", "a/b", "a//b").
  • Added "subtree" queries, to ease analyzing subtrees.

13.3.1

  • Changed versioning scheme to:
    • Major: antlr version (for instance, 13 means Antlr 4.13.X
    • Minor: toml-java grammar version.
    • Patch: bug fixes
  • The lexer now detects incomplete tokens and properly reports them with token INVALID_VALUE.
    • This is useful for the NetBeans Antlr bridge.
  • toml-java runs 555 unit tests.

13.4.1

  • Downgrading to JDK8 class format.
  • Grammar updated to version 4: lexer detects more unexpected tokens.

13.4.2

  • Handling of unclosed inline-tables and arrays with invalid tokens for NetBeans.

13.5.1

  • Support TOML v1.1

About

TOML parser for Java

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

toml-java

A parser for TOML files with minimum dependencies.

Javadoc

Goals

  1. To conform to the TOML specification as much as possible.
  2. To return a Java object tree/subtree with no custom classes.
  3. To have as little runtime dependencies as possible (currently only Antlr4 runtime is required).

Maven & Gradle coordinates

  • Current version: 13.5.1
    • 13 - Dependency on Antlr 4.13.1
    • 5 - TOML grammar version 5 (supports TOML 1.1 specification)
    • 1 - Release 1

Maven:

<dependency>
<groupId>net.vieiro</groupId>
<artifactId>toml-java</artifactId>
<version>13.5.1</version>
</dependency>

Gradle:

implementation 'net.vieiro:toml-java:13.5.1'

Basic usage

This main API of this library has just two public classes:

  • TOMLParser, used to parse a TOML document.
  • TOML, the result of the parsing, that contains:
    • The parsed java object tree getRoot().
    • The errors generated during parsing, if any getErrors().
    • Different query methods for analyging the generated object graph.
    • Methods for dumping the java object graph to JSON.

A basic parsing of a TOML document would be:

// Parse an InputStreamTOMLtoml = TOMLParser.parseFromInputStream(input);
// No errors should be producedassert(toml.getErrors().isEmpty());
// Obtain the parsed object treeMap<String, Object> parsed = toml.getRoot();
// Or query the parsed object treeStringred = toml.getString("fruits/0/physical/color").orElse(null);

Antlr4 Parser

The ANTLR4 parser (automatically generated) is also available under the net.vieiro.toml.antlr4 package. This API is considered stable in minor version. If the grammar changes then the minor version will be also upgraded.

Type mapping

The Java object tree generated after parsing a TOML document is created with the following Java types:

TOML TypeJava Type
IntegerLong
BooleanBoolean
FloatDouble (including PositiveInfinity, NegativeInfinity or NaN)
StringString
Offset date-timeOffsetDateTime
Local date-timeLocalDateTime
Local dateLocalDate
Local timeLocalTime
ArrayList<Object>
TableMap<String, Object>
Array of TablesList<Map<String, Object>>

Javadoc API

See the Javadoc for this project for more details.

Querying

The TOML generated object tree can be queried using a very simple language: you specify a path separated with forward slashes, specifying either the name of a table or an integer when accessing an array.

For instance, given the following TOML document:

[[fruits]]
name = "apple"
[fruits.physical] # subtablecolor = "red"shape = "round"
[[fruits.varieties]] # nested array of tablesname = "red delicious"
[[fruits.varieties]]
name = "granny smith"
[[fruits]]
name = "banana"
[[fruits.varieties]]
name = "plantain"

You can query it, once parsed, as follows:

// Parse an InputStreamTOMLtoml = TOMLParser.parseFromInputStream(input);
// Returns "red"Stringred = toml.getString("fruits/0/physical/color").orElse(null);
// Returns "plantain"Stringplantain = toml.getString("fruits/1/varieties/0/name").orElse(null);
// Also returns "plantain", note the negative indexStringplantain_too = toml.getString("fruits/1/varieties/-1/name").orElse(null);

You can use negative indexes (-1, -2) for accessing arrays from the end.

See TOML.java for different query methods.

Subtree queries

In order to parse complex TOML documents, one can retrieve a subtree and query it. For instance, given the following TOML document:

[package]
name = "parquet"version = {workspace = true}
[dependencies]
arrow-array = {worskpace = true, optional = true}

You could query it using either the TOML "root" object or use a subtree TOML object, like so:

// Parse the documentTOMLtoml = TOMLParser.parseFromInputStream(...);
// Query the value of "dependencies/arrow-array/optional"booloptional1 = toml.getBoolean("dependencies/arrow-array/optional").orElse(false);
// Or query a subtreebooloptional2 = toml.getSubtree("dependencies").getBoolean("arrow-array/optional").orElse(false);

More advanced querying

You can use more advanced techniques and expression languages for querying the object tree. The unit tests have some examples for querying the object tree using OGNL (but you could use JXPath, Spring SpEL, etc.).

JSON Serialization

You can dump a TOML parsing result into JSON without requiring extra dependencies:

// Parse an InputStreamTOMLtoml = TOMLParser.parseFromString(
"[dog.\"tater.man\"]\n"
+ "type.name = \"pug\"");
toml.writeJSON(System.out);

Produces:

{"dog":{"tater.man":{"type":{"name":"pug"}}}}

Bugs

Please file an issue if you find a TOML document that can't be parsed with this library.

Release notes

1.1.1 Initial version

This version depends on Antlr4 v4.13.1.

1.1.11 Dependency downgrade

This version depends on Antlr4 v4.11.1 (changed to adhere to NetBeans Antlr4 version).

2.13.1 Antlr4 Lexer & Parser

  • Changed versioning scheme. Major: Grammar version, Minor: Antlr4 version, Patch: bug fixes. (e.g. 2.13.1 means Grammar version 2, Antlr 4.13.X, Release 1)
  • The Antlr4 lexer and parser is now considered a public API.
  • Updated the lexer to work nicely with unclosed literal strings (for NetBeans IDE Editor integration).
  • Upgraded Antlr4 runtime to v4.13.1 again.
  • Simple query language now ignores contiguous or leading spaces (this is, the following queries are equivalent: "/a/b", "a/b", "a//b").
  • Added "subtree" queries, to ease analyzing subtrees.

13.3.1

  • Changed versioning scheme to:
    • Major: antlr version (for instance, 13 means Antlr 4.13.X
    • Minor: toml-java grammar version.
    • Patch: bug fixes
  • The lexer now detects incomplete tokens and properly reports them with token INVALID_VALUE.
    • This is useful for the NetBeans Antlr bridge.
  • toml-java runs 555 unit tests.

13.4.1

  • Downgrading to JDK8 class format.
  • Grammar updated to version 4: lexer detects more unexpected tokens.

13.4.2

  • Handling of unclosed inline-tables and arrays with invalid tokens for NetBeans.

13.5.1

  • Support TOML v1.1

About

TOML parser for Java

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages