BG files - part 2

[email protected] (Ivaylo Botyov Nikolov) Wed, 24 Jan 2007 17:32:03 +0100
Newsgroups php.gtk.doc
Organization Divoto
Message-ID <[email protected]>
I rewrote all the old file so now they are as they have to be - 80
chars a line and info for revcheck.

As I advised by Fernando Correa da Conceição I put for maintainer
DIVOTO which is my nickname.

Hope this time everything will be O.K. so I can continue to translate
other files.

Sanding all the file in 2 e-mails as first time I got 100K limit for
the aattached files.



Ivaylo Botyov Nikolov
DIVOTO
www.divoto.net
email: [email protected]
helloadvanced.xml (application/xml, 10 KB)
<chapter id="tutorials.helloadvanced">
<!-- EN-Revision: 1.4 Maintainer: DIVOTO Status: ready -->
 <title>"Здравей свят" за напреднали</title>

 <simpara>
  В този урок ще задълбочим разгледания в предишният урок пример Здравей Свят.
  Ще създадем прозоре, в който потребителя трябва да въведе потребителското
  си име и парола за достъп. Когато потребителя натисне бутона Вход, текстовите
  полета ще бъдат проверени и ще бъде отпечатена грешка ако не са въведени
  правилно потребителското име и парола за достъп.
 </simpara>

 <para>
  Ето така ще изглежда програмата, когато бъде завършена:
  <graphic fileref="&directory.images;/tutorials/helloadvanced.png"/>
 </para>

 <para>
  Първото нещо, което трябва да направим е, да създадем прозорец, да му
  зададем заглавие и да кажем на главният цикъл да прекъсне програмата,
  ако прозореца бъде затворен. Това вече знаете от първият урок:
  <informalexample>
   <programlisting role="php"><![CDATA[
$wnd = new GtkWindow();
$wnd->set_title('Login');
$wnd->connect_simple('destroy', array('gtk', 'main_quit'));
]]></programlisting>
  </informalexample>
 </para>

 <para>
  Следващата стъпка е създаването на всички уйджети за този диалог:
  създаваме две текстови полета за въвеждане на потребителско име и парола
  за достъп:
  <informalexample>
   <programlisting role="php"><![CDATA[
$txtUsername = new GtkEntry();
$txtPassword = new GtkEntry();
]]></programlisting>
  </informalexample>
  Необходимо е да създадем описателни етикети, за да може потребителя да
  знае къде да въведе потребителското име и къде паролата за достъп:
  <informalexample>
   <programlisting role="php"><![CDATA[
//The second parameter says that the underscore should be parsed as underline
$lblUsername = new GtkLabel('_Username', true);
$lblPassword = new GtkLabel('_Password', true);
]]></programlisting>
  </informalexample>
  За край ни трябват и два бутона - единият за вход, другият за отказване:
  <informalexample>
   <programlisting role="php"><![CDATA[
$btnLogin    = new GtkButton('_Login');
$btnCancel   = new GtkButton('_Cancel');
]]></programlisting>
  </informalexample>
  Може би забелязвате, че конструктура <classname>GtkLabel</classname> приема
  втори параметър - долна черта <literal>_</literal>, за да може първата буква
  да се изобрази като подчертана. Както забелязвате същото нещо не се прави
  с конструктуро на бутона, тъй като той го прави автоматично. Това поведение
  може би ще Ви се стори странно, но ще Ви помогне при разграничаване на 
  етикетите на бутоните от самите етикети.
 </para>

 <para>
  Сега трябва да покажем на етикетите кой уйджет да активират при избиране на
  подчертаната буква. Това се прави по този начин:
  <informalexample>
   <programlisting role="php"><![CDATA[
$lblUsername->set_mnemonic_widget($txtUsername);
$lblPassword->set_mnemonic_widget($txtPassword);
]]></programlisting>
  </informalexample>
  Следващата процудура е да определим какво действие ще се извърши, когато
  е натиснат даден бутон. Бутонът за изход (Cancel) ще разруши прозореца, т.е. 
  ще прекрати нашата програма, а бутонаът за вход Login ще провери техтовите 
  полета и ще продължи с други действия:
  <informalexample>
   <programlisting role="php"><![CDATA[
$btnCancel->connect_simple('clicked', array($wnd, 'destroy'));
$btnLogin ->connect_simple('clicked', 'login', $wnd, $txtUsername, $txtPassword);
]]></programlisting>
  </informalexample>
  Предаваме три уйджета като допълнителни параметри към функцията за вход,
  която още не е дефинирана, (<literal>login</literal> function) -
  <varname>$wnd</varname>, <varname>$txtUsername</varname> и <varname>$txtPassword</varname>.
  Тези три уйджета са необходими, за да получим стойностите на текстовите 
  полета и ако всичко е наред да разрушим прозорецът.
 </para>

 <para>
  Сега след като имаме всичко, трябва да ги добавим в прозорец.
  Тъй като <classname>GtkWindow</classname> е бинсарен контейнер, той може да 
  приеме само един уйджет, затова ни трябва друг контейнер, в който да 
  разположим нашите уйджети.
  Използваме <classname>GtkTable</classname>, защото ни позволява да запазим 
  етикетите в колони, а стойностите на полетата по следният начин:
  <informalexample>
   <programlisting role="php"><![CDATA[
$tbl = new GtkTable(3, 2);
$tbl->attach($lblCredit, 0, 2, 0, 1);
$tbl->attach($lblUsername, 0, 1, 1, 2);
$tbl->attach($txtUsername, 1, 2, 1, 2);
$tbl->attach($lblPassword, 0, 1, 2, 3);
$tbl->attach($txtPassword, 1, 2, 2, 3);
]]></programlisting>
  </informalexample>
  (<varname>$lblCredit</varname> е просто етикет със съобщение).
  За бутоните използваме <classname>GtkHButtonBox</classname>, за да
  можем да разположим няколко от тях:
  <informalexample>
   <programlisting role="php"><![CDATA[
$bbox = new GtkHButtonBox();
$bbox->set_layout(Gtk::BUTTONBOX_EDGE);
$bbox->add($btnCancel);
$bbox->add($btnLogin);
]]></programlisting>
  </informalexample>
 </para>

 <para>
  Слдва да разположим таблицата с бутоните в прозореца. Не е възможно да 
  направим това директно, тъй като <classname>GtkWindow</classname> е 
  <classname>GtkBin</classname> и може да съдържа само един уйджет. Затова 
  ни е необходим друг контейнер, който този път е <classname>GtkVBox</classname>:
  <informalexample>
   <programlisting role="php"><![CDATA[
$vbox = new GtkVBox();
$vbox->pack_start($tbl);
$vbox->pack_start($bbox);
]]></programlisting>
  </informalexample>
  Това е всичко и сега трябва да покажем прозореца:
  <informalexample>
   <programlisting role="php"><![CDATA[
$wnd->add($vbox);
$wnd->show_all();
Gtk::main();
]]></programlisting>
  </informalexample>
 </para>

 <para>
  Последното, което липсва е функцията за вход <literal>login</literal>,
  която се извиква, когато потребителя натисне бутона Вход (Login). Тя трябва
  да провери стойностите за потребителско име и парола. Ако тяхната дължина
  е 0, то потребителя не е въвел нищо и ще се появи съобщение за грешка.
  Ако всичко е наред, прозорецът ще бъде унищожен и програмата ще продължи
  със зареждане на основният прозорец.
 </para>

 <para>
  Вземането на техт от уйджет става много лесно с използването на метода
  <function class="GtkEntry">get_text</function> на
  <classname>GtkEntry</classname>:
  <informalexample>
   <programlisting role="php"><![CDATA[
$strUsername = $txtUsername->get_text();
$strPassword = $txtPassword->get_text();
]]></programlisting>
  </informalexample>
  Проверката се прави чрез стандартната функция в php <literal>strlen</literal>.
  Ако има грешка ще искаме да покажен кратко съобщение.
  <classname>GtkMessageDialog</classname> е идеален, защото автоматически 
  генерира икона и стандартните бутони (Ok, Yes/No):
  <informalexample>
   <programlisting role="php"><![CDATA[
$dialog = new GtkMessageDialog($wnd, Gtk::DIALOG_MODAL, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, $errors);
$dialog->set_markup("The following errors occured:\r\n<span foreground='red'>" . $errors . "</span>");
$dialog->run();
$dialog->destroy();
]]></programlisting>
  </informalexample>
 </para>

 <para>
  Сложете функцията за влизане преди (!) главният цикъл и я стартирайте.
 </para>

 <example>
  <title>Пълният лист на програмата</title>
  <programlisting role="php">
   <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
               href="&directory.examples;/tutorials/helloadvanced/helloadvanced.phpw"
               parse="text">
    <xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback>
   </xi:include>
  </programlisting>
 </example>

