<commit_before><pre>
            __
           (__)
         _|__|_|_
        (________)  
        |        |
        |        |
       |          |
      |            |                 _   _
     |              |               | | (_)
    |                |          ___ | |  _
   |                  |        / _ \| | | |
  |                    |      | (_) | |_| |
  |~^~~~^~~^~~~^~~^~~^~|       \___/\___|_|
  |~^~~~^~~~^~~~~^~~^~~|  
   |__________________|    Elegant, featured and declarative minimal language
    :________________:
     `-..________..-´

</pre>

<table>
<tr> 
<td>Language specification version</td><td>0.1.0</td>
</tr>
</table>

> **Draft version! Oli is still under exciting designing process**

<!--
Hate reading docs? [Try it online](http://h2non.github.io/oli.js)!
-->

## Rationale

<!--
1. Reinventing the wheel is funny, but doing it with a bit of improvements is exciting
-->

Oli aims to be a confortable minimal language for general purposes which provides a mix of 
features from common markup languages and some basic features from programming languages

Oli has a beutiful and clean syntax with a non-obstructive grammar, that allows to you to create your own DSL.
It was designed to be mainly consumed by humans

<!--
There are a lot of [lightweight languages][2], however not much of them are not confortable 
and it's not easy to take an ideal choice
-->

## Language Features

- First class primitive types: boolean, number and strings
- List and data hashmaps with nested support
- Data references (formally variables)
- Copy and extend data structures or values
- String interpolation
- Built-in logical, comparison and math operators

## Design Goals

- Simple sintax, but featured built-in rich possibilities
- Unobstructive minimal sintax grammar-free for DSL
- Type inference and powerful pattern matching
- Easy nested structures and lists
- Primitive types with semantics association
- Parsers should think more than human
- Data references are first class supported, avoid redundancy!
- Templating support, why not?
- Focus on the content, not on the sintax

## Oli is useful for

- Create sintax clean and readable configuration files
- Create you own DSL for general purposes
- Store human-writable/readable data (like manifest files)
- Data interchange format for trivial structures

## Example

```ruby

# this a is a comment
name: Hello Oli!
version: 0.1.0

author:
  name: <NAME>
  email: <EMAIL>
  web: 'http://tomas.aparicio.me'
  social: no # boolean primitive value
end

##
  Multi-line comment
##
server deploy > zeus:
  server > host url: 'http://zeus.server.com' # strings can be quoted
  &port: 9000 # number as primitive value
  retry: yes
  # nested block
  authentication: 
    # lists can be implicit using commas
    tokens:
      %1<PASSWORD>,
      <PASSWORD>
    end
  end
end

# extends from zeus block
server deploy >> zeus > hera:
  server:> host url
end

# creates a copy of hera block
deploy:> hera

# short-hand reference declaration operator
&flags: --debug --trace

# templaiting
command: server.sh start *{flags}
fallback port: {{*{flags} + 100}}

# multi-line unquoted string
log:
  /var/log/deploy.log<commit_msg>chore: update example<commit_after><pre>
            __
           (__)
         _|__|_|_
        (________)  
        |        |
        |        |
       |          |
      |            |                 _   _
     |              |               | | (_)
    |                |          ___ | |  _
   |                  |        / _ \| | | |
  |                    |      | (_) | |_| |
  |~^~~~^~~^~~~^~~^~~^~|       \___/\___|_|
  |~^~~~^~~~^~~~~^~~^~~|  
   |__________________|    Elegant, featured and declarative minimal language
    :________________:
     `-..________..-´

</pre>

<table>
<tr> 
<td>Language specification version</td><td>0.1.0</td>
</tr>
</table>

> **Draft version! Oli is still under exciting designing process**

<!--
Hate reading docs? [Try it online](http://h2non.github.io/oli.js)!
-->

## Rationale

<!--
1. Reinventing the wheel is funny, but doing it with a bit of improvements is exciting
-->

Oli aims to be a confortable minimal language for general purposes which provides a mix of 
features from common markup languages and some basic features from programming languages

Oli has a beutiful and clean syntax with a non-obstructive grammar, that allows to you to create your own DSL.
It was designed to be mainly consumed by humans

<!--
There are a lot of [lightweight languages][2], however not much of them are not confortable 
and it's not easy to take an ideal choice
-->

## Language Features

- First class primitive types: boolean, number and strings
- List and data hashmaps with nested support
- Data references (formally variables)
- Copy and extend data structures or values
- String interpolation
- Built-in logical, comparison and math operators

## Design Goals

- Simple sintax, but featured built-in rich possibilities
- Unobstructive minimal sintax grammar-free for DSL
- Type inference and powerful pattern matching
- Easy nested structures and lists
- Primitive types with semantics association
- Parsers should think more than human
- Data references are first class supported, avoid redundancy!
- Templating support, why not?
- Focus on the content, not on the sintax

## Oli is useful for

- Create sintax clean and readable configuration files
- Create you own DSL for general purposes
- Store human-writable/readable data (like manifest files)
- Data interchange format for trivial structures

## Example

```ruby

# this a is a comment
name: Hello Oli!
version: 0.1.0

author:
  name: <NAME>
  email: <EMAIL>
  web: 'http://tomas.aparicio.me'
  social: no # boolean primitive value
end

##
  Multi-line comment
##
server deploy > zeus:
  server > host url: 'http://zeus.server.com' # strings can be quoted
  &port: 9000 # number as primitive value
  retry: yes
  # nested block
  authentication: 
    # lists can be implicit using commas
    tokens:
      %<PASSWORD>,
      <PASSWORD>,<PASSWORD>
    end
  end
end

# extends from zeus block
server deploy >> zeus > hera:
  server: 'http://hera.server.com'
end

# in-line nested structures
hey: you: are: seeing: oli!

# multi-line nested structures
do:
  you: # implitic list
    born
    in # this is a string
    [ 80, 'th' ], ? # old, ehn?
  end
end

# creates a copy of hera block
deploy:> hera

# short-hand reference declaration operator
&flags: --debug --trace

# templaiting
command: server.sh start *{flags}
fallback port: {{*{flags} + 100}}

# multi-line unquoted string
log:
  /var/log/deploy.log
{'fraction_non_alphanumeric': 0.10438066465256797, 'fraction_numerical': 0.005287009063444109, 'mean_word_length': 2.6559911651021535, 'pattern_counts': {'":': 0, '<': 38, '<?xml version=': 0, '>': 53, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 4, 'word_list_counts': {'cursed_substrings.json': 8, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '694221', 'n_tokens_mistral': 2002, 'n_tokens_neox': 1916, 'n_words': 735}