LINUX.ORG.RU

Без шума и пыли вышла очередная версия кроссплатформенной библиотеки libconfig 1.1.2


0

0

Почему-то на ЛОР мало упоминаний о данной библиотеке. Но я лично использовал ее в нескольких кроссплатформенных проектах и считаю, что она очень проста, удобна в использовании и достойна внимания сообщества ЛОРа :)

Libconfig - простая библиотека для обработки структурированных файлов конфигурации. Этот формат является более компактным и более удобным, чем XML (ознакомится с ним можно на сайте проекта).

Библиотека содержит заголовки для обоих C и C++ языков программирования. Ее можно использовать на POSIX-совместимых UNIX системах (GNU / Linux, Mac OS X, Solaris, FreeBSD) и Windows (2000, XP и выше).

Лицензия: LGPL

>>> Сайт проекта

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

> Посмотри на уже приводившееся примеры конфигов в XML - без ужаса не взглянешь.

Как обычно, субъективные оценки маргинальных линуксоидов. ;)

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

>Мля... Вот из за таких, как вы, тот урод может действительно казаться правым. Кстати, вас он называет "неосиливший виндовос" :)

Тот паренёк привык к тому, что ему пережевали и дали в ротик. Пусть и дальше юзает юзает. Что ему от Unix нужно?

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

> Это, случаем, не техника разделения конфигов по /etc и /home/$user_name? А говорил не велосипедист. ;)

А в чём проблема? Контроль-то должен обеспечиваться, причём не оптом, а выборочно по параметрам. Ваши предложения?

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

Распечатай какой-нить конфиг гнома, покажи его жене, дай ей сковородку и задание разобраться в распечатке. Обоснование получишь в ближайшие 5 секунд.

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

песец №2...

по вашему xml сам знает имя пользователя и можно ли ему что-то менять??? если это все в конфиге лежит, то

if( config.ReadBool( _("CanChange") ) config.Write( ... );

учитесь формулировать, то что вам нужно

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

> не за пределами, а в позиции по умолчанию - такая позиция никогда за пределами экрана не будет

Хорошо-хорошо :)
Ну пусть позиция по умолчанию - центр экрана.
"описывает приложение, которое рисует определенной шири и высоты рамку исключительно в центре экрана".

Так сойдет? ;)

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

> Распечатай какой-нить конфиг гнома, покажи его жене, дай ей сковородку и задание разобраться в распечатке. Обоснование получишь в ближайшие 5 секунд.

Во-первых, у вас тяжкий опыт семейной жизни.
Во-вторых, _вы_ не обосновали.

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

Так выборочно и правь конфиги в /home/$user_name, избавляя нужные строки от #, а глобально настраивай в /etc.

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

>Мля... Вот из за таких, как вы, тот урод может действительно казаться правым. Кстати, вас он называет "неосиливший виндовос" :)

>Тот паренёк привык к тому, что ему пережевали и дали в ротик. Пусть и дальше юзает юзает. Что ему от Unix нужно?

смешные вы :) я под 3-ми операционками сижу, за двумя компами, на одном винда + линукс, на втором мак + линукс, а пережевавать мне не надо - если человек говорит что хмл есть гуд, то пусть на примерах доказывает, а не пишет - я знаю что это просто, если ты этого не знаешь, то ты тормоз, с такой логикой вам как раз под виндой сидеть

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

>Во-вторых, _вы_ не обосновали.

А смысл? Это будут субъективные оценки маргинальных линуксоидов. А для объективщины проще выйти на кухню или улицу и спросить людей, предварительно дав им сковородку. Проверено, чел со сковородкой говорит более объективнее в глазах вопрошающего.

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

Эти люди против ручной правки конфигов. Дальше можно не продолжать. Ибо если они не видят сырцы того, что другие правят ручками, ибо многочисленные окна с табами уже задолбали, то и не представляют всего ужаса xml.

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

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

Гы-Гы-Гы Наивный :-D

Я тут долго искал где выложил свой код на Python/expat оказалось он у меня пока только локально. Вот простая утилита конвертации XML в JavaScript для DocBook редактора:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys, os, re, string,  xml.parsers.expat, xml.sax.saxutils

ind,depth=0,0
path=[0]
def element(name,attrs):
	global ind
	global depth
	global path
	ind+=1
	depth+=1
	path.append(ind)
	cur,last=path[-1],path[-2]
	print "docbook[\"head_id%s\"]=new Object();"%(cur)
	print "docbook[\"head_id%s\"].children=new Array();"%(cur)
	print "docbook[\"head_id%s\"].attrs=new Object();"%(cur)
	print "docbook[\"head_id%s\"].name=\"%s\";"%(cur,name)
	if last:
		print "docbook[\"head_id%s\"].parent=\"head_id%s\";"%(cu
r,last)
		print "docbook[\"head_id%s\"].children.push(\"head_id%s\");&q
