<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1876062387820892738</id><updated>2011-08-24T08:39:24.969-07:00</updated><title type='text'>WEB - велотренажер</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sergekoriakin.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1876062387820892738/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://sergekoriakin.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>ksnk</name><uri>http://www.blogger.com/profile/11857443405939945552</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>1</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1876062387820892738.post-6343691883703367164</id><published>2010-06-22T01:07:00.001-07:00</published><updated>2010-07-02T05:20:23.231-07:00</updated><title type='text'>Условная компиляция в PHP. Фантастику в жизнь</title><content type='html'>&lt;h1&gt;Введение&lt;/h1&gt;&lt;p &gt;Казалось бы, зачем благородному дону условная компиляция в php? Однако, при разработке достаточно большого web-приложения на php(+html+css+javascript+…) возникают потребности слегка модифицировать код для того или иного сервера, той или иной среды. Изредка посещают крамольные мысли – сделать код одновременно для php4 и для php5. Иногда, к примеру, хочется вставить точные размеры фоновой картинки как размеры некоей области в разметке и этими размерами загадить несколько файлов. Для отладки приложения на локальной машине требуются один комплект настроек, а для выкладывания его на целевой хостинг – другой. Как правило, для таких целей используются файлы конфигурации, в которые, с  соблюдением определенной ловкости рук, упакованы все кардинальные отличия проекта, в зависимости от погодных условий.&lt;/p&gt;&lt;p&gt;Однако, существует и другой путь. Традиционные системы программирования имеют этап, называемый компиляцией. &lt;span style="font-family:wingdings;"&gt;J&lt;/span&gt; Как правило, в компиляторе одновременно собирается сразу несколько «целей» проекта, для отладки, для выкладки на целевую платформу. Если внести в процесс подготовки web-проекта этот этап, условная компиляция проекта обретет смысл и начнет приносить пользу. &lt;/p&gt;&lt;p&gt;Итак по условию задачи, наш потенциальный web-программист знает php. Так что будет достаточно здраво, если для нужд препроцессора мы постараемся обойтись именно этим языком, тем более, что он и задумывался (если судить по одному из вариантов расшифровки PHP) как в меру универсальный язык препроцессора. &lt;/p&gt;&lt;p&gt;По форме -  препроцессор будет представлять собой отдельный php-скрипт, который мы с присущей нам фантазией назовем preprocessor.php. Собственно вызов препроцессора будет вызовом php в режиме CLI и передача ему нужных параметров.&lt;/p&gt;&lt;p&gt;Итак, постановим что инструкции препроцессора будут такими же инструкциями на PHP, как и обычные, но обрамленные в  asp-теги и оживим их с помощью обычной замены asp тегов на обычные и наоборот:&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#0000ff;"&gt;&lt;span style="font-size:85%;"&gt;function &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;evalfile(&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#660000;"&gt;&lt;span style="font-size:85%;"&gt;$src&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#660000;"&gt;&lt;span style="font-size:85%;"&gt;$dst&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008200;"&gt;&lt;span style="font-size:85%;"&gt;''&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;){&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;      &lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#0000ff;"&gt;&lt;span style="font-size:85%;"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;(!is_file(&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#660000;"&gt;&lt;span style="font-size:85%;"&gt;$src&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;)) &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#0000ff;"&gt;&lt;span style="font-size:85%;"&gt;return&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;      &lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#660000;"&gt;&lt;span style="font-size:85%;"&gt;$s&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;=file_get_contents(&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#660000;"&gt;&lt;span style="font-size:85%;"&gt;$src&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;      &lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#660000;"&gt;&lt;span style="font-size:85%;"&gt;$s&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;=str_replace(&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;            &lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#0000ff;"&gt;&lt;span style="font-size:85%;"&gt;array&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008200;"&gt;&lt;span style="font-size:85%;"&gt;'&amp;lt;?'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008200;"&gt;&lt;span style="font-size:85%;"&gt;'?&amp;gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008200;"&gt;&lt;span style="font-size:85%;"&gt;'&amp;lt;%'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008200;"&gt;&lt;span style="font-size:85%;"&gt;'%&amp;gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;),&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;            &lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#0000ff;"&gt;&lt;span style="font-size:85%;"&gt;array&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008200;"&gt;&lt;span style="font-size:85%;"&gt;'&amp;lt;@'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008200;"&gt;&lt;span style="font-size:85%;"&gt;'@&amp;gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008200;"&gt;&lt;span style="font-size:85%;"&gt;'&amp;lt;?php'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008200;"&gt;&lt;span style="font-size:85%;"&gt;'?'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008200;"&gt;&lt;span style="font-size:85%;"&gt;'&amp;gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;),&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#660000;"&gt;&lt;span style="font-size:85%;"&gt;$s&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;      &lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;      ob_start();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;      &lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#0000ff;"&gt;&lt;span style="font-size:85%;"&gt;eval&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008200;"&gt;&lt;span style="font-size:85%;"&gt;'?'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008200;"&gt;&lt;span style="font-size:85%;"&gt;'&amp;gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#660000;"&gt;&lt;span style="font-size:85%;"&gt;$s&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;      &lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#660000;"&gt;&lt;span style="font-size:85%;"&gt;$s&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;=ob_get_contents();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;      &lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#660000;"&gt;&lt;span style="font-size:85%;"&gt;$s&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;=str_replace(&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;            &lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#0000ff;"&gt;&lt;span style="font-size:85%;"&gt;array&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008200;"&gt;&lt;span style="font-size:85%;"&gt;'&amp;lt;@'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008200;"&gt;&lt;span style="font-size:85%;"&gt;'@&amp;gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;),&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;            &lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#0000ff;"&gt;&lt;span style="font-size:85%;"&gt;array&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008200;"&gt;&lt;span style="font-size:85%;"&gt;'&amp;lt;?'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008200;"&gt;&lt;span style="font-size:85%;"&gt;'?'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008200;"&gt;&lt;span style="font-size:85%;"&gt;'&amp;gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;),&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#660000;"&gt;&lt;span style="font-size:85%;"&gt;$s&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;      &lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;      ob_end_clean();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;      &lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#0000ff;"&gt;&lt;span style="font-size:85%;"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;(!&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#0000ff;"&gt;&lt;span style="font-size:85%;"&gt;empty&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#660000;"&gt;&lt;span style="font-size:85%;"&gt;$dst&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;)){&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;            file_put_contents(&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#660000;"&gt;&lt;span style="font-size:85%;"&gt;$dst&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#660000;"&gt;&lt;span style="font-size:85%;"&gt;$s&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;      &lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Функция получает имя файла, который следует «исполнить», производит в нем подмену обычных тегов PHP на затычки, а asp-like теги на нормальные PHP-теги. После чего - исполняет файл естественным образом и возвращает теги к нормальному виду. Если указан второй параметр функции - результат выполнения записывается в файл с этим именем. К сожалению, эта функция не более чем иллюстрация этого процесса. На самом деле выполнение файла препроцессором сделано несколько сложнее. Процесс выполнения разбит на 3 этапа – подготовка файла, собственно eval и пост-обработка результата с сохранением его в файле. Все эти этапы заключены в цикл, который перебирает все определенные пары файлов (источник, назначение, операция). Сложность нужна, чтобы все eval’ы выполнялись в теле одной функции и могли, таким образом, пользоваться определяемыми друг другом переменными.&lt;/p&gt;&lt;p&gt;При этом совершенно бесплатно препроцессор приобретает все явные возможности программирования на PHP, которых так не хватает другим языкам препроцессинга. При этом, на этапе компиляции можно забыть об очень уж эффективной реализации такой работы, так как, по большому счету, без разницы – будет проект компилироваться 1 секунду или 2. &lt;/p&gt;&lt;h2&gt;Ближе к телу&lt;/h2&gt;&lt;p&gt;Чтобы мы могли достаточно безболезненно «компилировать» в меру большой проект, нам нужно, чтобы контекст выполнения (комплект констант и функций) препроцессором всех файлов проекта был примерно одинаков. Можно, конечно, в каждый файл добавить некий заголовочный комплект инклудов ( как в С ), который будет выравнивать окружение, но это предполагает модификацию всех файлов проекта. А можно описать все файлы проекта в отдельном проектном файле и «выполнить» их всех  в одном цикле, чтобы можно было использовать функции и константы во всех файлах проекта одновременно. Кроме явного выигрыша по времени компиляции, такой подход позволяет не менять по мелочи все файлы, и вставить препроцессор на ходу в какой-то уже работающий проект в самом разгаре его разработки. Достаточно описать конфигурацию, в которой мы расскажем препроцессору что нужно делать, какие файлы и куда и как нужно транслировать. Руководствуясь этим файлом, препроцессор откомпилирует все и разместит в нужном месте. &lt;/p&gt;&lt;p&gt;При вызове препроцессора мы сможем определять значения некоторых переменных через дополнительные параметры вызова скрипта, например так&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#808080;"&gt;&lt;span style="font-size:85%;"&gt;php -f preprocessor.php /Ddst=build/release config.xml&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Файл описания - XML файл. Вот его пример и описание:&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-image:initial;background-repeat:initial initial"&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="background-;color:#c0c0c0;"&gt;&lt;span style="font-size:85%;"&gt;config&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;      &lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;var name=”model”&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;AeroWindow&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt; &amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;var&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;      &lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;files&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;            &lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;file&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;rev.tmp&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;file&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;            &lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;file&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;AeroWindow/AeroWindow.tpl.html&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;file&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;            &lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;file&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;plugins/auth/auth_ajax.tpl.php&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;file&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;      &lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;files&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f5fbf;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;!-- Aerowindow color scheme --&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;      &lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;files&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="font-size:85%;"&gt; &lt;span style="color:#7f007f;"&gt;dir&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;i&gt;&lt;span style="color:#2a00ff;"&gt;"AeroWindow"&lt;/span&gt;&lt;/i&gt; &lt;span style="color:#7f007f;"&gt;dstdir&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;i&gt;&lt;span style="color:#2a00ff;"&gt;"$dst"&lt;/span&gt;&lt;/i&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;            &lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;file&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;js/*.js&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;file&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;            &lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;file&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;css/*.*&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;file&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;            &lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;copy&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;images/*.*&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;copy&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;            &lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;copy&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;images/WindowsAeroStyle/active/*.*&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;copy&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;            &lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;copy&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;images/WindowsAeroStyle/hover/*.*&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;copy&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;            &lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;copy&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;images/WindowsAeroStyle/inactive/*.*&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;copy&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;      &lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;files&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-image:initial;background-repeat:initial initial"&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="background-;color:#c0c0c0;"&gt;&lt;span style="font-size:85%;"&gt;config&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Config – объемлющий контейнер для файла.&lt;/p&gt;&lt;p&gt;VAR – определение константы, которой можно пользоваться внутри любого файла в теле кода препроцессора.&lt;/p&gt;&lt;p&gt;Переменную $dst предполагаем определенной через дополнительный параметр при вызове скрипта&lt;/p&gt;&lt;p&gt;FILES – представляет собой контейнер для хранения параметров, общих для группы файлов&lt;/p&gt;&lt;p class="MsoListParagraphCxSpFirst"&gt;&lt;span style="font-family:symbol;"&gt;·         &lt;/span&gt;destdir – каталог, в который будет копироваться результат работы препроцессора&lt;/p&gt;&lt;p class="MsoListParagraphCxSpLast"&gt;&lt;span style="font-family:symbol;"&gt;·         &lt;/span&gt;dir – каталог, из которого будут браться исходные тексты&lt;/p&gt;&lt;p&gt;FILE – контейнер файлов. Его значение – маска файлов с каталогом. Параметры можно указывать  такие же как и в FILES. Все файлы, попавшие в этот контейнер будут обработаны препроцессором&lt;/p&gt;&lt;p&gt;COPY – контейнер файлов. Его значение – маска файлов с каталогом. Параметры можно указывать  такие же как и в FILES. Все файлы, попавшие в этот контейнер будут просто скопированы в нужное место.&lt;/p&gt;&lt;p&gt;Так , например, первая секция FILES определяет файлы, которые не будут реально скопированы (парамер dst опущен). Они просто будут обработаны скриптом и содержащиеся в них константы и функции можно будет использовать в остальных файлах проекта. Последняя секция примера, начиная с комментария «AeroWindow color cheme», определит нам что :&lt;/p&gt;&lt;p class="MsoListParagraphCxSpFirst"&gt;&lt;span style="font-family:symbol;"&gt;·         &lt;/span&gt;все javascript-файлы, находящиеся в каталоге AeroWindow/js будут обработаны препроцессором и скопированы в каталог $dst/js&lt;/p&gt;&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-family:symbol;"&gt;·         &lt;/span&gt;все файлы из каталога AeroWindow/css будут обработаны препроцессором и скопированы в каталог $dst/css&lt;/p&gt;&lt;p class="MsoListParagraphCxSpLast"&gt;&lt;span style="font-family:symbol;"&gt;·         &lt;/span&gt;все файлы из каталога images и 4-х подкаталогов будут скопированы в соответствующие каталоги в $dst&lt;/p&gt;&lt;h2&gt;Макро-ООП в действии.&lt;/h2&gt;&lt;p&gt;Отвлечемся теперь от всей этой мути и представим себе работающий web-проект. Вообразим себе, что начальнику проекта приспичило вставить в проект фенечку, использующую диалоговое окошко, описанное в некоем плагине. Это плагин предполагает, что будут добавлены некие стили в файл стилей, добавлена некая разметка в html файл, добавлены некие файлы в каталог проекта и изменен один или несколько  javaScript файлов проекта. Если наша фенечка использует ajax, при этом возникнет желание поменять и php-файлы. Изменения каждый раз невелики, однако они размазаны по большому количеству файлов, уследить за ними даже с использованием системы контроля версий может быть непросто. Особенно страшно становится, когда начальник в творческих муках перебирает многие варианты таких фенечек от разных производителей.&lt;/p&gt;&lt;p&gt;Как наш новоявленный компилятор может облегчить нашу судьбу в этом случае? Легко!&lt;/p&gt;&lt;p&gt;Мысленно представим себе куда и как мы будем вставлять компоненты фенечки. В функцию, вызывающуюся в методе onload документа будет вставлен код инициализации фенечки. Вставим туда код &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f5f;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;% insert_point ('js_onload'); %&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;В том-же файле нам нужно описать поведение фенечки. Все это мы запихаем в область файла, в которой описываются все такие функции общего назначения&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f5f;"&gt;&lt;span style="font-size:85%;"&gt;//&amp;lt;% &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f5f;"&gt;&lt;span style="font-size:85%;"&gt;insert&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f5f;"&gt;&lt;span style="font-size:85%;"&gt;_&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f5f;"&gt;&lt;span style="font-size:85%;"&gt;point&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f5f;"&gt;&lt;span style="font-size:85%;"&gt; ('&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f5f;"&gt;&lt;span style="font-size:85%;"&gt;js&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f5f;"&gt;&lt;span style="font-size:85%;"&gt;_&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f5f;"&gt;&lt;span style="font-size:85%;"&gt;body&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f5f;"&gt;&lt;span style="font-size:85%;"&gt;'); %&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;В css файл мы будем добавлять некие стили. Туда запихаем:&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f5f;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;% insert_point ('css_styles'); %&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;В html шаблон окна приложения нужно вставить заготовку диалогового окна. Туда поместим&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f5f;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;% &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f5f;"&gt;&lt;span style="font-size:85%;"&gt;insert&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f5f;"&gt;&lt;span style="font-size:85%;"&gt;_&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f5f;"&gt;&lt;span style="font-size:85%;"&gt;point&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f5f;"&gt;&lt;span style="font-size:85%;"&gt; ('&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f5f;"&gt;&lt;span style="font-size:85%;"&gt;html&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f5f;"&gt;&lt;span style="font-size:85%;"&gt;_&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f5f;"&gt;&lt;span style="font-size:85%;"&gt;body&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f5f;"&gt;&lt;span style="font-size:85%;"&gt;'); %&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Вот, вроде и все, если про ajax пока забыть…&lt;/p&gt;&lt;p&gt;А теперь, со всем этим хозяйством начнем взлетать. Соединим все конструктивные части фенечки в одном файле, однако разделим эти конструктивные части конструкциями point_start и point_finish.&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;html&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;head&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;meta&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="font-size:85%;"&gt; &lt;span style="color:#7f007f;"&gt;http-equiv&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;i&gt;&lt;span style="color:#2a00ff;"&gt;"Content-Type"&lt;/span&gt;&lt;/i&gt; &lt;span style="color:#7f007f;"&gt;content&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;i&gt;&lt;span style="color:#2a00ff;"&gt;"text/html; charset=UTF-8"&lt;/span&gt;&lt;/i&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;title&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;fenechka module&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;title&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;script type=”text/javascript”&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;% point_start('js_body'); %&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;function Fenechka(){&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;% point_start('js_onload'); %&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;Fenechka();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;% point_finish(); %&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;style type=”text/css”&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;% point_start('css_style'); %&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;#fenechka { visible:none;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;% point_finish(); %&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;head&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;body&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;% point_start('html_body'); %&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;div&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="font-size:85%;"&gt; &lt;span style="color:#7f007f;"&gt;id&lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;i&gt;&lt;span style="color:#2a00ff;"&gt;"fenechka"&lt;/span&gt;&lt;/i&gt;&lt;span style="color:#008080;"&gt;&amp;gt;Hello world!&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;% point_finish(); %&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;div&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;body&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;html&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;При некоторой ловкости рук, файл с модулем может одновременно оказаться простой тестовой площадкой для проверки фенечки в отдельном окне. Впрочем, не в этом счастье.&lt;/p&gt;&lt;p&gt;Добавим строчку &lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;file&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;fenechka&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-size:85%;"&gt;html&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span style="font-size:85%;"&gt;file&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:'courier new';"&gt;&lt;span style="color:#008080;"&gt;&lt;span style="font-size:85%;"&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;в первый блок (без сохранения результатов) нашего файла конфигурации, откомпилируем проект  и незамедлительно, после исправления совсем уж явных опечаток, случится чудо! Все необходимые части нашего нового функционала вставятся в правильные места нашего проекта. Если по какой-то причине использование фенечки не понравится заказчикам, чтобы убрать ее из проекта, достаточно выкинуть одну строку конфигурации. &lt;/p&gt;&lt;p&gt;Реализация механизма находится в файле point.ext.php исходника.&lt;/p&gt;&lt;a href="http://docs.google.com/leaf?id=0B3S4NM6zRjX2NThjY2UwNmMtZjRhNS00NjU5LThmZjYtNWZlMWVkYWM4Mzk4&amp;hl=en"&gt;исходники препроцессора&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;про файлы исходника.&lt;/h2&gt;&lt;p&gt;preprocessor.php - главный файл, анализ командной строки, чтение файла конфигурации и вызов препроцессора&lt;/p&gt;&lt;p&gt;preprocessor.class.php - класс с методами препроцессора - сборка и хранение пар Source-Destination, исполнение файла препроцессором, собственно чтение и аналих файла конфигурации.&lt;/p&gt;&lt;p&gt;point.ext.php - набор функций, для реализации MACRO-OOP. &lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1876062387820892738-6343691883703367164?l=sergekoriakin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sergekoriakin.blogspot.com/feeds/6343691883703367164/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://sergekoriakin.blogspot.com/2010/06/php.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1876062387820892738/posts/default/6343691883703367164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1876062387820892738/posts/default/6343691883703367164'/><link rel='alternate' type='text/html' href='http://sergekoriakin.blogspot.com/2010/06/php.html' title='Условная компиляция в PHP. Фантастику в жизнь'/><author><name>ksnk</name><uri>http://www.blogger.com/profile/11857443405939945552</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry></feed>
