additional features
- cli autocompleate
such config file
# comment
key: val # inline comment
multiline_inline: --- this is a long text
that spans few lines to
simulate multi line value
---
multiline_next_line: ---
this is a long text # indentation will be stripped
that spans few lines to # this line spaces from "to" to "#" will be stripped
# empty empty lines will be stripped and preserved
# line with only comments are considered empty
simulate multi line value
---
list:: # notice double colons
- val-1 - # notice hyphen/minus in value
- -- val-2 # only '- ' or "- --- " present at the
- val-3--- # line BEGINNING are significant and
- --- this is a long text # will be stripped alongside indentation
that spans few lines to
simulate multi line value
---
- ---
this is a long text
that spans few lines to
simulate multi line value
---
# dictionary
dictionary:
key_1: val_1
key_2: --- this is a long text
that spans few lines to
simulate multi line value ---
key_3: --- this is a long text
that spans few lines to
simulate multi line value---
# empty lines are ignored
key_4: ---
this is a long text
that spans few lines to
simulate multi line value
---
key_5: ---
this is a long text
that spans few lines to
simulate multi line value---
key_6: ---
this is a long text
that spans few lines to
simulate multi line value ---
curly_braces_use: {r"""}
curly braces support all advanced functions, and can be used for:
- raw string use {r"""} and {_"""_} # treat '_' as '' here
or {r'''} and {'''}
- interpolations use {interpolation_name}
only letters, numbers, "-" and "_" characters are allowed in names
any curly braces will be replaced by what they return
the only exeption is raw string witch returns
what is between it's start and end marker
AlL naMES ARe caSE SenSitiVE
{"""}
raw_string: {r'''}
read from start marker {r"""}/{r'''} to finish marker,
finish markers cannot be escaped, indentation is stripped
no interpolations, variables or any of the sort
ps. was tempted to use {alcatraz} name instead XD
{'''}
menu_json: {r"""}
{"menu": {
"id": "contact",
"text": "contact",
"popup": {
"items": [
{"value": "email", "onclick": "OpenChat()"},
{"value": "chat", "onclick": "OpenEmail()"},
]
}
}
{"""}
interpolations: {r"""}
use curly brackets with name inside kinda like python f string formatting
available:
colon use {colon} or {c}
hash use {hash} or {h}
hyphen/minus use {hyphen}/{minus} or {m}
triple hyphen/minus use {3hyphen}/{3minus} or {mmm} # better m&m's
left bracket use {left_curly} or {l}
right bracket use {right_curly} or {r}
{"""}
scary_things::
- {mmm} starting cli flags
- meats of {h}00FF00 color
- people with {left_curly} and {right_curly} hair # XD
# combo example
interesting::
- facts::
- sir Isaac Newton was really into occult stuff
- first apple logo had sir Isaac Newton in it
- questions::
- how:
- many rotten apples it takes to get high
- many newtons it takes to bend an apple
# preserve indentation level for each local scope/level/context
# parser:
# |motivation: ---
# | |this parser was written because
# | |configparser did not offer option
# | |to not parse particular section or
# | |to pass some kind of parse function
# | |---
# |why_not:
# | |yaml::
# | | |- quotation required for all string values
# | | |- single quotes and double quotes work differently
# | | |
# | | |- --- writing regexes in quotes requires escaping
# | | | |characters witch makes regexes less readable
# | | | |---
# | |json: why ask when you already know?
# | |toml: configparser is simpler
will get you
{
'key': 'val',
'multiline_inline':
'this is a long text\n'
'that spans few lines to\n'
'simulate multi line value\n',
'multiline_next_line':
'this is a long text\n'
'that spans few lines to\n'
'\n'
'\n'
'simulate multi line value\n',
'list': [
'val-1 -',
'-- val-2',
'val-3---',
'this is a long text\n'
'that spans few lines to\n'
'simulate multi line value\n',
'this is a long text\n'
'that spans few lines to\n'
'simulate multi line value\n',
]
'dictionary': {
'key_1': 'val_1',
'key_2':
'this is a long text\n'
'that spans few lines to\n'
'simulate multi line value', # no ' \n'
'key_3':
'this is a long text\n'
'that spans few lines to\n'
'simulate multi line value', # no '\n'
'key_4':
'this is a long text\n'
'that spans few lines to\n'
'simulate multi line value\n',
'key_5':
'this is a long text\n'
'that spans few lines to\n'
'simulate multi line value\n', # no '\n'
'key_6':
'this is a long text\n'
'that spans few lines to\n'
'simulate multi line value\n', # no ' \n'
}
'curly_braces_use':
'curly braces support all advanced functions, and can be used for:\n'
'- raw string use {r"""} and {_"""_} # treat '_' as '' here\n'
" or {r'} and {'''}\n"
'- interpolations use {interpolation_name}\n'
'\n'
'only letters, numbers, "-" and "_" characters are allowed in names\n'
'\n'
'any curly braces will be replaced by what they return\n'
'the only exeption is raw string witch returns\n'
"what is between it's start and end marker\n"
'\n'
'AlL naMES ARe caSE SenSitiVE\n',
'raw_string':
'read from start marker {r"""}/{r\'\'\'} to finish marker,\n'
'finish markers cannot be escaped, indentation is stripped\n'
'no interpolations, variables or any of the sort\n'
'\n'
'ps. was tempted to use {alcatraz} name instead XD\n',
'menu_json':
'{"menu": {\n'
' "id": "contact",\n'
' "text": "contact",\n'
' "popup": {\n'
' "items": [\n'
' {"value": "email", "onclick": "OpenChat()"},\n'
' {"value": "chat", "onclick": "OpenEmail()"},\n'
' ]\n'
' }\n'
'}\n',
'interpolations':
'use curly brackets with name inside kinda like python f string formatting\n'
'\n'
'available:\n'
' colon use {colon} or {c}\n'
' hash use {hash} or {h}\n'
' hyphen/minus use {hyphen}/{minus} or {m}\n'
" triple hyphen/minus use {3hyphen}/{3minus} or {mmm} # better m&m's\n"
' left bracket use {left_curly} or {l}\n'
' right bracket use {right_curly} or {r}\n',
'scary_things': [
'--- starting cli flags',
'meats of #00FF00 color',
'people with { and } hair',
]
'interesting': [
'facts': [
'sir Isaac Newton was really into occult stuff',
'first apple logo had sir Isaac Newton in it',
]
'questions': {
'how': [
'many rotten apples it takes to get high',
'many newtons it takes to bend an apple',
]
}
]
}
#