LINUX.ORG.RU

Помогите «изобрести» опции командной строки для передачи кучи однотипных параметров

 ,


0

1

Изобретаю упаковщик фонтов для эмбедов, и что-то не получается сочинить набор параметров под текущие задачи/парсеры.

Нужно задавать следующие штуки:

- исходные фонты (их может быть много)
- для каждого фонта - свой набор диапазонов и отдельных глифов

Типа, мержить куски из нескольких фонтов в один (например, брать основной фонт и подклеивать к нему немного иконок).

Проблема во вложенности. Не понимаю, как сделать чтобы комбинации диапазонов шпилились на конкретный фонт, а не смешивались в одну кучу.

Можете привести примеры как это обычно делают через командную строку? В идеале - чтобы можно было питоновским argparse обработать.

★★★★★

Навеяно ффмпегом:

foo -i infile1 -i infile2 -i infile3 -map 0 -x 1 -y 2 -map 1 -x 3 -y 4 outfile

deep-purple ★★★★★
()
fontmerge -config some.xml
fontmerge -config - << END
простыня параметров можно тот же xml для вложенности
END
vtVitus ★★★★★
()
Последнее исправление: vtVitus (всего исправлений: 2)

можно предложить альтернативную идею. вместо мерджера с хитроумным интерфейсом сделать две утилиты: распаковщик шрифта в набор файлов отдельных символов и упаковщик ентих файлов символов обратно в шрифт. имя файла отдельного символа сделать достаточно понятным, к примеру, символ + имя исходного файла шрифта.

взял несколько шрифтов, распаковал каждый шрифт в отдельный свой каталожик, потом в своем любимом файлокомандере собрал файлы нужных символы в новом каталожике и запаковал их в готовый файл нового шрифта.
стандартна линуксова идея - все есть файл - наглядно и понятно.

pfg ★★★★★
()
Последнее исправление: pfg (всего исправлений: 1)
Ответ на: комментарий от mogwai

Разные типы разделителей для разных уровней вложенности? В принципе, вариант, только свой парсер писать.

А что-то более стандартное реально?

Vit ★★★★★
() автор топика
Ответ на: комментарий от pfg

Я в курсе и про разделение этапов и про конфиги в жысоне. Через жопу сделать всегда успеется, а сначала надо пытаться делать нормально.

Vit ★★★★★
() автор топика
Ответ на: комментарий от bvn13

Это план Б. На случай если нормально сделать не получится. Надеюсь ты не думаешь всерьез, что я не догадался про конфиг во внешнем файле :)

Vit ★★★★★
() автор топика

Можете привести примеры как это обычно делают через командную строку?

Обычно это не делают через командную строку. Конфиг будет проще и читать из программы, и писать человеку. И читать человеку, хранить в VCS, добавлять комментарии, расширять и т.д.

slovazap ★★★★★
()
Ответ на: комментарий от slovazap

Возможно ты не в курсе, но в парсерах аргументов типа питоновского argparse уже встроена фича всасывания параметров из файла.

Поэтому хочется в первую очередь разобраться с аргументами, чтобы получить более универсальное решение.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

В курсе, поэтому и говорю про нормальный конфиг, а не костыльное впихивание этого в убогий формат аргументов.

slovazap ★★★★★
()

Зачем изобретать, передаешь как есть, только делаешь позиционно зависмые аргументы, условно говоря, как сериализованный массив.

command arg1_1 arg1_2 arg1_3 arg2_1 arg2_2 arg2_3 ... argN_1 argN_2 argN_3

anonymous
()
Ответ на: комментарий от slovazap

Я для людей делаю, а не во имя абстрактных принципов. Не рассказывай мне про «нормальные конфиги». Если бы мне нужны были «нормальные конфиги», я бы не создавал тему.

Vit ★★★★★
() автор топика
Последнее исправление: Vit (всего исправлений: 2)
Ответ на: комментарий от anonymous

