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

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

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

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

Уже приводили примеры: 1 строка на нескольких языках. Вы где траву берёте? Учите XPath, чтобы не нести откровенный бред.

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

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

Читать конфиги вперемешку с примечаниями ещё хуже. ;)

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

>Читать конфиги вперемешку с примечаниями ещё хуже. ;)

Конечно, и комментарии в исходных текстах тоже зло.

Утомили, невменяемые. Прощайте, клоуны.

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

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

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

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

Такие обёртки давно написаны. Кто виноват, если он делает свой универсальный велосипед? Как он говорил, смотрел только expat. А это - низкоуровневый SAX-парсер. А если бы посмотрел поддержку XPath в DOM-парсерах, не придумывал бы ерунды.

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

>> Хотите я сделаю видеоролик, в котором вы сношаетесь с рогатым скотом?

> вы снимите сцену с собой в главной роли, а потом попытаетесь прилепить лицо из аватара?

Метод понравился, предлагаю таким образом снять ролик об интимных отношениях вас и ваших подружек ;) Поменяем лицо, добавим рога. Причем и вам и подружкам :D

>> Исходники выкладывайте - посмотрим.

> я пока использую наш сервер БД для хранения данных, потому вам не получится запустить программу, позже я переведу ее на sqlite

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

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

Про ролик см. выше :D

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

> я бы написал так:
> [Application/Window] Width = 20 Height = 40

И это не ломает глаза!!!???

Я вообще не сразу понял, что Application/Window - это два слова.
В сад, детский сад, такие конфиги.

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

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

В 23 года человек еще продолжает думать, что его все должны учить.
Хотя, это если человек был студентом, а не птушником. В последнем случае - стенка.

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

> Конечно, и комментарии в исходных текстах тоже зло.

Передергиваем? Уже про исходные тексты говорим?
Хотя, кстати, комментарии типа /* Ээээ... Ну тут все понятно. Гы. */
в исходниках - зло ;)

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

>> Читать конфиги вперемешку с примечаниями ещё хуже. ;)

> Чего тогда в Unix лезть?

Работать? ;) Или конфиги читать? Причем обязательно с примечаниями?

Тогда этот урод прав:
http://citkit.ru/articles/103/

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

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

Фигасе! Не читай!
Друх, как же ты не ПОЙМЕШЬ свою УЩЕРБНОСТЬ!

> Теоретики сраные. :Е

Приятно познакомиться :E
Я и не знал, что вы там сгруппировались уже :)
Или психоз?

Друхи, расскажите нам еще, что НЕВОЗМОЖНО делать?! :D
А то вдруг мы не в курсе?
Нас тут, кстати, тоже много :D

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

> переносы строки не прошли

Вот именно ;) Monkey?
Ребут не успел сделать? :D

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

-->
А написать

Application

window

width= 20
height= 40

EndApplication

<--


Парсер матернулся на "А написать". Ага.


-->
Application

window

width= 20height= 40

EndApplication

<--

Парсер не матернулся. Окно завалилось с криком "Window width 20height... Shit... OOoops." Так и будет, если ты приложение не только для себя создаешь.

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

> Это у тебя дистр такой, что формат у Xorg лажовый?

То есть приятность чтения конфигов упирается в дистростроителей?
Теперь будем выбирать дистр по красоте конфигов?

anonymous
()

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

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

> программы они не пишут

?! Gnome?

> на этой теме можно ставить крест

Хороший слив, чтобы исходники своих программ не показывать,
или делать вид, что вас мордой в дерьмо не сунули ;)
Да-да. Я имею в виду ссылки на библиотеки и ваш чудо-быдло-конфиг.

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

>> я бы написал так:
>> [Application/Window] Width = 20 Height = 40

> И это не ломает глаза!!!???

Один тут выдал что-то типа:

[[Application]]
[Window]
Width = 20
Height = 40

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

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

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

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

> [Application / Window]

> Width = 20

> Height = 40

> красивее?

Прозрачнее.
Вот так красивее:

<application>
  <window w="20" h="40">
</application>



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

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

Давай не будем. Мелко плаваешь. Ага.

