kdl - Kat's Document Language
- kdl is a document language, mostly based on - SDLang, with xml-like semantics that looks - like you're invoking a bunch of CLI commands! -
- -- It's meant to be used both as a serialization format and a configuration - language, and is relatively light on syntax compared to XML. -
+kdl is a document language, mostly based on +SDLang, with xml-like semantics that looks +like you're invoking a bunch of CLI commands!
+It's meant to be used both as a serialization format and a configuration +language, and is relatively light on syntax compared to XML.
Design and Discussion
-- kdl is still extremely new, and discussion about the format should happen - over on the - discussions page - in the Github repo. Feel free to jump in and give us your 2 cents! -
+Design and Discussion
+kdl is still extremely new, and discussion about the format should happen +over on the +discussions page +in the Github repo. Feel free to jump in and give us your 2 cents!
Design Principles
--
-
- Maintainability -
- Flexibility -
- Cognitive simplicity and Learnability -
- Ease of de/serialization -
- Ease of implementation -
- These are the guiding principles behind the design of KDL, in order of - importance. These principles will hopefully be useful in tie-breaking and - otherwise directing specific decisions when it comes down to it. They are - intentionally vague when it comes to specifics, but more concrete - definitions for each one will be settled on as the project matures. -
+Design Principles
+-
+
- Maintainability +
- Flexibility +
- Cognitive simplicity and Learnability +
- Ease of de/serialization +
- Ease of implementation +
These are the guiding principles behind the design of KDL, in order of +importance. These principles will hopefully be useful in tie-breaking and +otherwise directing specific decisions when it comes down to it. They are +intentionally vague when it comes to specifics, but more concrete +definitions for each one will be settled on as the project matures.
Overview
- -The basic syntax is similar to SDLang:
- -
-
-// This is a node with a single string value
-title "Hello, World"
+Overview
+The basic syntax is similar to SDLang:
+// This is a node with a single string value
+title "Hello, World"
// Multiple values are supported, too
bookmarks 12 15 188 1234
// Nodes can have properties
-author "Alex Monad" email="alex@example.com" active=true
+author "Alex Monad" email="alex@example.com" active=true
// Nodes can be arbitrarily nested
contents {
- section "First section" {
- paragraph "This is the first paragraph"
- paragraph "This is the second paragraph"
+ section "First section" {
+ paragraph "This is the first paragraph"
+ paragraph "This is the second paragraph"
}
}
// Nodes can be separated into multiple lines
title \
- "Some title"
+ "Some title"
// Comment formats:
@@ -96,39 +76,34 @@ C style multiline
*/
tag /*foo=true*/ bar=false
-
-
-
- But kdl changes a few details:
-
-
-
-// Files must be utf8 encoded!
-smile "😁"
+
+But kdl changes a few details:
+// Files must be utf8 encoded!
+smile "😁"
// Instead of anonymous nodes, nodes and properties can be wrapped
-// in "" for arbitrary node names.
-"!@#$@$%Q#$%~@!40" "1.2.3" "!!!!!"=true
+// in "" for arbitrary node names.
+"!@#$@$%Q#$%~@!40" "1.2.3" "!!!!!"=true
// The following is a legal bare identifier:
-foo123~!@#$%^&*.:'|<>/?+ "weeee"
+foo123~!@#$%^&*.:'|<>/?+ "weeee"
// kdl specifically allows properties and values to be
// interspersed with each other, much like CLI commands.
-foo bar=true "baz" quux=false 1 2 3
+foo bar=true "baz" quux=false 1 2 3
// strings can be multiline as-is, without a different syntax.
-string "my
+string "my
multiline
-value"
+value"
-// raw/unescaped strings use the "r" prefix on string literals and
+// raw/unescaped strings use the "r" prefix on string literals and
// otherwise behave the same, including multiline support.
-raw r"C:\Users\kdl"
+raw r"C:\Users\kdl"
-// You can add any number of # after the r and the last " to
-// disambiguate literal " characters.
-other-raw r#"hello"world"#
+// You can add any number of # after the r and the last " to
+// disambiguate literal " characters.
+other-raw r#"hello"world"#
// There is a single decimal number type, much like JSON's.
num 1.234e-42
@@ -143,36 +118,32 @@ my-binary 0b1010_1101
// You can comment out individual nodes with /-. In the case below, everything
// up until the closing `}` becomes commented.
-/-mynode "foo" key=1 {
+/-mynode "foo" key=1 {
a
b
c
}
-// You can apply /- ("slashdash") comments to individual values, properties,
+// You can apply /- ("slashdash") comments to individual values, properties,
// or child blocks, too:
-mynode /-"commented" "not commented" /-key="value" /-{
+mynode /-"commented" "not commented" /-key="value" /-{
a
b
}
-
-
-
- The following SDLang features are removed altogether:
-
-
- - "Anonymous" nodes
- - Binary data literals
- - Date/time formats
- on and off booleans
- - Backtick strings
- - Semicolons
- - Namespaces with
:
- - Shell style (
#) and Lua style (--) comments
- - Distinction between 32/64/128-bit numbers. There's just numbers.
-
+
+The following SDLang features are removed altogether:
+-
+
- "Anonymous" nodes +
- Binary data literals +
- Date/time formats +
onandoffbooleans
+- Backtick strings +
- Semicolons +
- Namespaces with
:
+ - Shell style (
#) and Lua style (--) comments
+ - Distinction between 32/64/128-bit numbers. There's just numbers. +