Пожалуйста, проголосуйте, какую систему ссылок вы
предпочитаете. В ини файле есть система ссылок. Можно ссылаться
на переменные из других секций или на "локальные" поля. Секции
выделяются [section] и могут содержать пробелы в названии. Это
обязательное условие. Аналогично пробелы могут быть и в именах
полей.
Выберете систему, которую считаете лучшей:
(1) А-ля E-mail, (2) Минимум новых знаков (3) Как в С
Ниже таблица что имеется в виду:
Ref type\system
(1) (2) (3)
local $field $field $field
local $(two words) $(two words) $(two words)
global $field@ $[]field $.field
global $(two words)@ $[](two words) $(.two_words)
link $field@sec $[sec]field $sec.field
link $(two words)@sec $[sec](two words) $(sec.two words)
link $field@[sec tion] $[sec tion]field $(sec tion.field)
link $(two words)@[sec tion]
$[sec tion](two words)
$(sec tion.two words)
Недостатки и достоинства
(1) недостаток: наличие "лишнего" знака @. Достоинство: минимум
символов для односложных ссылок.
(2) недостаток: необычность. Но зато нет лишних символов и очень
понятно все. Самая бритвооккамовская модель, не вводящая новых
сущностей в алфавит.
(3) недостаток: невозможно или трудно использовать точку в именах
групп и полей (а иногда хочется для сокращения слов,
например). Достоинство в том, что очень наглядно для программистов.
Пожалуйста, напишите номер, который бы вы выбрали!
первый вариант -- жуть. второй вариант не такой уж и необычный -- чемто он мне LaTeX напоминает. ну а больше всего по душе мне третий вариант. но пробелы в именах переменных -- это всё таки жесть. dixi
> первый вариант -- жуть. второй вариант не такой уж и необычный -- чемто он мне LaTeX напоминает. ну а больше всего по душе мне третий вариант. но пробелы в именах переменных -- это всё таки жесть. dixi
В принципе я согласен (кроме пробелов-жести). Сам удивляюсь теперь неуклюжести первого варианта. Второй или третий - трудно выбрать. Точно третий, если бы не вывод точки из алфавита имен.
Конечно, этот пример выглядит ужасно, но обычные случаи, думаю, будут вполне понятны:
$section.file\ length = 4
2. Второй вариант действительно очень приятен, но он необычен. Если хочешь его вводить, то в .sample-файле обязательно должен быть соответствующий пример в удобном месте. Кроме того, синтаксис $[] мог бы в принципе значить что-то ещё.
Тут есть небольшая проблема с экранированием. Сейчас $ экранируется как \\$. Два слеша нужно, чтобы при первом парсинге, до переменных, два слеша переходили в один. В принципе консистент-вариант экранирования точки будет писать \\. что уже некоторый перегруз.
> 1-й вариант самый читабельный и потенциально минимально бажный.
Он сейчас реализован. На счет минимальной бажности не уверен. Мне кажется, что второй ничуть не хуже.
> Только избыточность убери
Что имеется в виду?
> определись, могут ли скобки могут присутствовать в названиях
Нет, не могут. Квадратные - из-за синтаксиса заголовков секций. Круглые - просто не могут. Нельзя объять необъятное :)
> не лучше ли приладить регэкспы
Я не очень понял этой фразы. Если это о сканировании строк - то конечно это делается при помощи регэкспов. На самом деле (re-entrant) сканер и парсер строк, для отбора переменных в библиотеке генерируется flex/bison (как и сканер и парсер всего файла).
Я понял что имеется в виду. Просто мне кажется не очень уместно для ини-файлов. Но может будут другие мнения? Вообще очень продуктивно получилось, спасибо всем кто высказался!