Ты знаешь как заставить agrparse обрабатывать такое? Без костылей вроде ручного напиливания на подстроки по паттерну "--font".

Ну или не argparse а любой другой нодовский парсер командной строки

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

Да ты мастер противоречий. Ты даже сам не можешь придумать как бы извратиться чтобы впихнуть невпихуемое в аргументы, и при этом ухитряешься заявлять что-то про «для людей».

slovazap ★★★★★
()
Ответ на: комментарий от slovazap

Просто не сри в тему, если нечего сказать по сути вопроса. Спасибо.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

Зачем тебе argparse? Берешь и читаешь напрямую sys.argv. Ты уверен, что нахлобучивание еще одного слоя абстракции оправдано? Если да, то почему сразу не json, xml?

anonymous
()
Ответ на: комментарий от anonymous

Без него проще ровно до тех пор, пока не соберешься выводить развернутые хелпы и контролировать корректность параметров.

В общем, я нодовский порт argparse поддерживаю, и да, я абсолютно точно знаю разницу между ручным разбором и библиотекой.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

я абсолютно точно знаю разницу между ручным разбором и библиотекой

Тогда очень странно появление этой темы. Или ты знаешь и разбор таких параметров у тебя не должен вызывать вопросов, или ты не знаешь и появляется вопрос.

anonymous
()
Ответ на: комментарий от anonymous

Я не знаю как сделать нужную в данном случае группировку, ни разу с таким не сталкивался. Спросил, кто знает, как принято это делать. В чем проблемы?

Vit ★★★★★
() автор топика
Ответ на: комментарий от deep-purple

Твой пример - это уже извращение над json/xml. Лучше уж сразу json. А вот первый коментарий с последовательными тройками «font2,weight,charcodes» - это вполне последовательность однотипных параметров, где тип - тройка. Кстати питоновский argparse имеет type, где можно указать свой парсер для такой тройки.

anonymous
()

В общем, пока такая идея:

--font path1 --range XXX --range YYY --font path2 ...


Ну это какбэ понятно. А вот что касается парсинга

- всем группируемым значением задаем append в один и тот же массив
- вместо value идаем туда [ «key_name», value ]
- потом просто пробегаемся по массиву и перегруппируем как надо.

В итоге имеем стандартных парсер со всеми хелпами, валидациями и т.п., и нужную группировку при помощи небольшого зубила.

Vit ★★★★★
() автор топика
Последнее исправление: Vit (всего исправлений: 1)
Ответ на: комментарий от anonymous

Ты ему ответь, он скорее всего вообще ни мой ответ ни нашу ветку не видит, я походу у него в игноре.

deep-purple ★★★★★
()

Я себе завел для кучи одинаковых значений эдакий «мультипараметр», который передает массив void* (а там, понятное дело, могут быть строки, массивы, данные - да что угодно!). Если интересно, могу дать ссылку на мой гитхаб. Но ты ее и так знаешь. Только меня не воспринимаешь. Ну, твои проблемы.

anonymous
()
Ответ на: комментарий от Vit

Теперь я знаю кто пишет такие программы с такими извратными параметрами командной строки - 5-звездные. Зато «вписывается в арг парсинг без костылей»

anonymous
()

Если их действительно МНОГО, то лучше уж через файл или stdin.
по типу как в некоторых программах -i <filename>, если filename '-', то читаем с stdin.
Причём чем проще файл, тем лучше. В идеале это просто строка-значение.

WatchCat ★★★★★
()
Последнее исправление: WatchCat (всего исправлений: 1)
Ответ на: комментарий от WatchCat

Там много разных вариантов. Я спросил именно про тот, который вызывает вопросы. С альтернативами вопросов нет.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

На самом деле вариантов не много.
- одним параметром через разделитель
- несколько параметров, по одному на элемент
- чтение из внешнего источника (файл, stdin)

Всё остальное формы.

WatchCat ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.