aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: 1c0eb9e2e031cfcc94ddcee87800c1e22ebb7035 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# conf

Go библиотека для чтения конфигурационных файлов в формате `.conf`.

## Установка

```bash
go get go.neonxp.ru/conf
```

## Особенности формата

- Простые присваивания: `key = value;`
- Строковые значения: `"text"` или `'text'`
- Многострочные строки: ``` `text` ```
- Числовые значения: целые и дробные, включая отрицательные
- Булевы значения: `true` / `false`
- Директивы/команды: `directive arg1 arg2;`
- Групповые директивы с блоками кода: `directive { ... }`
- Комментарии от `#` до конца строки
- Поддержка кириллицы и UTF-8

## Пример использования

```go
package main

import (
    "fmt"
    "go.neonxp.ru/conf"
)

func main() {
    doc, err := conf.LoadFile("./config.conf")
    if err != nil {
        panic(err)
    }

    // Получение значения по ключу
    values := doc.Get("my_key")
    fmt.Println(values)

    // Получение команд по имени
    commands := doc.Commands("directivename")
    fmt.Println(commands)

    // Все переменные
    vars := doc.Vars()

    // Все элементы документа
    items := doc.Items()
}
```

## Пример конфигурационного файла

```conf
# Пример конфигурации

# Простое присваивание
simple_key = value;

# Многострочное присваивание
string_key =
    "value"
    'string';

# Многострочные строки (backticks)
multiline_string = `
    multiline
    string
    123
`;

# Числа и булевы значения
int_key = -123.456;
bool_key = true;

# Директивы
expression1 argument1 "argument2" 123;

# Групповая директива
group_directive_without_arguments {
    expression1 argument2 "string" 123 true;
    expression2 argument3 "string111" 123321 false;

    children_group "some argument" {
        # Вложенная группа
    }
}

# Групповая директива с аргументами
group_directive_with_argument "argument1" 'argument2' {
    child_val = "children value";
}
```

## API

### Функции

- `LoadFile(filename string) (*model.Doc, error)` - загрузка конфигурации из файла
- `Load(name string, input []byte) (*model.Doc, error)` - парсинг конфигурации из байтов

### Методы `*model.Doc`

- `Get(key string) Values` - получить значения по ключу
- `Commands(name string) Commands` - получить команды по имени
- `Vars() map[string]Values` - получить все переменные
- `Items() []any` - получить все элементы документа

## Требования

- Go 1.25+

## Лицензия

См. файл [LICENSE](LICENSE)