<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0">
<channel>
<title>FreeSource - AltLinux/Sisyphus/Alterator/evolution</title>
<link>http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution</link>
<description>History/revisions of FreeSource/AltLinux/Sisyphus/Alterator/evolution</description>
<language>en-us</language>
<item>
<title>2006-10-26 12:36:18</title>
<link>http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution/show?time=2006-10-26+12%3A36%3A18</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a name=".altlinux.sisyphus.alterator.evolution" href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution&amp;" class="">/Alt&amp;nbsp;Linux&amp;nbsp;/&amp;nbsp;Sisyphus&amp;nbsp;/&amp;nbsp;Alterator&amp;nbsp;/&amp;nbsp;evolution&lt;/a> за &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution?time=2006-10-26+12%3A36%3A18">2006-10-26 12:36:18&lt;/a> и &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution">2006-10-26 12:58:03&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;div class="action" style="float:right; width:250px">&lt;div class="action-content">Эта&amp;nbsp;страница была перенесена на&amp;nbsp;&lt;a href="http://altlinux.org/Alterator/evolution" target="_blank" title="" class="outerlink">altlinux.org&lt;/a>. Текст на&amp;nbsp;freesource.info заморожен.&lt;/div>&lt;/div>&lt;a name="h5243-1">&lt;/a>&lt;h3>7. Переходы между документами&lt;/h3>
Доступны следующие команды для&amp;nbsp;перехода между разными виджетами:&lt;br />
&lt;ul>&lt;li> &lt;strong>document:replace-in-widget&lt;/strong> &amp;ndash; замещает содержимое указанного виджета на&amp;nbsp;указанный документ. Возможна передача url&amp;nbsp;нового документа с&amp;nbsp;параметрами.
&lt;/li>&lt;li> &lt;strong>document:replace&lt;/strong> &amp;ndash; вариант предыдущей команды для&amp;nbsp;работы с&amp;nbsp;текущим документом. Если документ был&amp;nbsp;вставлен куда-то с&amp;nbsp;помощью команды &lt;strong>document:insert&lt;/strong>, до&amp;nbsp;замена произойдёт во&amp;nbsp;всём документе, если же&amp;nbsp;он был&amp;nbsp;вставлен куда-то с&amp;nbsp;помощью команды &lt;strong>document:subdocument&lt;/strong> (или как&amp;nbsp;container-presentation), то&amp;nbsp;замена содержимого произойдёт только в&amp;nbsp;нём и&amp;nbsp;не затронет родительского документа.
&lt;/li>&lt;li> &lt;strong>document:popup&lt;/strong> &amp;ndash; открывает указанный документ в&amp;nbsp;новом модальном окне.
&lt;/li>&lt;li> &lt;strong>document:window&lt;/strong> &amp;ndash; открывает указанный документ в&amp;nbsp;новом не-модальном окне, в&amp;nbsp;качестве первого параметра передаётся процедура, которая будет вызвана после того как&amp;nbsp;это окно будет закрыто.
&lt;/li>&lt;li> &lt;strong>document:end&lt;/strong> &amp;ndash; закрывает текущее модальное окно. Когда закроется последний документ &amp;ndash; работа приложения будет завершена.&lt;/li>&lt;/ul>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2006-06-05 11:51:26</title>
<link>http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution/show?time=2006-06-05+11%3A51%3A26</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution&amp;" class="">/Alt&amp;nbsp;Linux&amp;nbsp;/&amp;nbsp;Sisyphus&amp;nbsp;/&amp;nbsp;Alterator&amp;nbsp;/&amp;nbsp;evolution&lt;/a> за &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution?time=2006-06-05+11%3A51%3A26">2006-06-05 11:51:26&lt;/a> и &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution?time=2006-10-26+12%3A36%3A18">2006-10-26 12:36:18&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent"> (-&amp;gt;string (box password1))&lt;br />
 (-&amp;gt;string (box password2))))))&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent"> (sure-string (box password1))&lt;br />
 (sure-string (box password2))))))&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2006-06-02 17:40:03</title>