uot;%(last,cur)
	else:print "RootElement=\"id%s\";"%(cur)
	for a in attrs:
		print "docbook[\"head_id%s\"].attrs[\"%s\"]=%s;"%(cur,a,
xml.sax.saxutils.quoteattr(attrs[a]))

def text(t):
	global ind
	global path
	ind+=1
	cur,last=ind,path[-1]
	s=string.strip(t)
	if s:
		print "docbook[\"head_id%s\"].children.push(\"text_id%s\");&q
uot;%(last,cur)
		print "docbook[\"text_id%s\"]=new Object();"%(cur)
		print "docbook[\"text_id%s\"].text=\"%s\";"%(cur,s)
		print "docbook[\"text_id%s\"].parent=\"head_id%s\";"%(cu
r,last)
def close(name):
	global depth
	global path
	depth-=1
	path.pop()

def comment(c):print  "/*"+c+"*/"

def test():
	print "function Load(){"
	p=xml.parsers.expat.ParserCreate()
	p.StartElementHandler=element
	p.EndElementHandler=close
	p.CharacterDataHandler=text
	p.CommentHandler=comment
	p.ParseFile(open(sys.argv[1]))
	print "}"
test()

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

5! хоть кто-то внимательно прочитал, что тут написано

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

это типа круто? зачем тратить время на написание такого, если можно сохранять и загружать значения одной строкой?

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

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

Если устраивает работа с конфигами на уровне :

grep ^$var_name= <$config | sed 's/^.*=//'

то нафига вообще какиелибо библиотеки и расширения?

Для простых прог простые конфиги, некоторые даже вместо файлов конфигурации используют переенные окружения. Всё дёшево надёжно и практично. Посылаем нах и XML и libconfig заодно и все остальные средства работы с конфигами. Командный интерпретатор и набор стандартных утилит наше фсйо!

А в случае усложнения структуры конфига просто линкуем прогу с библиотекой regex и самостоятельно пишем парсер на её основе. Ну чего заморачиватся?

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

можно нарваться на то, что такое же название параметра уже использутся, а добавлять префикы неудобно, + был пример когда имена параметров динамические, то есть из конфига вычитываются значение вроде имя = значение, где имя будет именем нового обьекта, это все можно конечно сделать на переменных окружения, но лучше уж xml :)

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

Вот и договорились :)

И это аж не 12 странице холвара :-D

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

> по вашему xml сам знает имя пользователя и можно ли ему что-то менять???

В XML легко добавить любое количество дополнительной информации. Имя пользователя - только пример. А вот в plain text будете городить велосипеды под каждую новую задачу.

> учитесь формулировать, то что вам нужно

Я то умею, а вот вы, похоже, совершенно не в теме.

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

> я под 3-ми операционками сижу, за двумя компами, на одном винда + линукс, на втором мак + линукс

И этот виндузятник нас будет жизни учить? ;)

> а пережевавать мне не надо - если человек говорит что хмл есть гуд, то пусть на примерах доказывает

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

> если ты этого не знаешь, то ты тормоз, с такой логикой вам как раз под виндой сидеть

Не надо народ тянуть в свою лужу дерьма. ;)

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

> Ибо если они не видят сырцы того, что другие правят ручками,

Каждый ССЗБ. У меня XML получается вполне читаемым.

> ибо многочисленные окна с табами уже задолбали, то и не представляют всего ужаса xml.

gconf-editor. Где вкладки? Стенку сами найдёте, кликуша вы наша? ;)

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

> в чем цель придирки - сложно дописать два параметра? это сильно изменит вид конфига?

Опять, юноша, только свои посты читаем?
Речь шла о деревьях и кустарниках...

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

>У меня XML получается вполне читаемым.

А вот у программ получается каша. И по дефолту в том числе.

>gconf-editor.

Он работает и для KDE? И для других прог? KDE'шник рекомендует гномий инструментарий? Вы им пользовались? Нравилось? Это лучше хорошо структурированных конфигов?

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

> А вот у программ получается каша. И по дефолту в том числе.

Например?

> Он работает и для KDE? И для других прог?

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


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

> можно нарваться на то, что такое же название параметра уже использутся

Вот в этом смысле XML как раз очень хорош. Ибо структурированность.

> а добавлять префикы неудобно