> в свои непонятно сколько лет ты так и не научился думать, гугль по словосочентанию XPath и с++ ничего толкового не выдал

В свои 23 ты не видишь ничего, кроме своих постов.
Тебе ссылки дадены не были?

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

Он не напутал. Ибо см. выше.

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

> ?! Gnome? покажи мне гномовца на лоре

> делать вид, что вас мордой в дерьмо не сунули ;) не ты ли сунул? каким образом? не воображай про себя много, а то еще поверишь. а не выкладываю я код, потому что он напрямую завязан на нашу БД, а у нас код закрытый,

да и что тебе такое скажет: /******************************************************************************* ***************/ wxString vsFormEditor::Save( void ) { wxStandardPaths tPaths; wxString path = tPaths.GetUserConfigDir() + wxFileName::GetPathSeparator() + _("data.vs"); ::wxRemoveFile( path );

wxFileConfig config( wxEmptyString, wxEmptyString, path );

for( int i = 0 ; i < m_pSurface->m_aWindows.Count() ; ++i ) { vsWindow* t_pWindow = (vsWindow*) m_pSurface->m_aWindows[ i ];

config.SetPath( _("/Widgets/") + t_pWindow->GetName() ); if( t_pWindow->m_pParent ) config.Write( _("Parent"), t_pWindow->m_pParent->GetName() );

config.Write( _("Type"), t_pWindow->GetVSType() );

if( t_pWindow->m_iGroup != -1 ) config.Write( _("Group"), t_pWindow->m_iGroup );

if( t_pWindow->m_sDescription.Len() ) config.Write( _("Description"), t_pWindow->m_sDescription );

if( t_pWindow->m_bLocked ) config.Write( _("Locked"), t_pWindow->m_bLocked ); config.SetPath( _("Properties") );

for( int j = 0 ; j < t_pWindow->m_aProperties.Count() ; ++j ) { if( j ) config.SetPath( _("../") + t_pWindow->m_aProperties[ j ].Name ); else config.SetPath( t_pWindow->m_aProperties[ j ].Name );

config.Write( _("Value"), t_pWindow->m_aProperties[ j ].Value.GetString() ); }

config.SetPath( _("../Events") );

for( int j = 0 ; j < t_pWindow->m_aEvents.Count() ; ++j ) { if( j ) config.SetPath( _("../") + t_pWindow->m_aEvents[ j ].Name ); else config.SetPath( t_pWindow->m_aEvents[ j ].Name );

if( t_pWindow->m_aEvents[ j ].pos != -1 ) config.Write( _("Pos"), t_pWindow->m_aEvents[ j ].pos );

if( t_pWindow->m_aEvents[ j ].scroll_x != -1 ) config.Write( _("Scroll_X"), t_pWindow->m_aEvents[ j ].scroll_x );

if( t_pWindow->m_aEvents[ j ].scroll_y != -1 ) config.Write( _("Scroll_Y"), t_pWindow->m_aEvents[ j ].scroll_y );

if( t_pWindow->m_aEvents[ j ].selection_end != -1 ) config.Write( _("Selection_End"), t_pWindow->m_aEvents[ j ].selection_end );

if( t_pWindow->m_aEvents[ j ].selection_start != -1 ) config.Write( _("Selection_Start"), t_pWindow->m_aEvents[ j ].selection_start );

if( !IsEmptyHandler( t_pWindow->m_aEvents[ j ].Value ) ) config.Write( _("Value"), t_pWindow->m_aEvents[ j ].Value ); } }

for( int i = 0 ; i < m_pSurface->m_aFunctions.Count() ; ++i ) { vsFunction t_pFunction = m_pSurface->m_aFunctions[ i ];

config.SetPath( _("/Functions/") + t_pFunction.Name );

if( t_pFunction.Arguments.Len() ) config.Write( _("Arguments"), t_pFunction.Arguments );

if( t_pFunction.Description.Len() ) config.Write( _("Description"), t_pFunction.Description );

if( t_pFunction.Scope ) config.Write( _("Scope"), t_pFunction.Scope );

if( t_pFunction.Value.Len() ) config.Write( _("Value"), t_pFunction.Value ); }

for( int i = 0 ; i < m_pSurface->m_aVariables.Count() ; ++i ) { vsVariable t_pVar = m_pSurface->m_aVariables[ i ];

config.SetPath( _("/Variables/") + t_pVar.Name );

if( t_pVar.DefaultName ) config.Write( _("DefaultName"), t_pVar.DefaultName );

if( t_pVar.Description.Len() ) config.Write( _("Description"), t_pVar.Description );

if( t_pVar.Scope ) config.Write( _("Scope"), t_pVar.Scope );

if( t_pVar.Type.Len() ) config.Write( _("Type"), t_pVar.Type );

if( t_pVar.Value.Len() ) config.Write( _("Value"), t_pVar.Value ); }

config.SetPath( _("/") );

config.Write( _("Path"), m_strPath );

if( m_pSurface->m_bUseGrid ) config.Write( _("UseGrid"), m_pSurface->m_bUseGrid );

if( m_pSurface->m_bGridPoint ) config.Write( _("ShowGrid"), m_pSurface->m_bGridPoint );

if( m_pSurface->mComments.Len() ) config.Write( _("Comments"), m_pSurface->mComments );

if( m_pSurface->mAuthor.Len() ) config.Write( _("Author"), m_pSurface->mAuthor );

if( m_pSurface->mModifiedBy.Len() ) config.Write( _("ModifiedBy"), m_pSurface->mModifiedBy ); config.Write( _("Style"), (long) m_pSurface->m_eStyle ); config.Write( _("Page"), (long) m_pNotebook->GetSelection() );

return path; }

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

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