</chapter>
installation.xml (application/xml, 29.6 KB)
<?xml version="1.0" encoding="utf-8" ?>
<!-- EN-Revision: 1.12 Maintainer: DIVOTO Status: ready -->
<chapter id="tutorials.installation">
 <title>Инсталиране на PHP-GTK 2</title>

 <sect1 id="tutorials.installation.introduction">
  <title>Въведение</title>
  <para>
   PHP-GTK 2 е разширение на PHP и може да се използва единствено с версия 5.1
   или по-голяма. Въпреки, че най-точният начин за инсталиране на PHP-GTK 2 е 
   чрез компилиране, това може да се окаже доста трудоемко при операционната 
   система Windows. За това, в повечето случаи за предпочитане е да се 
   използа бинарната PHP-GTK 2 Alpha версия на Gnope installer.
  </para>
  <para>
   Ще разгледаме процесът на инсталация за трите най-разпространени 
   операционни системи: Windows, Linux и Mac OS X. Инструкциите за Linux са 
   приложими и за по-голямата част от POSIX базираните системи.
  </para>
 </sect1>

 <sect1 id="tutorials.installation.windows">
  <title>Инсталация под  Windows</title>

  <sect2 id="tutorials.installation.windows.gnope">
   <title>Чрез използване на Gnope</title>
   <para>
    Gnope се е доказал като най-лесният начин за инсталиване и поддръжка на 
    PHP-GTK 2 под операционната система Windows. В Gnope инсталаторът на 
    PHP-GTK 2 се съдържат PHP 5.1, GTK 2.6 и PEAR.
    С няколко прости кликвания на мишката, и Вие сте готови!
   </para>
   <para>
    Изтеглете инсталаторът от <ulink url="&url.gnope;">gnope.org</ulink> и 
    следвайте инструкциите от екрана. Gnope също така има собствена PEAR 
    секция. В <ulink url="&url.pear.gtk2;">категорията Gtk2</ulink> можете да 
    изтеглите PHP-GTK 2 програми, различни от тези в официалният PEAR пакет.
   </para>
  </sect2>

  <sect2 id="tutorials.installation.windows.manual">
   <title>Ръчно инсталиране</title>
   <para>
    Изтеглете бинарната версия на PHP-GTK 2 за операционната система Windows
    от <ulink url="&url.phpgtk.download;">тук</ulink>. Разархивирайте в 
    директория по Ваш избор. При този процес ще бъде създадена директория 
    <literal>php-gtk</literal> със всички необходими файлове.
   </para>
   <para>
    Ще Ви е необходимо копие на файлът <filename>php.exe</filename> (CLI 
    версията) и файлът <filename>php5ts.dll</filename>. Тези два файла могат 
    да бъдат намерени в бинарната инсталация на PHP 5 за операционната система 
    Windows и трябва да бъдат преместени в директорията 
    <filename>php-gtk</filename>. Ако искате да използвате и други разширения 
    с <filename>php.exe</filename>, трябва да прехвърлите бинарните им фалове 
    в същата тази директория.
   </para>
   <para>
    <!-- FIXME: Do we need to do this? I doubt that this is necessary
       -cweiske -->
    Следващата стъпка е създаването на променливата <literal>PATH</literal>, 
    за да бъде включена директорията на <filename>gtk+2.6.9</filename>. Също 
    така можете да оставите файлът <literal>gtkpath.bat</literal> автоматично 
    да открие стойността на <literal>PATH</literal>. 
    Това може да стане простичко - просто стартирайте този файл.
   </para>
  </sect2>

  <sect2 id="tutorials.installation.windows.cvs">
   <title>Компилирането му от CVS</title>
   <para>
    Този метод не е за предпочитане за инсталация на PHP-GTK 2 под 
    операционната система Windows. Въпреки това, ако желаете да направите 
    инсталация по този начин първо прочетете 
    <filename>win32/README.win32.txt</filename> хранилището на CVS.
   </para>
  </sect2>
 </sect1>

 <sect1 id="tutorials.installation.linux">
  <title>Инсталация под Linux</title>

  <para>
   Най-добрият начин за иднсталиране на PHP-GTK 2 под Linux е чрез копилиране. 
   За сега няма бинарни или соурс пакети за която и да е дистрибуция на Linux 
   и използването на любимият Ви Организатор на пакети за инсталиране на 
   PHP-GTK 2 е невъзможно! Тези инструкции са валидни за по-голямата часто от 
   Linux дистрибуциите, но също така и за POSIX базираните системи.
  </para>

  <note>Споменатият по-долу начин не работи под FreeBSD</note>

  <para>
   Има два начина за инсталиране на PHP-GTK 2 под Linux базирани системи.
   Чрез използване на вече инсталиран PHP или чрез отделна инсталация на 
   PHP-GTK 2. Вторият начин е по-простият начин и е за предпочитане да се 
   използва от потребители с малък или никакъв опит с работа под Linux. И в 
   двата случая е необходимо да имате предварително инсталиран Gtk+ версия 2.6.
  </para>

  <sect2 id="tutorials.installation.linux.newphp">
   <title>Инсталиране на PHP-GTK 2 с нова инсталация на PHP</title>

   <para>
    Следвайте тези няколко стъпки и всичко трябва да бъде наред! Първото нещо, 
    което трябва да направите е да се сдобиете с последната версия на PHP. 
    Можете да изберете както версията     <literal>5_1</literal> така и 
    <literal>5_2</literal> - и двете работят чудесно:

    <programlisting role="bash"><![CDATA[
$ cvs -d :pserver:[email protected]:/repository login
$ cvs -d :pserver:[email protected]:/repository co -r PHP_5_2 php-src]]></programlisting>

     Сега трябва да компилирате и инсталирате:

     <programlisting role="bash"><![CDATA[
$ cd php-src
$ ./buildconf
$ ./configure --prefix=/opt/php5_2 --disable-cgi
$ make
$ su
$ make install
$ echo extension=php_gtk2.so >> /opt/php5_2/lib/php.ini
$ /opt/php5_2/bin/php-config --extension-dir | xargs echo 'extension_dir=' >> /opt/php5_2/lib/php.ini]]></programlisting>
   </para>

   <note>
    <para>
     Ако имате проблем с коплиринатео на версията на PHP от хранилището на CVS
     използвайте официалната версия, която можете да изтеглите от
     <ulink url="&url.php.download;">страница за идтегляне на php</ulink>,
     или от <ulink url="&url.php.snapshots;">"снимката" (текущата стабилна 
     версия)</ulink>.
    </para>
   </note>

   <para>
    Сега правим проверка и инсталираме PHP-GTK 2:
    <programlisting role="bash"><![CDATA[
$ cd ..
$ cvs -d :pserver:[email protected]:/repository co php-gtk
$ cd php-gtk
$ ./buildconf --with-phpize=/opt/php5_2/bin/phpize
$ ./configure --with-php-config=/opt/php5_2/bin/php-config
$ make
$ make install]]></programlisting>
   </para>

   <para>
    Тук може би ще пожелаете да създадете връзка към изпълнимият файл на php:

    <programlisting role="bash"><![CDATA[
$ ln -s /opt/php5_2/bin/php /usr/bin/php-gtk]]></programlisting>

    Това е всичко. Вие завършихте с инсталацията!
   </para>
  </sect2>

  <sect2 id="tutorials.installation.linux.existingphp">
   <title>Инсталиране чрез използване на вече инсталирана версия на PHP</title>

   <para>
    Ако решите да "добавите" PHP-GTK 2 към вече инсталирана версия на PHP 
    първо се уверете, че версията на PHP е поне 5.1 с разрешено CLI.
    PHP-GTK 2 няма да работи с други версии на PHP. За да проверите коя е 
    версията Ви на PHP напишите в терминалният прозорец следната команда: 
    <command>php -v</command>. Не забравяйте да проверите за съществуването на 
    <literal>cli</literal> в резилтатът от проверката!
   </para>

   <para>
    Сега изтеглете последната версия на PHP-GTK 2 от хранилището за CVS или 
    изтеглете последният архивен файл, както е описано в страницата за 
    <ulink url="&url.phpgtk.download;">изтегляне</ulink>.
    С командата <literal>cd</literal> влезте в главната директориа (/) на току 
    що разрахивираният архив и изпълнете следните команди:
    <programlisting role="bash"><![CDATA[
$ ./buildconf
$ ./configure
$ make
$ make install]]></programlisting>
   </para>

   <para>
    За по-голямятя част от хората, ползващи този метод всичко ще бъде наред. 
    Възможно е при хора, ползващи няколко версии на PHP инсталирани на една и 
    съща машина или инсталацията на PHP е в някаква нестандартна директория 
    да се получат грешки. В повечето случаи проблемът се решава като зададете 
    местонахождението на файловете <literal>phpize</literal> и на 
    <literal>php-config</literal>:
    <programlisting role="bash"><![CDATA[
$ ./buildconf --with-phpize=/path/to/phpize
$ ./configure --with-php-config=/path/to/php-config]]></programlisting>
   </para>
  </sect2>

  <sect2 id="tutorials.installation.linux.testing">
   <title>Тестване на инсталацията</title>

   <para>
    Преди да започнете да използвате PHP-GTK 2 е необходимо да разрешите 
    разширението му в конфигурационният файл на PHP - <filename>php.ini</filename>. 
    Добавете в най-долната част на фалът 
    <programlisting role="ini"><![CDATA[
extension=php_gtk2.so]]></programlisting>
      .
   </para>

   <para>
    Можете да тествате инсталацията си чрез изпълняване на:

    <programlisting role="bash"><![CDATA[
$ php -m | grep php-gtk]]></programlisting>

    Трябва да получите на една линия изписано <literal>php-gtk</literal>.
   </para>

   <para>
    След това можете да опитате с демо програмката, намираща се в 
    директорията <filename>demos</filename> на php-gtk, тоест
    в директорията <filename>demos/phpgtk2-demo.php</filename>.
   </para>
  </sect2>
 </sect1>

 <sect1 id="tutorials.installation.macosx">
  <title>Инсталиране под Mac OS X</title>

  <para>
   Трябва да се уверите, че са инсталирани Apple Developer Tools, BSD 
   Subsystem, и X преди да продължите с инсталацията на PHP-GTK 2. По 
   подразбиране BSD subsystem е инсталирана при Mac OS X, но за Developer 
   Tools и X Server трябва да направите инсталацията ръчно. Въпреки, че можете 
   да ползвате които и да е X server, най-лесно е да ползвате предоставеният 
   от Apple по подразбиране сървер в Mac OS X инсталатора.
  </para>

  <para>
   Изтеглете <ulink url="&url.macports;">MacPorts</ulink> (преди познат като
   DarwinPorts) или <ulink url="&url.fink;">Fink</ulink> и го инсталирайте. 
   Можете да изберете да инсталирате версията X (ако сте решили да не ползвате 
   инсталацията по подразбиране на Apple)и Gtk+. И двата - Fink и MacPorts - 
   са с версия 2.6 на Gtk+. Също така обедете се, че версията Ви на PHP е поне 
   5.2.В MacPorts е предоставен този пакет. Напишете <literal>php -v</literal> 
   в терминалният ви прозорец.
   Ако желаете ръчно да компилирате PHP можете да го направите по следният 
   начин:

   <programlisting role="bash"><![CDATA[
$ cvs -d :pserver:[email protected]:/repository co -r PHP_5_2 php-src
$ cd php-src
$ ./buildconf
$ ./configure --disable-cgi
$ make
$ sudo make install]]></programlisting>
   Въпреки, че можете да инсталирате PHP в която и да е директория, желателно е
   да бъде в директорията <filename>/usr/local/</filename>. MacPorts инсталира 
   PHP в директорията <filename>/opt/local/</filename>.
  </para>

  <para>
   Остово ви да направите последните проверки и да компилирате PHP-GTK:

   <programlisting role="bash"><![CDATA[
$ cd..
$ cvs -d :pserver:[email protected]:/repository co php-gtk
$ cd php-gtk
$ ./buildconf --with-phpize=/usr/local/bin/phpize
$ ./configure --with-php-config=/usr/local/bin/php-config \
            --disable-libglade
$ make
$ sudo make install]]></programlisting>
   Запамнете да промените <filename>/usr/local/</filename> с директорията, в 
   която инсталирахте PHP. Например: ако сте инсталирали PHP 5.2 с помощта на 
   MacPorts, трябва да въведете директорията <filename>/opt/local/</filename>.
  </para>

  <para>
   За край копирайте <filename>php.ini-recommended</filename> файла в 
   <filename>/usr/local/lib/php.ini</filename> и променете стойността на 
   <literal>extension_dir</literal> на директорията, в която се намира 
   <literal>php_gtk2.so</literal>. 
   В повечето случаи се намира в:
   <literal>/usr/local/lib/php/extensions/no-debug-non-zts-some-date</literal>.
   Можете да направите символична връзка в <filename>/usr/bin/</filename>, 
   която сочи към <filename>/usr/local/bin/php</filename>. Още веднъж, тази 
   диретория може да бъде <filename>/opt/local/</filename> или 
   <filename>/usr/local/</filename>. 
   Всичко зависи от това къде сте инсталирали PHP.
  </para>

  <para>
   Сега продължаваме с 
   <link linkend="tutorials.installation.linux.testing">Тестване на
   вашата инсталация</link>.
  </para>
 </sect1>


 <sect1 id="tutorials.installation.macosx-stepbystep">
  <title>Инсталиране под Mac OS X - стъпка по стъпка</title>
  <para>Написано от Jonathan Richter</para>

  <para>
   Има много малка информация за това как да накарш PHP-GTK2 да заработи
   под Mac OS X 10.4.
   След многократни опити и грешки постигнах желаният резултат.
  </para>
  <para>
   По-долу описах стъпка по стъпка цялата процедура. Не съм запознат с 
   работата в Терминален прозорец и в по-голямата част нямах никаква идея 
   какво правех. Затова използвайте информацията на собствен риск. Тези стъпки 
   работеха при мен и се надявам, че ще са от полза за някой.
  </para>

  <note>
   <para>
    имайте в предвид, че цялата процедура отнема няколко часа.
   </para>
  </note>

  <para>
   Полезна информация, която открих:
   <itemizedlist>
    <listitem>
     <para>
      <link linkend="tutorials.installation.macosx">Предишното описание за инсталация</link>
     </para>
    </listitem>
    <listitem>
     <para>
      <ulink url="http://www.macports.org/">macports.org</ulink>
     </para>
    </listitem>
   </itemizedlist>
  </para>

  <sect2>
   <title>Стъпка 1 - Инсталиране на Xcode</title>
   <para>
    Изтеглете последната версия на Xcode (наричана още Developer Tools) от 
    сайта на Apple. Този пакет е наистина важен и можете да се сдобиете с него 
    на <ulink url="https://connect.apple.com">connect.apple.com</ulink>.
    Влезте като потребител или се регистрирайте (без пари). Идете в секцията 
    Downloads.
   </para>
   <para>
    От дясно в Downloads Box изберете Developer Tools и изтеглете последната 
    версия на Xcode. При мен тя беше версия 2.4.1 с големина 923 MB.
    След изтеглянето използвайте инсталатора и следвайте инструкциите.
   </para>
  </sect2>

  <sect2>
   <title>Стъпка 2 - Инсталиране на Macports</title>
   <para>
    Първоначално започнах с Fink, но по средата се получи грешка - липсващ 
    пакет за GTK 2.6 или по-висок.
    Започнах от начало този път с Macports.
   </para>
   <para>
    Идете на адрес
    <ulink url="http://trac.macosforge.org/projects/macports/wiki/InstallingMacPorts">macosforge/InstallingMacPorts</ulink>.
   </para>
   <para>
    Чрез инсталиране на Xcode завършихте част от първата стъпка.
    Всичко мина успешно при мен, следвайки инструкциите от страницата.
   </para>
   <note>
    <para>
     Новата версия няма стандартния инсталатор на Apple и затова истеглих това:
     <ulink url="http://svn.macosforge.org/repository/macports/downloads/DarwinPorts-1.3.1/DarwinPorts-1.3.1-10.4.dmg">DarwinPorts-1.3.1-10.4.dmg</ulink>
    </para>
   </note>
   <para>
    Инсталирайте Macport чрез двойно кликване върху инсталатора от имидж диска.
   </para>
  </sect2>

  <sect2>
   <title>Стъпка 3 - Инсталиране на GTK2 (познат още като GTK+)</title>
   <para>
    Напишете в терминалният прозорец:
    <command>sudo port install gtk2</command>
   </para>
  </sect2>

  <sect2>
   <title>Стъпка 4 - Инсталиране на PHP5.x</title>
   <para>
    Вече имах стандартно инсталиран PHP 4.4.4 под OS X и PHP5 инсталация
    от <ulink url="http://www.entropy.ch">Entropy.ch</ulink>,
    която обаче не работеше. Изтрих инсталацията на PHP5 от Entropy.
   </para>
   <note>
    <para>
     Ако искате да използвате Apache 1 или 2 с PHP4 и 5, Entropy
     е най-доброто решение.
    </para>
   </note>
   <para>
    Напишете в терминалният прозорец:
    <command>cd /</command> и
    <command>sudo port install php5</command>
   </para>
   <para>
    Идете за кафе. Тази процедура отнема време ... на моят компютър отне 2 
    часа. (Macports инсталира всичко в директорията <filename>/opt</filename>. 
    Сложих "cd /", за да направя инсталацията в root директорията.
   </para>
  </sect2>

  <sect2>
   <title>Стъпка 5 - Подготовка за PHP-GTK</title>
   <para>
    В другото ръководство ще видите <literal>--disable-libglade</literal> като
    параметър при инсталацията на PHP-GTK. Не знам защо са използвали този 
    параметър.
    Използвайте го само ако наистина не искате да изполвате Glade. За повече 
    прочетете тук: <ulink url="http://glade.gnome.org">glade.gnome.org</ulink>.
   </para>
   <para>
    Проверете също и screenshots (снимките от екрана). Първоначално инсталирах 
    без Glade, но след няколко дена повторих процедурата, за да накарам Glade 
    да заработи.
    Ако искате да продължите без да използвате Glade пропуснете следващата 
    стъпка.
   </para>
  </sect2>

  <sect2>
   <title>Стъпка 6 - Инсталиране на Glade</title>
   <para>
    По някаква необяснима причина първият път получих грешка при инсталацията. 
    Вторият път повторих същите стъпки, но този път с X11 работещ във фонов 
    режим. Никакви грешки този път. Затова преди инсталацията отворете X11 във 
    фонов режим (apple-h).
   </para>
   <para>
    В терминалният прозорец напишете:
    <screen>
cd /opt
sudo port install libglade
sudo port install glade
    </screen>
     И идете за ново кафе ...
   </para>
  </sect2>

  <sect2>
   <title>Стъпка 7 - Инсталиране на PHP-GTK2</title>
   <note>
    <para>
     Вместо да използвате последната верси от хранилището на CVS, може би е 
     по-добре да използвате официалната версия от 
     <ulink url="http://gtk.php.net/download.php">страницата за изтегляне на PHP-GTK2</ulink>.
    </para>
   </note>
   <para>
    За да нямате проблеми оставете отворен X11.
    <command>phpize</command> и <command>php-config</command> трябва да са 
    в директорията <filename>/opt/local/bin/</filename>.
    Задължително направете тази провърка преди да продължите. В терминлният 
    прозорец напишете:
    <screen>
sudo cvs -d :pserver:[email protected]:/repository co php-gtk
cd php-gtk
sudo ./buildconf --with-phpize=/opt/local/bin/phpize
sudo ./configure --with-php-config=/opt/local/bin/php-config
sudo make
sudo make install
    </screen>
   </para>
   <para>
    След завършването на инсталацията на терминалният прозорец ще се отпечата
    информация за инсталираните разширения и пътя към тях, нещо от този сорт:
    <filename>/opt/local/lib/php/extensions/no-debug-non-zts-20060613</filename>.
    Apple-c (копиране) на тази пътека или си я запишете. Тя ще бъде 
    използвана по-нататък.
   </para>
  </sect2>

  <sect2>
   <title>Стъпка 8 - Подготовка на php.ini</title>
   <para>
    Във Finder, изберете Go &gt; Go To Folder... (или натиснете shift-apple-g)
    и напишете <literal>/opt/local/etc</literal>.
   </para>
   <para>
    Намерете файлът <filename>php.ini-recommended</filename> и го копирайте.
    Копираният файл го преименувайте на <filename>php.ini</filename> и го 
    отворете - за предпочитане с BBedit.
   </para>
   <para>
    Открийте редът <literal>extension_dir = "./"</literal> и го заменете с 
    този:
    <literal>extension_dir = "/opt/local/lib/php/extensions/no-debug-non-zts-20060613"</literal>
    (Пътеката, която копирахте в предишната стъпка)
   </para>
   <para>
    Открийте блокът с всички разширения и добавете следният ред:
    <literal>extension=php_gtk2.so</literal>
   </para>
   <para>
    Запишете файлът.
   </para>
  </sect2>

  <sect2>
   <title>Стъпка 9 - Тестване</title>
   <para>
    Стартирайте X11 и го оставете във фонов режим (apple-h), ако случайно сте 
    го затворили.
   </para>
   <para>
    Стартирайте терминален прозорец и напишете:
    <screen>
cd /opt/php-gtk/demos
php phpgtk2-demo.php
    </screen>
    Това демо ще се отвори в прозорец на X11.
   </para>
   <para>
    При работа с Glade, стартирайте терминален прозорец по този начин 
    (с отворен X11):
    <command>/opt/local/bin/glade-2</command>
   </para>
  </sect2>

  <sect2>
   <title>Стъпка 10 - За да изглежда по-добре</title>
   <para>
    Интерфейсът при  X11 под OS X е много грозноватичък.
    За да изтеглите други теми идете на
    <ulink url="http://art.gnome.org/themes/gtk2">art.gnome.org</ulink>. 
    За използването им обаче трябва да направим още една стъпка.
   </para>
   <para>
    В терминален прозорец напишете:
    <command>sudo port install gtk-theme-switch</command>
   </para>
   <para>
    След като завършите с тази процедура изтеглете темите от връзката по-горе.
    Инсталирането им може да стане по 2 начина:
    <orderedlist>
     <listitem>
      <para>
       Преместете или копирайте изтегленият файл <filename>.tar.gz</filename>
       (без да го разархивирате!) в директорията <filename>/opt/local/share/themes/</filename>
      </para>
      <para>
       Стартирайте Glade чрез написване в терминалният прозорец (с отворен 
       X11):
       <command>/opt/local/bin/switch2</command>
      </para>
      <para>
       Натиснете символът + sign и кликнете върху бутона Install New Theme.
       Насочете го към 
       <filename>/opt/local/share/themes/&lt;your-new-theme-name&gt;.tar.gz</filename>
      </para>
      <para>
       Натиснете OK и вече имате инсталирана в новата тема.
      </para>
     </listitem>

     <listitem>
      <para>
       Разархивирайте <filename>&lt;your-new-theme-name&gt;.tar.gz</filename>
       и я преместете или копирайте в нова директория за темит в
       <filename>/opt/local/share/themes/</filename>
      </para>
      <para>
       Стартирайте Glade чрез терминалният прозорец (и отворен X11):
       <command>/opt/local/bin/switch2</command>
      </para>
      <para>
       Името на новата ви тема ще е вече в листата с инсталирани теми.
      </para>
     </listitem>
    </orderedlist>
   </para>
  </sect2>

  <sect2>
   <para>
    Още веднъж, по-горните стъпки работеха на моят компютър.
    Конфигурацията му е: iMac G5 2.0 GHz/1 GB RAM/OS X 10.4.8 и
    Mac mini G4 1.42 GHz/512 MB RAM/OS X 10.4.8.
    Скъпи Mac привърженици, пускайте тук вашите забележки, трикове и др., 
    за да можем да да помогнем на всички работещи с PHP-GTK под OS X!
   </para>
  </sect2>

 </sect1>
</chapter>
language-defs.ent.txt (text/plain, 8.2 KB)
<!-- encoding="utf-8" -->
<!-- EN-Revision: 1.16 Maintainer: DIVOTO Status: ready -->
<!ENTITY PHPGTK2Docs            "Наръчник за PHP-GTK 2">

<!ENTITY PHPGTK2Tutorials       "Уроци за PHP-GTK 2">
<!ENTITY PHPGTK2Preface         "Предговор">
<!ENTITY PHPGTK2ManualReference "Справочник PHP-GTK 2">
<!ENTITY Appendix               "Приложение">

<!ENTITY Credits                "PHP-GTK 2 Кредити">
<!ENTITY DocCredits             "PHP-GTK 2 Кредити за документацията">

<!ENTITY Classtree              "Йерархия на Класовете">

<!ENTITY AtkClasses             "ATK Класове">
<!ENTITY AtkClassesDesc         "<para>Класове от библиотеката ATK</para>">
<!ENTITY GdkClasses             "GDK Класове">
<!ENTITY GdkClassesDesc         "<para>Класове от библиотеката GDK</para>">
<!ENTITY GtkClasses             "GTK Класове">
<!ENTITY GtkClassesDesc         "<para>Класове от библиотеката GTK</para>">
<!ENTITY PangoClasses           "Pango Класове">
<!ENTITY PangoClassesDesc       "<para>Класове от библиотеката Pango</para>">
<!ENTITY GladeClasses           "Glade Класове">
<!ENTITY GladeClassesDesc       "<para>Класове предоставени от разширението 
Glade</para>">
<!ENTITY MozEmbedClasses        "MozEmbed Класове">
<!ENTITY MozEmbedClassesDesc    "<para>Класове предоставени от разширението 
MozEmbed</para>">
<!ENTITY SourceviewClasses      "Sourceview Класове">
<!ENTITY SourceviewClassesDesc  "<para>Класове предоставени от разширението 
Sourceview</para>">

<!ENTITY AtkEnums               "ATK Enums">
<!ENTITY AtkEnumsDesc           "Enum-ираните стойности са всяка една от 
изброените.
  Flags могат да бъдат комбинация от посочените стойности.  И двете enums и 
  flags имат числова стойност и ключ, който е разбираем-за-човек.">

<!ENTITY GtkEnums               "GTK Enums">
<!ENTITY GtkEnumsDesc           "Enum-ираните стойности са всяка една от 
изброените.
  Flags могат да бъдат комбинация от посочените стойности.  И двете enums и 
  flags имат числова стойност и ключ, който е разбираем-за-човек.">

<!ENTITY GdkEnums               "GDK Enums">
<!ENTITY GdkEnumsDesc           "Enum-ираните стойности са всяка една от 
изброените.
  Flags могат да бъдат комбинация от посочените стойности.  И двете enums и 
  flags имат числова стойност и ключ, който е разбираем-за-човек.">

<!ENTITY PangoEnums             "Pango Enums">
<!ENTITY PangoEnumsDesc         "Enum-ираните стойности са всяка една от 
изброените. Flags могат да бъдат комбинация от посочените стойности.  И двете 
enums и flags имат числова стойност и ключ, който е разбираем-за-човек.">

<!ENTITY ClassIndex             "Индекс: Класове">
<!ENTITY MethodIndex            "Индекс: Функции и Методи">
<!ENTITY PropertyIndex          "Индекс: Полета и Свойства">
<!ENTITY SignalIndex            "Индекс: Сигнали">
<!ENTITY EnumIndex              "Индекс: Enum и Flag стойности">

<!-- Specialized Widget -->
<!ENTITY specialized.widget     "Този уйджет се смята за много специализиран 
или слабо използван за GTK+, и в бъдеще ще бъде преместен в някой друг пакет. 
Ако Вашата програма има нужда от този уйджет, можете да го използвате - той 
ще продължи да работи.">

<!-- Deprecated items -->
<!ENTITY deprecated             "ОТХВЪРЛЕН">
<!ENTITY deprecated.method      "ВНИМАНИЕ! Този метод вече не се използва в 
PHP-GTK 2 и при писането на нови програми НЕ трябва да бъде използван">
<!ENTITY deprecated.class       "ВНИМАНИЕ! Този клас вече не се използва в 
PHP-GTK 2 и при писането на нови програми НЕ трябва да бъде използва">
<!--
<!ENTITY deprecated.class       "Този клас беше отхвърлен и не трябва да си 
използва за написване на новите Ви програми. Моля погледнете 
<link linkend='tutorials.changes.deprecated'> страницата с отхвърлените 
уйджети</link>, за да видите кой клас на негово място можете да използвате.">
-->
<!ENTITY deprecated.property    "ВНИМАНИЕ! Това свойство вече не се използва 
в PHP-GTK 2 и при писането на нови програми НЕ трябва да бъде използва">

<!ENTITY widget.toospecialized    "Този уйджет се смята за много специализиран 
или слабо използван за GTK+, и в бъдеще ще бъде преместен в някой друг пакет. 
Ако Вашата програма има нужда от този уйджет, можете да го използвате - той 
ще продължи да работи. Имайте в предвид, че в някоя от бъдещите дистрибуции 
на GTK+ този уйджет може и да отпадне.">

<!ENTITY seealso "Виж също:">
<!ENTITY static  "Този метод трябва да бъде извикан статично.">
<!--
<!ENTITY PHPGTK2ManualUserguide "PHP-GTK 2 Потребителско ръководство">
<!ENTITY Introduction           "Въведение в PHP-GTK">
<!ENTITY introblurb             "В тази част на ръководството са разгледани 
идеите и технологиите на самото PHP-GTK.">
<!ENTITY GettingStarted         "Нека да започнем">
<!ENTITY startblurb             "В тази част на ръководството се обеснява 
инсталационният процес.">
<!ENTITY BuildingBlocks         "Основни Елементи">
<!ENTITY blocksblurb            "В тази част на ръководството се прави 
въвединие в основните елементи на PHP-GTK и показва простички начини за 
използването им.">

<!ENTITY GtkExtraClasses        "GtkExtra Класове">
<!ENTITY GtkExtraClassesDesc    "<para>GtkExtra набор от уйджети, чието 
предназначение е да запълнят празнотите оставени от оригиналните класове 
на GTK+. Можете да ги откриете на 
<ulink url='http://gtkextra.sourceforge.net'>gtkextra.sourceforge.net</ulink>
</para>">

<!ENTITY GtkExtraEnums          "GtkExtra Enums">
<!ENTITY GtkExtraEnumsDesc      "Enum стойности за класовете на GtkExtra">

<!ENTITY LibGladeClasses        "Класове Glade">
<!ENTITY LibGladeClassesDesc    "<para>Класовете Glade</para>">

<!ENTITY ScintillaClasses       "Класове Scintilla">
<!ENTITY ScintillaClassesDesc   "<para>Класовете Scintilla</para>">
-->

<!ENTITY KeysymTitle            "Символични имена на ключовете в PHP-GTK 2">

<!-- dummy entry - other languages need to fill this in. Template for them:
<!ENTITY frontpage.translators '<authorgroup id="translators">
  <author>
   <firstname>Ивайло Ботьов Николов</firstname><surname> - DIVOTO</surname>
  </author>
</authorgroup>'>
-->

<!ENTITY frontpage.translators  "">
packing.xml (application/xml, 11.3 KB)
<?xml version="1.0" encoding="utf-8" ?>
<!-- EN-Revision: 1.5 Maintainer: DIVOTO Status: ready -->
<chapter id="tutorials.packing">
 <title>Пакетиране на уйджети</title>

 <sect1 id="tutorials.packing.about">
  <title>Въведение</title>
  <simpara>
   Това ръководство има за цел да ви покаже различните методи за организиране 
   на уйджети в един прозорец и как да изберете на-правилният от тях.
  </simpara>
  <para>
   Ако и преди сте се занимавали с графични потребителски интрфейси в някой от 
   езиците като Visual Basic или Visual C++ със сигурност ще се почудите, защо 
   ви е необходимо да има урок за позициониране на уйджети, you will
   wonder why you'd need a tutorial on widget placement. До саге нещата стояха 
   така: Размерът на прозореца, избирате уйджета и го позиционирате в 
   координатите <literal>(x,y)</literal>. Правите го едиколкоси дълъг и 
   едиколкоси широк, и край, това е всичко. Имате фиксирани позиции и размери 
   и дори когато размерът на прозореца се промени те си остават фиксирани, 
   защото не знаят как да се пренастроят.
  </para>
  <simpara>
   В Gtk нещага са динамични. Уйджетите променят размерите си при промяна 
   размера на прозореца, ако рлазбира се не сте им забранили предварително 
   да го правят. Нагласяването на всичкото това е малко по-сложно от колкото 
   просто да фиксирате размерът и позицията им, но всичко тези мъки ще ви 
   доведат до един прозорец който е достатъчно разчупен и добре изглеждащ при 
   почти всички размери.
  </simpara>
 </sect1>


 <sect1 id="tutorials.packing.basics">
  <title>Основи при пакетирането</title>

  <simpara>
   Има разрични видове уйджети в Gtk в зависимост от това, колко под-уйджета 
   могат да съдържат:
  </simpara>

  <itemizedlist>
   <listitem>Без под-уйджета - нормален уйджет</listitem>
   <listitem>Само един под-уйджет: bin</listitem>
   <listitem>Два или повече под-уйджета: контейнер (container)</listitem>
  </itemizedlist>

  <para>
   Основният уйджет, с който, в по.голямята част при програмирането ще 
   започвате е <classname>GtkWindow</classname>, т.е bin уйджет. Това означав, 
   че той може да съдаржа само един под-уйджет. И от тук накъде. Програма само 
   с един уйджет не нещо което ще ни впечатли. Решението е в контейнерите. 
   Изибате си един и го добавяте в прозореца. В този контейнер вече можете да 
   добавите други уйджети или дори други контейнери. Това ви позволява да 
   получите желаният от вас изглед.
  </para>

  <para>
   Различните контейнери, като: <classname>GtkHBox</classname>, 
   <classname>GtkVBox</classname>, <classname>GtkTable</classname> и
   <classname>GtkFixed</classname> се държат различно, по начинът има на 
   поставяне и организиране на уйджетите. Всеки един от тях си има свое 
   собствено предназначение и за да получите наистина сложни интерфейси е 
   необходимо тяхното комбиниране.
  </para>

  <!-- TODO: Explain filling and expanding, with screenshot -->
 </sect1>


 <sect1 id="tutorials.packing.box">
  <title>Кутии - GtkHBox и GtkVBox</title>

  <para>
   Най-простите, но в същото време най-често използваните са  
   <classname>GtkBox</classname>-овете: <classname>GtkHBox</classname> и 
   <classname>GtkVBox</classname>. Тяхното предназначение е за подреждане на
   уйджетите в една права линия. <classname>GtkHBox</classname> ги организира 
   по хоризонталата, а <classname>GtkVBox</classname> по вертикалата.
  </para>

  <para>
   Добавянето на уйджетите става чрез <function class="GtkBox">pack_start</function>
   и <function class="GtkBox">pack_end</function>.
   <function class="GtkBox">pack_start</function> ги добавя един след друг 
   последователно, започвайки от началото (от ляво на дясно или от горе на 
   долу), докато <function class="GtkBox">pack_end</function> ги добавя в 
   обратен ред (от дясно на ляво или от долу на горе).
  </para>

  <para>
   Можете да управлявате разположението им чрез трите допълнителни параметъра 
   на <function class="GtkBox">pack_start</function> и <function class="GtkBox">pack_end</function>. 
   За повече подробности вижте тяхната документация.
  </para>

  <example>
   <title>Просто динамично разположение чрез <classname>GtkVBox</classname></title>
   <programlisting role="php">
    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" 
     href="&directory.examples;/tutorials/packing/boxes.phpw" parse="text">
     <xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback>
    </xi:include>
   </programlisting>
  </example>

  <para>
   Стартирайте демото и променете размера на прозореца. Многоредовият текстов 
   уйджет променя размерът си, за да запълни пространството в прозореца, 
   образувано между етикета и бутона. Променете третият параметър от 
   <literal>true</literal> на <literal>false</literal> в пакета на 
   <varname>scrwnd</varname> и вижте какво ще се получи.
  </para>

  <para>
   Специална версия на <classname>GtkBox</classname>-овете са
   <classname>GtkHButtonBox</classname> и <classname>GtkVButtonBox</classname>:
   Тяхното предназначение е същото като кутиените контейнери, но могат да 
   съдържат само <classname>GtkButton</classname>-ите. За компенсация на това 
   ограничение те имат специални функции, използвани при поредица от бутони.
  </para>
 </sect1>


 <sect1 id="tutorials.packing.table">
  <title>Табулаторно разполагане чрез GtkTable</title>

  <para>
   Докато създаването на динамични разполагане чрез 
   <classname>GtkBox</classname>-овете е много лесно, то е сравнително трудно 
   да подредите уйджетите така, че етикетите взаимодействащите си уйджети да 
   имат еднаква ширина, независимо от тяхното съдържание. За да получите 
   табулаторно подреждане е най-добре да получите 
   <classname>GtkTable</classname>. Уйджетите могат да се разполагат върху 
   няколко колони и реда и да имат различен размер при попълването.
  </para>

  <example>
   <title>Табулаторно разполагане</title>
   <programlisting role="php">
    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" 
     href="&directory.examples;/tutorials/packing/table.phpw" parse="text">
     <xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback>
    </xi:include>
   </programlisting>
  </example>

  <para>
   Изпълнявайки примерът, ще видите, че етикетът <literal>Id</literal> е 
   центриран хоризонтално. По подразбиране, се запълват и от двете страни 
   и заемат цялото свободно пространство. В повечето случаи това върши 
   работа. Не е рационално обаче при изполването с 
   <classname>GtkLabel</classname> - Етикетът трябва да бъде подравнен в 
   едната страна. При използване на функцията 
   <function class="GtkLabel">set_justify</function> се подравняват множество 
   етикети, затова ние ще използваме <classname>GtkAlignment</classname> за 
   да направим правилно подравняване - етикетът <literal>Name</literal> 
   показва този резултат.
  </para>
 </sect1>


 <sect1 id="tutorials.packing.fixed">
  <title>Фиксирано разполагане</title>

  <para>
   Този контейнер няма свое логическо разположение. Вие трябва лично да му 
   кажете къде да бъде поставен. Размерът на уйджета се определя автоматично, 
   но можете да зададете свои собствени размери, чрез функцията - 
   <function class="GtkWidget">set_size_request</function>.
  </para>

  <simpara>
   Много е лесно да създадете и разположите уйджетите, но тяхните размери са 
   фиксирани. При промяна размерът на прозореца, уйджета не променя размерът 
   или своето положение. Използвайте го в случаите, когата е наистина 
   необходимо. По-добрият избор е изполването на динамичните контийнери.
  </simpara>

  <example>
   <title>Фиксирано разполагане чрез <classname>GtkFixed</classname></title>
   <programlisting role="php">
    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" 
     href="&directory.examples;/tutorials/packing/fixed.phpw" parse="text">
     <xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback>
    </xi:include>
   </programlisting>
  </example>
 </sect1>

</chapter>
preface.xml (application/xml, 3.7 KB)
<?xml version="1.0" encoding="utf-8" ?>
<!-- EN-Revision: 1.4 Maintainer: DIVOTO Status: ready -->
<book id="preface">
 <title>Предговор</title>
  <simpara>
   Добре дошли в Наръчникът за PHP-GTK 2! Този наръчник разкрива не само
   основите на PHP-GTK 2, но и задълбочено разглежда всички аспекти на 
   този език за програмиране.
  </simpara>
  <simpara>
   Ръководството е разделено на две части. Първата част е 
   <link linkend="tutorials">Учебният (Tutorials)</link> раздел. Тази част 
   ще Ви помогне да започнете да програмирате на PHP-GTK 2, но също ще Ви 
   разкрие и някои особености и различни аспекти при разработването на 
   програми с PHP-GTK 2. Втората част е <link linkend="reference">Справочният 
   (Reference)</link> раздел. В този раздел в детайли са разгледани GTK 
   обектите и асоцийраните към тях методи и сигнали. Разделът ще Ви послужи 
   при всяко Ваше съмнение относно даден метод или използван от Вас обект.
  </simpara>
  <simpara>
   Въпруеки нашите усилия за създаване на Ръководство без всякакви грешки е 
   възможно появяването на такива. В случай, че срещнете някакви грешки, моля,
   информирайте the PHP-GTK documentation group: &email.phpgtkdoc;. В случай, 
   че желаете в това Ръководство да бъде включено нещо, което липсва, Ви молим 
   да се обърнете с въпрос към майлинг листа PHP-GTK-General mailing list: 
   &email.phpgtk;.
  </simpara>
  <simpara>
   Това Ръководство е разработено с помоща на модифицирана версия на Docbook 
   DTD. Промените са направени, за да може да бъде документирана 
   обектно-ориентираната система използвана при PHP-GTK 2. XML основата за 
   всеки клас и техните методи в началото са автоматично генерирани от 
   първоначалният код (source code) на PHP-GTK 2 и след това подновени чрез 
   PHP5's Reflection за получаване на документация, синхронизирана с 
   първоначалният код.
  </simpara>
  <simpara>
   Програмата за генериране на XML е разработена от &link.andrei; (Авторът на 
   PHP-GTK) и след това модифицирана от &link.cweiske;. За трансформирането 
   на документацията от XML към различни формати се използва главно 
   <acronym>XSL</acronym> стилове и др. Самата Система за играждането на 
   Ръководстовото е разработена от &link.steph;.
  </simpara>
  <simpara>
   Надяваме се четенето на това Ръководство да Ви достави точно толкова 
   удоволствие, колкото на нас при писането му!
  </simpara>
</book>