Вот она логика плоского представления данных :)
Работая с XML вы забудете про префиксы и будете называть вещи свими именами. Это и есть та самая читаемость, в которой вы сомневались.

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

То же самое, но привязанное к KDE.

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

>Например?

Уже не раз упоминающиеся конфиги гнома.

>Идея в том, что другие приложения могут использовать его файлы.

Его используют только гномовские проги.

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

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

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

> В XML легко добавить любое количество дополнительной информации. Имя пользователя - только пример. А вот в plain text будете городить велосипеды под каждую новую задачу.

config.Write( _("User"), name ); - это велосипед??? кому-то уже и стенка не поможет...

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

config.SetPath( _("Users/") + user ); wxString value = config.Read( _("Param") );

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

>http://www.wxwidgets.org/manuals/stable/wx_wxconfigbase.html#wxconfigbase

На первый взгляд довольно таки не плохой аналог DOM XML и XPath. Более компактный и экономный. Но менее гибкий. Для простых задач вполне сойдёт, особенно где деревъя вырождаются в кустарники.

Посмотрел на API. Так напомнило стандартные возможности XML технологий, что даже захотелось это дело реализовать как надстройку над libxml с полной имитацией. Сдержался только потому что уже есть чем другим занятся :)

А так, API как API, вполне вписывается в XML технологии ;)

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

возможно, как я и писал, и для текстового файла и для xml надо писать удобную прослойку, так как я не пробовал xpath - все знать не возможно, а работал с expat, то я решил, что xml неудобен при использовании в конфигах для программиста, в дальнейшем буду более охотно пользоваться им, но проблема читабельности остается - такой конфиг надо делать только для тех программ, которые настраиваются через gui, для остальных представление в виде групп и списка параметров ( как в .ini ) куда удобнее

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

>Друх, как же ты не поймешь, ЧИТАТЬ эту хмл-блевотину НЕВОЗМОЖНО.

Если тебя во время прочтения XML тянет блеват, друк, то тебе надо обратиться к профильному врачу.

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

>тебе же человек то же самое написал - надо обертка для работы с xml, она и есть главный геморой, потому он ее и не написал

У нас млять празник на 4 дня. Подожди до понедельника, положу.

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

>можно названия библиотек и функций для работы с XPath в с++, и как это выглядит на том же с++

libxml2

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

>да и что тебе такое скажет:

Я скажу что это клиника:) Слава богу я со своим xmlем _такой_ херней не страдаю.

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

расслабся, выпей пива, в жизни есть вещи поважней xml

lester ★★★★
()

Еще один аргумент против XML - механизм сохранения изменений: если не хочешь потерять данные от случайного сбоя, нужно сбрасывать кэш после каждого изменения данных - в случае с XML это переписывание всего файла

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

>Еще один аргумент против XML - механизм сохранения изменений: если не хочешь потерять данные от случайного сбоя, нужно сбрасывать кэш после каждого изменения данных - в случае с XML это переписывание всего файла

А причём тут, собственно, сам XML?

Хочеш себе новый функционал - добавляй свои костыли. В чём проблема? Могу подсказать направление: курить XInclude и прочие способы создания многофайловых документов. А если сделаеш систему востановления изменений после сбоя електропитания во время сохранения файла цены тебе не будет :)

PS

Очень странно что возникла такая задача... неужели так часто правят конфиги? Хотя тут похоже не "лиш бы придратся".

PSS

Длч любителей diff-а рекомендую накапливать изменения в формате XUpdate. Это расширение XQuery для запросов на изменение. Описание и реализацию можно найти в этом проэкте http://modis.ispras.ru/sedna/index.htm

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

Если уж такая заваруха пошла, почему бы не остановиться на возможностях .ini файлов, как золотой середины...?

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

>ще один аргумент против XML - механизм сохранения изменений: если не хочешь потерять данные от случайного сбоя, нужно сбрасывать кэш после каждого изменения данных - в случае с XML это переписывание всего файла

Перлы чем дальшще тем интереснее. Покажешь мне конфиг который делает не так? Цирк на проводе -ты уже файловый контент двигать научился?

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

>Если уж такая заваруха пошла, почему бы не остановиться на возможностях .ini файлов, как золотой середины...?

Напрмиер потому что они ничерта не умеют.

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

> Покажешь мне конфиг который делает не так?

например реестр виндовз :) - просьбе не бросаться яйцами, просто человек спросил - я ответил

передвинуть часть файла не составляет никакого труда - код написать или сам догадаешься? конфиги не бівают метровіми, а потому используя буфер скажем в 4Кб мі за один-два шага передвинем нужную часть конфига и єто будет намного бістрее генерации xml

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