Иногда нет смысла разжёвывать банальности. Вот про администрирование настроек противники XML предпочли просто не говорить. Это есть фанатизм.

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

> одно радует - программы они не пишут

Пишем, не волнуйтесь. Так что мы в теме и у нас есть опыт. ;)

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

ты по ссылкам ходить умеешь? попробуй - может получиться

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

> гугль по словосочентанию XPath и с++ ничего толкового не выдал

Мой пост со ссылками не увидели? Чукча не читатель...? ;)

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

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

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

[Application / Window]
Width = 20
Height = 40
красивее?

А теперь добавьте возможность контроля одного параметра определённому пользователю. Кстати, где спецификация параметров? Опять из головы берёте? Вы бы хоть сначала думали, потом бросались кодировать.

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

> Мой пост со ссылками не увидели?

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

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

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

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

этот ужас побился при вылаживании на форум

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

вам что каждому персонально обьяснять надо, что переносы строк побились при вылаживании???

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

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

Стоит задача: централизованное администрирование десктопов, чтобы пользователи не могли менять фоновый рисунок, к примеру. KDE(Kiosk mode с ini) пришлось делать наколенные придумки. GNOME (XML) это легко осилило, не придумывая велосипедов.

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

>Работать? ;) Или конфиги читать? Причем обязательно с примечаниями?

Конфиги читать. Можно и с примечаниями. И править их. Чтобы потом комфортно работать.

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

>Обоснуйте, пожалуйста.

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

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

XWindow для кого создали? А какой там конфиг?

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

Разумеется! В нкоторых дистрах может быть всё лажовым. Кроме красивых оболочек-обёрток.

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

>После этого кричал, что деревья в конфигах не нужны,

Кричал, что деревья далеко не возде нужны, поэтому в таких случаях xml - suxx.

А приведённое выше - это ещё не дерево - это пока кустарник ;) И сувать ради него xml - безумие.

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

> Конфиги читать. Можно и с примечаниями. И править их. Чтобы потом комфортно работать.

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

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

> А приведённое выше - это ещё не дерево - это пока кустарник ;) И сувать ради него xml - безумие.

Да, безумие.
Только приведенное выше описывает приложение, которое рисует определенной шири и высоты рамку за пределами экрана ;)

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

>А теперь добавьте возможность контроля одного параметра определённому пользователю.

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

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

> if( ThisUserCanChangeWallpaper( a_pUserName ) ) config.Write( _("Wallpaper", a_pNewValue );

> это очень сложно?

То есть вы ещё будете сам писать враппер? А где имя пользователя брать? А группу? А как в конфиге это будет задаваться?

Мда, вам ещё учится и учится... ;)

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