taker-specs

Документация для проекта taker

This project is maintained by taker-project

Формат конфигурационных файлов

Будет использоваться формат, похожий на формат .ini. Он вылядит следующим образом:

[Section1]
<name1>:<type1>=<value1>
<name2>:<type2>=<value2>
...

[Section2]
...

Названия секций и полей— строки, состоящие из латинских букв, цифр, символов +, -, _, ., /, однако названия не могут начинаться с дефиса. Между <name> и :, : и <type>, <type> и =, = и <value>, а также в конце строки разрешается любое количество пробелов.

С символа # начинаются однострочные комментарии. Комментарии могут появиться в начале строки или в ее середине. Символ # внутри значения типа string или char началом комментария не считается.

Названия секций и полей регистро-зависимы, но отличаться только регистром названия не должны. В разных секциях могут быть поля с одинаковыми названиями.

Поддерживаются следующие типы: bool, int, float, char, string, bool[], int[], float[], char[], string[].

Поле любого типа может иметь значение null, обозначающее “переменная есть, но ей не назначено значение”. Если значение не указано (то есть поле имеет вид <name1>:<type1>), то значение переменной также считается равным null.

Также допустим формат <name>:auto=<value> или <name>=<value>. В этом случае значение указывать обязательно, при этом оно не должно быть равно null. В этом случае работает автоматическое определение типов. Типы просматриваются в порядке int, float, bool, string, char, int[], float[], bool[], string[], char[] и выбирается первый подходящий.

Пример файла:

[Flags]
white: bool = true
black:    bool  =  false
arr:bool=[true,false,false,true]
field:bool

[Integers]
a:int=4
var.var-42 : int = 28518515 # длинное число
_: int = -0
hack: int = 555
arr1: int[] =[1,2,3,4,5]
arr2 : int[]   =  [ 42,   492759,   248,  48   ] # komment

[Floats]
q:float=33
88: float=88
_: float =248.8513
inf942: float =   inf
HELLO/world:float[]=[1, 2.3, -42.5]
HEllO: float[]=[-inf, nan, 11, 0.0]
iMeanNothing: float = null

# Этот комментарий занимает целую строку

[Chars/And/Strings]
c1:char='\n'
c2  : char= c'3'
s1:string='hello\n\'\"\\\''
q1:  string = ""
arr1  : string[] = ['a', 'hello', "array of string", "# this is not comment"]
arr2: string[] = ["null", null, "non-null"]
arr3: string[] = null

[Auto]
a1 : auto = ['5', '6', '7']  # тип string[]
a2:auto=3  # тип int
b1 = c'4'  # тип char
b2=[1, 2, 3.0]  # тип float[]