<link>http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution/show?time=2006-06-02+17%3A40%3A03</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution&amp;" class="">/Alt&amp;nbsp;Linux&amp;nbsp;/&amp;nbsp;Sisyphus&amp;nbsp;/&amp;nbsp;Alterator&amp;nbsp;/&amp;nbsp;evolution&lt;/a> за &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution?time=2006-06-02+17%3A40%3A03">2006-06-02 17:40:03&lt;/a> и &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution?time=2006-06-05+11%3A51%3A26">2006-06-05 11:51:26&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">(document:id my-label (label &amp;#8220;default-value&amp;#8221;))&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">(document:id my-label &amp;#8220;default-value&amp;#8221;)&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2006-06-02 17:24:08</title>
<link>http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution/show?time=2006-06-02+17%3A24%3A08</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution&amp;" class="">/Alt&amp;nbsp;Linux&amp;nbsp;/&amp;nbsp;Sisyphus&amp;nbsp;/&amp;nbsp;Alterator&amp;nbsp;/&amp;nbsp;evolution&lt;/a> за &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution?time=2006-06-02+17%3A24%3A08">2006-06-02 17:24:08&lt;/a> и &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution?time=2006-06-02+17%3A40%3A03">2006-06-02 17:40:03&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;a name="h5243-1">&lt;/a>&lt;h3>6. Документ как&amp;nbsp;совокупность компонент&lt;/h3>&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;a name="h5243-1">&lt;/a>&lt;h3>6. Документ как&amp;nbsp;совокупность компонент и&amp;nbsp;сложных виджетов&lt;/h3>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2006-06-02 17:00:17</title>
<link>http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution/show?time=2006-06-02+17%3A00%3A17</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution&amp;" class="">/Alt&amp;nbsp;Linux&amp;nbsp;/&amp;nbsp;Sisyphus&amp;nbsp;/&amp;nbsp;Alterator&amp;nbsp;/&amp;nbsp;evolution&lt;/a> за &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution?time=2006-06-02+17%3A00%3A17">2006-06-02 17:00:17&lt;/a> и &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution?time=2006-06-02+17%3A24%3A08">2006-06-02 17:24:08&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">У&amp;nbsp;любого виджета есть атрибуты: текст у&amp;nbsp;кнопки,  длина у&amp;nbsp;списка.&lt;br />
Чтобы с&amp;nbsp;атрибутами можно было работать &amp;ndash; их&amp;nbsp;надо создать. Для&amp;nbsp;этого существует стандартное окружение &lt;strong>with-attributes&lt;/strong>.&lt;br />
В&amp;nbsp;качестве дополнительных параметров в&amp;nbsp;инструкцию document:envelop передаётся список имён атрибутов, которые мы&amp;nbsp;хотим определить.&lt;br />
; далее можно работать с&amp;nbsp;этими атрибутами.&lt;br />
Информация об&amp;nbsp;этих атрибутах сообщается графическому представлению виджета после того как&amp;nbsp;он&amp;nbsp;будет создан, то&amp;nbsp;есть это&amp;nbsp;есть не&amp;nbsp;что иное как&amp;nbsp;рычаги управления графическим представлением  виджета.&lt;br />
Поэтому существует особая разновидность атрибутов &amp;ndash; атрибуты инициализации, которые создаются в&amp;nbsp;окружении&lt;br />
;далее можно работать с&amp;nbsp;этими атрибутами&lt;br />
В&amp;nbsp;alterator существует  заранеее подготовленный документ со&amp;nbsp;списком распространённых атрибутов  &amp;ndash; /std/attributes, который можно включать в&amp;nbsp;качестве охватывающего окружения.&lt;br />
;далее можно работать со&amp;nbsp;стандартными предопределёнными атрибутами&lt;br />
После того как&amp;nbsp;атрибуты созданы, их&amp;nbsp;можно задавать. Принцип простой:&lt;br />
На&amp;nbsp;самом деле во&amp;nbsp;втором случае скобки можно опустить ибо&amp;nbsp;атрибут layout-policy знает, что&amp;nbsp;ему требуется обязательно не&amp;nbsp;одно, а&amp;nbsp;два значения,  атрибуту сообщается количество обязательных аргументов прямо при&amp;nbsp;его создании.&lt;br />
Вообще общее правило такое, скобки вокруг атрибутов стоит употреблять только для&amp;nbsp;повышения читаемости или&amp;nbsp;для передачи аргументов в&amp;nbsp;количестве большем чем&amp;nbsp;обязательное:&lt;br />
Каждый виджет ни&amp;nbsp;что иное как&amp;nbsp;контейнер свойств: атрибутов, callback'ов и&amp;nbsp;других вложенных виджетов.  &lt;br />
Каждый контейнер имеет минимум два&amp;nbsp;предопределённых атрибута: тип&amp;nbsp;( со&amp;nbsp;значением по-умолчанию &amp;#8220;root&amp;#8221;) и&amp;nbsp;указатель на&amp;nbsp;родительский контейнер. Те&amp;nbsp;самые type и&amp;nbsp;parent.&lt;br />
3. атрибуты по-умолчанию.&lt;br />
Существует документ с&amp;nbsp;предопределёнными традиционными атрибутами и&amp;nbsp;контейнерами &amp;ndash; &amp;laquo;/std/base&amp;raquo;. Поэтому предыдущий пример сокращается до:&lt;br />
Как&amp;nbsp;вы&amp;nbsp;должно быть заметили каждый виджет (точнее его&amp;nbsp;контейнерная фунция) принимает атрибуты по&amp;nbsp;тому же&amp;nbsp;принципу, что&amp;nbsp;и&amp;nbsp;основной документ, через пробел следуют серии &amp;laquo;имя значение&amp;raquo;.&lt;br />
В&amp;nbsp;реальной практике требуется ещё уметь передавать атрибутам функции &amp;ndash; обработчики событий (callbacks), а&amp;nbsp;также уметь именовать виджеты, чтобы к&amp;nbsp;ним можно было потом обратиться.&lt;br />
Обработчики событий &amp;ndash; тоже атрибуты, только их&amp;nbsp;значение задаётся специальным образом, а&amp;nbsp;именно с&amp;nbsp;помощью фунции make-callback.&lt;br />
Уж&amp;nbsp;коли можно писать обработчики событий, то&amp;nbsp;неплохо бы&amp;nbsp;было иметь возможность получать текущие значения атрибутов, а&amp;nbsp;также вызывать обработчики событий других виджетов.&lt;br />
Всё очень просто, если контейнерной функции передаётся атрибут с&amp;nbsp;количеством аргументов меньше обязательного (чаще всего без&amp;nbsp;аргументов), то&amp;nbsp;это воспринимается как&amp;nbsp;желание получить атрибуты.&lt;br />
Если в&amp;nbsp;процессе получения атрибута выясняется, что&amp;nbsp;это обработчик (callback), то&amp;nbsp;он немедленно исполняется.&lt;br />
;пример для&amp;nbsp;более сложных атрибутов&lt;br />
В&amp;nbsp;следующих разделах будут рассмотрены уже&amp;nbsp;более сложные техники работы с&amp;nbsp;документами, вполне возможно что&amp;nbsp;для работы вам&amp;nbsp;они и&amp;nbsp;не потребуются.&lt;a name="h5243-1">&lt;/a>&lt;h3>6. Документ как&amp;nbsp;совокупность компонент и&amp;nbsp;сложных виджетов&lt;/h3>
В&amp;nbsp;контейнере содержатся как&amp;nbsp;правило только базовые атрибуты и&amp;nbsp;для проведения более сложных модификаций приходится:&lt;br />
&lt;ol type="1">&lt;li> вытащить атрибут
&lt;/li>&lt;li> изменить атрибут
&lt;/li>&lt;li> сохранить атрибут&lt;/li>&lt;/ol>
Это&amp;nbsp;не&amp;nbsp;удобно, поэтому есть атрибуты второго уровня: они&amp;nbsp;перехватывают запрос на&amp;nbsp;изменение (или получение) данных и&amp;nbsp;проводят соответствующие модификации примитивных атрибутов. Вот&amp;nbsp;несколько примеров подобных аттрибутов:&lt;br />
&lt;ol type="1">&lt;li> count у&amp;nbsp;listbox &amp;ndash; получает все&amp;nbsp;строки (атрибут rows) и&amp;nbsp;подсчитывает  их&amp;nbsp;количество
&lt;/li>&lt;li> append-text у&amp;nbsp;textbox &amp;ndash; получает предыдущее значение текста, добавляет к&amp;nbsp;нему новый и&amp;nbsp;сохраняет результат.&lt;/li>&lt;/ol>
Все&amp;nbsp;аттрибуты второго уровня создаются при&amp;nbsp;помощи окружения with-meta-attributes.&lt;br />
(with-meta-attributes  ((count ((meta-get self widget)&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">(length (or (simple-get widget rows) '()) ))))&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
;далее можно работать с&amp;nbsp;аттрибутом count&lt;br />
Для&amp;nbsp;каждого аттрибута определяется&lt;br />
&lt;ol type="1">&lt;li> имя&amp;nbsp;&lt;/li>&lt;li> методы которые будут вызваны в&amp;nbsp;случае запросов на&amp;nbsp;получение (meta-get) и&amp;nbsp;изменение (meta-set)&lt;/li>&lt;/ol>
Каждому методу передаются два&amp;nbsp;параметра: он&amp;nbsp;сам (self) и&amp;nbsp;виджет к&amp;nbsp;которому он&amp;nbsp;принадлежит (widget).&lt;br />
Также предоставляются вспомогательные функции value-of для&amp;nbsp;выяснения своего содержимого и&amp;nbsp;simple-get, для&amp;nbsp;запросов к&amp;nbsp;атрибутам первого уровня.&lt;br />
Работа с&amp;nbsp;мета-аттрибутами уже&amp;nbsp;более сложная, требует более глубоких познаний в&amp;nbsp;alterator, поэтому подробно рассматриваться не&amp;nbsp;будет, желающие могут посмотреть предопределённые мета-аттрибуты в&amp;nbsp;файле &amp;laquo;/std/meta-atributes&amp;raquo;,  который также как&amp;nbsp;и&amp;nbsp;&amp;laquo;/std/attributes&amp;raquo; автоматически подгружается из&amp;nbsp;&amp;laquo;/std/base&amp;raquo;. &lt;br />
Ну&amp;nbsp;и наконец высший пилотаж &amp;ndash; если есть мета-аттрибуты, то&amp;nbsp;должны быть и&amp;nbsp;мета-виджеты.&lt;br />
Возможно вы&amp;nbsp;сделали какой-то хороший виджет и&amp;nbsp;решили использовать его&amp;nbsp;повторно в&amp;nbsp;других проектах. Причём оформить его&amp;nbsp;так, чтобы пользователи и&amp;nbsp;не догадались, что&amp;nbsp;это именно комбинированный виджет, а&amp;nbsp;не примитивный.  Такая возможность есть.&lt;br />
Что&amp;nbsp;виджет,  что&amp;nbsp;контейнер &amp;ndash; всё едино. Не&amp;nbsp;хватает только аттрибутов.&lt;br />
Существует ещё один тип&amp;nbsp;аттрибутов &amp;ndash; прокси-аттрибуты. Их&amp;nbsp;задача &amp;ndash; перехватывать запросы на&amp;nbsp;получение/изменение значения и&amp;nbsp;вызывать ваши фунции внутри виджета. Например, вы&amp;nbsp;сделали специальный виджет для&amp;nbsp;смены пароля.&lt;br />
Пользователь запрашивает у&amp;nbsp;вашего виджета password1, этот запрос перехватывается и&amp;nbsp;вызывается функция внутри вашего виджета, которая возращает содержимое определённого edit.&lt;br />
Итак, стало быть мета-виджет &amp;ndash; это&amp;nbsp;обычный документ, в&amp;nbsp;котором дополнительно определены виртуальные прокси аттрибуты. Последние создаются с&amp;nbsp;помощью окружения with-proxy-attributes.&lt;br />
А&amp;nbsp;вот и&amp;nbsp;пример с&amp;nbsp;паролями:&lt;br />
(document:insert &amp;laquo;/std/functions&amp;raquo;)&lt;br />
(document:envelop with-proxy-attributes&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">((password1 ((proxy-get self)&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent"> (p1 text))&lt;br />
((proxy-set self value)&lt;br />
 (p1 text value)))&lt;br />
&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div> (password2 ((proxy-get self)&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent"> (p2 text))&lt;br />
((proxy-set self value)&lt;br />
 (p2 text value)))))&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
(vertical-spacer)&lt;br />
(hbox&lt;br />
 layout-policy 100 -1&lt;br />
 (label &amp;#8220;First password:&amp;raquo; layout-policy 30 -1)&lt;br />
 (document:id p1 (edit &lt;!--notypo--> echo stars&lt;br />                       layout-policy -2 -1)))&lt;br />(hbox&lt;br /> layout-policy 100 -1&lt;br /> (label &amp;quot;Second password:&amp;quot; layout-policy 30 -1)&lt;br /> (document:id p2 (edit &lt;!--/notypo--> echo stars&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent"> layout-policy -2 -1)))&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
(vertical-spacer)&lt;br />
Если вы&amp;nbsp;захотите где-то поработать с&amp;nbsp;этим виджетом, то&amp;nbsp;надо всего-лишь до-определить недостающие атрибуты (именно обычные атрибуты, чтобы контейнер понял с&amp;nbsp;какой стороны к&amp;nbsp;нему обращаются) и&amp;nbsp;всё ... дальше работать как&amp;nbsp;обычно.&lt;br />
(document:envelop with-container-presentations&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">'/samples/presentation2 )&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
(document:envelop with-attributes (password1 password2))&lt;br />
(groupbox &amp;#8220;Subwidget demo&amp;#8221;&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">layout-policy 100 100&lt;br />
(vbox layout-policy 100 100&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">children-align center&lt;br />
(document:id info&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent"> (label &amp;#8220;Passwords here...&amp;#8221;))&lt;br />
&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>(document:id box&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent"> (password-box layout-policy 70 50&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent"> password1 &amp;#8220;123&amp;#8221;&lt;br />
 password2 &amp;#8220;1234&amp;#8221;&lt;br />
 ))&lt;br />
&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>(button &amp;#8220;Get passwords...&amp;#8221;&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">(when clicked&lt;br />
&lt;div class="indent">(info text&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">(string-append &amp;#8220; 1:&amp;raquo;&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent"> (sure-string (box password1))&lt;br />
 &amp;#8220; 2:&amp;raquo;&lt;br />
 (sure-string (box password2))))))&lt;br />
&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>(button &amp;#8220;Reset passwords...&amp;#8221;&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">(when clicked&lt;br />
&lt;div class="indent">(box password1 &amp;#8220;zzzz&amp;#8221;&lt;br />
&lt;div class="indent">&lt;div class="indent"> password2 &amp;#8220;q&amp;#8221;)))))&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">У&amp;nbsp;любого виджета есть аттрибуты: текст у&amp;nbsp;кнопки,  длина у&amp;nbsp;списка.&lt;br />
Чтобы с&amp;nbsp;аттрибутами можно было работать &amp;ndash; их&amp;nbsp;надо создать. Для&amp;nbsp;этого существует стандартное окружение &lt;strong>with-attributes&lt;/strong>.&lt;br />
В&amp;nbsp;качестве дополнительных параметров в&amp;nbsp;инструкцию document:envelop передаётся список имён аттрибутов, которые мы&amp;nbsp;хотим определить.&lt;br />
; далее можно работать с&amp;nbsp;этими аттрибутами.&lt;br />
Информация об&amp;nbsp;этих аттрибутах сообщается графическому представлению виджета после того как&amp;nbsp;он&amp;nbsp;будет создан, то&amp;nbsp;есть это&amp;nbsp;есть не&amp;nbsp;что иное как&amp;nbsp;рычаги управления графическим представлением  виджета.&lt;br />
Поэтому существует особая разновидность аттрибутов &amp;ndash; аттрибуты инициализации, которые создаются в&amp;nbsp;окружении&lt;br />
;далее можно работать с&amp;nbsp;этими аттрибутами&lt;br />
В&amp;nbsp;alterator существует  заранеее подготовленный документ со&amp;nbsp;списком распространённых аттрибутов  &amp;ndash; /std/attributes, который можно включать в&amp;nbsp;качестве охватывающего окружения.&lt;br />
;далее можно работать со&amp;nbsp;стандартными предопределёнными аттрибутами&lt;br />
После того как&amp;nbsp;аттрибуты созданы, их&amp;nbsp;можно задавать. Принцип простой:&lt;br />
На&amp;nbsp;самом деле во&amp;nbsp;втором случае скобки можно опустить ибо&amp;nbsp;аттрибут layout-policy знает, что&amp;nbsp;ему требуется обязательно не&amp;nbsp;одно, а&amp;nbsp;два значения,  аттрибуту сообщается количество обязательных аргументов прямо при&amp;nbsp;его создании.&lt;br />
Вообще общее правило такое, скобки вокруг аттрибутов стоит употреблять только для&amp;nbsp;повышения читаемости или&amp;nbsp;для передачи аргументов в&amp;nbsp;количестве большем чем&amp;nbsp;обязательное:&lt;br />
Каждый виджет ни&amp;nbsp;что иное как&amp;nbsp;контейнер свойств: аттрибутов, callback'ов и&amp;nbsp;других вложенных виджетов.  &lt;br />
Каждый контейнер имеет минимум два&amp;nbsp;предопределённых аттрибута: тип&amp;nbsp;( со&amp;nbsp;значением по-умолчанию &amp;#8220;root&amp;#8221;) и&amp;nbsp;указатель на&amp;nbsp;родительский контейнер. Те&amp;nbsp;самые type и&amp;nbsp;parent.&lt;br />
3. Аттрибуты по-умолчанию.&lt;br />
Существует документ с&amp;nbsp;предопределёнными традиционными аттрибутами и&amp;nbsp;контейнерами &amp;ndash; &amp;laquo;/std/base&amp;raquo;. Поэтому предыдущий пример сокращается до:&lt;br />
Как&amp;nbsp;вы&amp;nbsp;должно быть заметили каждый виджет (точнее его&amp;nbsp;контейнерная фунция) принимает аттрибуты по&amp;nbsp;тому же&amp;nbsp;принципу, что&amp;nbsp;и&amp;nbsp;основной документ, через пробел следуют серии &amp;laquo;имя значение&amp;raquo;.&lt;br />
В&amp;nbsp;реальной практике требуется ещё уметь передавать аттрибутам функции &amp;ndash; обработчики событий (callbacks), а&amp;nbsp;также уметь именовать виджеты, чтобы к&amp;nbsp;ним можно было потом обратиться.&lt;br />
Обработчики событий &amp;ndash; тоже аттрибуты, только их&amp;nbsp;значение задаётся специальным образом, а&amp;nbsp;именно с&amp;nbsp;помощью фунции make-callback.&lt;br />
Уж&amp;nbsp;коли можно писать обработчики событий, то&amp;nbsp;неплохо бы&amp;nbsp;было иметь возможность получать текущие значения аттрибутов, а&amp;nbsp;также вызывать обработчики событий других виджетов.&lt;br />
Всё очень просто, если контейнерной функции передаётся аттрибут с&amp;nbsp;количеством аргументов меньше обязательного (чаще всего без&amp;nbsp;аргументов), то&amp;nbsp;это воспринимается как&amp;nbsp;желание получить аттрибуты.&lt;br />
Если в&amp;nbsp;процессе получения аттрибута выясняется, что&amp;nbsp;это обработчик (callback), то&amp;nbsp;он немедленно исполняется.&lt;br />
;пример для&amp;nbsp;более сложных аттрибутов&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2006-06-02 16:38:19</title>
<link>http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution/show?time=2006-06-02+16%3A38%3A19</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution&amp;" class="">/Alt&amp;nbsp;Linux&amp;nbsp;/&amp;nbsp;Sisyphus&amp;nbsp;/&amp;nbsp;Alterator&amp;nbsp;/&amp;nbsp;evolution&lt;/a> за &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution?time=2006-06-02+16%3A38%3A19">2006-06-02 16:38:19&lt;/a> и &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution?time=2006-06-02+17%3A00%3A17">2006-06-02 17:00:17&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">Имея вспомогательные функции для&amp;nbsp;работы с&amp;nbsp;контейнерами можно объединять целлые россыпи виджетов:&lt;br />
(docunment:surround &amp;laquo;/std/base&amp;raquo;)&lt;br />
(vbox (label &amp;#8220;text&amp;#8221;)&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">(button &amp;#8220;text&amp;#8221; height 20)&lt;br />
(hbox (label &amp;#8220;text&amp;#8221; ) &lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">(checkbox &amp;#8220;text&amp;#8221; state #t)))&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
Как&amp;nbsp;вы&amp;nbsp;должно быть заметили каждый виджет (точнее его&amp;nbsp;контейнерная фунция) принимает аттрибуты по&amp;nbsp;тому же&amp;nbsp;принципу, что&amp;nbsp;и&amp;nbsp;основной документ, через пробел следуют серии &amp;laquo;имя значение&amp;raquo;.&lt;a name="h5243-1">&lt;/a>&lt;h3>5. Документ как&amp;nbsp;совокупность виджетов&lt;/h3>
В&amp;nbsp;реальной практике требуется ещё уметь передавать аттрибутам функции &amp;ndash; обработчики событий (callbacks), а&amp;nbsp;также уметь именовать виджеты, чтобы к&amp;nbsp;ним можно было потом обратиться.&lt;br />
Именование происходит с&amp;nbsp;помощью конструкции &lt;strong>(document:id &amp;lt;имя&amp;gt; &amp;lt;виджет&amp;gt;)&lt;/strong> .&lt;br />
(document:surrounf &amp;laquo;/std/base&amp;raquo;)&lt;br />
(document:id my-button (button &amp;#8220;text&amp;#8221;))&lt;br />
В&amp;nbsp;этом примере my-button становится синонимом конкретной контейнерной функции и&amp;nbsp;все обращения к&amp;nbsp;ней буду равносильны обращениям к&amp;nbsp;конкретному виджету&lt;br />
(my-button height 100 width 100) ; зададим высоту и&amp;nbsp;ширину для&amp;nbsp;той самой кнопки&lt;br />
Обработчики событий &amp;ndash; тоже аттрибуты, только их&amp;nbsp;значение задаётся специальным образом, а&amp;nbsp;именно с&amp;nbsp;помощью фунции make-callback.&lt;br />
(button &amp;#8220;text&amp;#8221; &lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">clicked (make-callback (write &amp;#8220;I'm clicked&amp;#8221;)))&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
Для&amp;nbsp;более удобной работы существует специальная конструкция when. Предыдущая конструкция равносильна:&lt;br />
(button &amp;#8220;text&amp;#8221;&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent"> (when clicked&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">(write &amp;#8220;I'm clicked&amp;#8221;)))&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
Уж&amp;nbsp;коли можно писать обработчики событий, то&amp;nbsp;неплохо бы&amp;nbsp;было иметь возможность получать текущие значения аттрибутов, а&amp;nbsp;также вызывать обработчики событий других виджетов.&lt;br />
Всё очень просто, если контейнерной функции передаётся аттрибут с&amp;nbsp;количеством аргументов меньше обязательного (чаще всего без&amp;nbsp;аргументов), то&amp;nbsp;это воспринимается как&amp;nbsp;желание получить аттрибуты.&lt;br />
Если в&amp;nbsp;процессе получения аттрибута выясняется, что&amp;nbsp;это обработчик (callback), то&amp;nbsp;он немедленно исполняется.&lt;br />
(my-button text) ; вернуть текст кнопки&lt;br />
(my-button clicked) ; &amp;laquo;щелкнули&amp;raquo; по&amp;nbsp;кнопке программно&lt;br />
;пример для&amp;nbsp;более сложных аттрибутов&lt;br />
(my-listbox row-item-text 2 &amp;#8220;aaa&amp;#8221;) ; выставим текст второй строки в&amp;nbsp;&amp;#8220;aaa&amp;#8221;&lt;br />
(my-listbox row-item-text 2) ; получим текст второй строки&lt;br />
Вот&amp;nbsp;пример диалога, когда из&amp;nbsp;строки ввода считывается её содержимое и&amp;nbsp;передаётся в&amp;nbsp;метку&lt;br />
(document:id my-label &amp;#8220;default-value&amp;#8221;)&lt;br />
(document:id my-edit (edit &amp;#8220;default-value&amp;#8221;))&lt;br />
(button &amp;#8220;Change&amp;#8221;&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent"> (when clicked&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">(my-label text (my-edit text))))&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2006-06-02 16:17:19</title>
<link>http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution/show?time=2006-06-02+16%3A17%3A19</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution&amp;" class="">/Alt&amp;nbsp;Linux&amp;nbsp;/&amp;nbsp;Sisyphus&amp;nbsp;/&amp;nbsp;Alterator&amp;nbsp;/&amp;nbsp;evolution&lt;/a> за &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution?time=2006-06-02+16%3A17%3A19">2006-06-02 16:17:19&lt;/a> и &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution?time=2006-06-02+16%3A38%3A19">2006-06-02 16:38:19&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">Вообще общее правило такое, скобки вокруг аттрибутов стоит употреблять только для&amp;nbsp;повышения читаемости или&amp;nbsp;для передачи аргументов в&amp;nbsp;количестве большем чем&amp;nbsp;обязательное:&lt;a name="h5243-1">&lt;/a>&lt;h3>4. Документ как&amp;nbsp;контейнер&lt;/h3>
Каждый виджет ни&amp;nbsp;что иное как&amp;nbsp;контейнер свойств: аттрибутов, callback'ов и&amp;nbsp;других вложенных виджетов.  &lt;br />
Каждый контейнер имеет минимум два&amp;nbsp;предопределённых аттрибута: тип&amp;nbsp;( со&amp;nbsp;значением по-умолчанию &amp;#8220;root&amp;#8221;) и&amp;nbsp;указатель на&amp;nbsp;родительский контейнер. Те&amp;nbsp;самые type и&amp;nbsp;parent.&lt;br />
Чтобы отличать вложенные окружения от&amp;nbsp;полноценных виджетов, которые вставляются в&amp;nbsp;данный существует особая конструкция &amp;ndash; &lt;strong>(document:subdocument &amp;lt;идентификатор&amp;gt;)&lt;/strong>.&lt;br />
type &amp;#8220;groupbox&amp;#8221;&lt;br />
title &amp;#8220;some groupbox&amp;#8221;&lt;br />
(document:subdocument &amp;laquo;/other/widget&amp;raquo;) ; контейнер вставленный в&amp;nbsp;данный&lt;br />
Если мы&amp;nbsp;хотим удобно использовать какой-либо документ, его&amp;nbsp;стоит оформить как&amp;nbsp;контейнер.&lt;br />
Делается это&amp;nbsp;при помощи окружения with-container-presentations.&lt;br />
В&amp;nbsp;качестве параметров перечисляются:&lt;br />
1. Имя&amp;nbsp;контейнера, которым будем в&amp;nbsp;дальнейшем пользоваться&lt;br />
2. Идентификатор документа, в&amp;nbsp;котором содержится описание контейнера.&lt;br />
3. Аттрибуты по-умолчанию.&lt;br />
Первый параметр &amp;ndash; имя&amp;nbsp;функции на&amp;nbsp;языке scheme, которая будет обеспечивать удобную работу с&amp;nbsp;виджетом, а&amp;nbsp;третий &amp;ndash; небольшое упрощение жизни. Например, кнопка всегда создаётся с&amp;nbsp;каким-то текстом, поэтому гораздо удобнее писать&lt;br />
(button &amp;#8220;some-name&amp;#8221;) вместо (button text &amp;#8220;some-name&amp;#8221;)&lt;br />
(document:envelop with-container-presentations ( (label '/std/label text)&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent"> (button '/std/button text)&lt;br />
 (vbox '/std/vbox))&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
width 100&lt;br />
height 200&lt;br />
(label &amp;#8220;text&amp;#8221;)&lt;br />
(button &amp;#8220;text&amp;#8221;)&lt;br />
В&amp;nbsp;результате получаем документ заданной ширины и&amp;nbsp;высоты с&amp;nbsp;вставленными в&amp;nbsp;него кнопкой и&amp;nbsp;меткой.&lt;br />
Существует документ с&amp;nbsp;предопределёнными традиционными аттрибутами и&amp;nbsp;контейнерами &amp;ndash; &amp;laquo;/std/base&amp;raquo;. Поэтому предыдущий пример сокращается до:&lt;br />
(document:surround &amp;laquo;/std/base&amp;raquo;)&lt;br />
width 100 height 200&lt;br />
(label &amp;#8220;text&amp;#8221;)&lt;br />
(button &amp;#8220;text&amp;#8221;)&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">Вообще общее правило такое, скобки для&amp;nbsp;вокруг аттрибутов стоит употреблять только для&amp;nbsp;повышения читаемости или&amp;nbsp;для передачи аргументов больше чем&amp;nbsp;обязательное:&lt;a name="h5243-1">&lt;/a>&lt;h3>4. Документ как&amp;nbsp;совокупность виджетов &lt;/h3>
Если есть примитивы, то&amp;nbsp;хотелось бы&amp;nbsp;удобным образом работать с&amp;nbsp;ними и&amp;nbsp;дёргать за&amp;nbsp;рычаги-аттрибуты.&lt;br />
Сначала создадим примитив. В&amp;nbsp;терминологии alterator &amp;ndash; каждый документ &amp;ndash; контейнер с&amp;nbsp;аттрибутами.&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2006-06-02 16:15:42</title>
<link>http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution/show?time=2006-06-02+16%3A15%3A42</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution&amp;" class="">/Alt&amp;nbsp;Linux&amp;nbsp;/&amp;nbsp;Sisyphus&amp;nbsp;/&amp;nbsp;Alterator&amp;nbsp;/&amp;nbsp;evolution&lt;/a> за &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution?time=2006-06-02+16%3A15%3A42">2006-06-02 16:15:42&lt;/a> и &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution?time=2006-06-02+16%3A17%3A19">2006-06-02 16:17:19&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">(document:envelop with-init-attributes (parent type))&lt;br />
После того как&amp;nbsp;аттрибуты созданы, их&amp;nbsp;можно задавать. Принцип простой:&lt;br />
&amp;laquo;имя значение&amp;raquo; или&amp;nbsp;"(имя значение значение)"&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">(document:envelop with-init-attributes (type parent))&lt;br />
После как&amp;nbsp;аттрибуты созданы, их&amp;nbsp;можно задавать, принцип простой,&lt;br />
&amp;laquo;имя значение&amp;raquo;, или&amp;nbsp;"(имя значение значение)"&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2006-06-02 16:12:06</title>
<link>http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution/show?time=2006-06-02+16%3A12%3A06</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution&amp;" class="">/Alt&amp;nbsp;Linux&amp;nbsp;/&amp;nbsp;Sisyphus&amp;nbsp;/&amp;nbsp;Alterator&amp;nbsp;/&amp;nbsp;evolution&lt;/a> за &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution?time=2006-06-02+16%3A12%3A06">2006-06-02 16:12:06&lt;/a> и &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/evolution?time=2006-06-02+16%3A15%3A42">2006-06-02 16:15:42&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;a name="h5243-1">&lt;/a>&lt;h3>4. Документ как&amp;nbsp;совокупность виджетов &lt;/h3>
Если есть примитивы, то&amp;nbsp;хотелось бы&amp;nbsp;удобным образом работать с&amp;nbsp;ними и&amp;nbsp;дёргать за&amp;nbsp;рычаги-аттрибуты.&lt;br />
Сначала создадим примитив. В&amp;nbsp;терминологии alterator &amp;ndash; каждый документ &amp;ndash; контейнер с&amp;nbsp;аттрибутами.&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;a name="h5243-1">&lt;/a>&lt;h3>4. Документ как&amp;nbsp;совокупность виджетов&lt;/h3>&lt;/div>&lt;/div>
</description>
</item>
</channel>
</rss>
