Прошу прощения, что давно не писал сюда. Последнее время совсем его нет, да и эту заметку напишу для отмазки. Сегодня мы поговорим об отличном редакторе Notepad++, который хорошо подходит для того, чтобы быстренько можно было что то подправить. В отличие от громоздких сред, таких как Visual Studio, Zend Studio или NetBeans, Notepad++ почти мгновенно загрузится и оставит еще ресурсов для того, чтобы что то делать. Он поддерживает подсветку синтаксиса целой кучи языков, хорошо работает с памятью, да и вообще является отличным дополнение для F4 в TotalCommander.
На сколько я знаю, то никакой поддержки ZendFramework в Notepad++ нет. Но теперь, когда меня это немного напрягло, всем зендфреймворковцам будет море по колено.
Итак, что же я предпринял? А ничего сложного! Нет, я не организовал командную строку к zf.bat. Я просто немного расширил набор Api, который по мнению Notepad++ предоставляет PHP. Это не так трудно сделать и вам - нужно просто дополнить файл C:\Program Files\Notepad++\plugins\APIs\php.xml соответствующими описаниями. В данном случае я добавил туда описания всех классов текущего релиза ZendFramework (1.10.3). Может, кто-то сделал бы по другому, но я другого способа, кроме как просканить директорию ZendFramework/library/, так и не нашел.
Для этого, я накалякал кусок кода. Действия примерно такие:
- Определяем пути к php.xml файлу Notepad++ и к ZendFramework/library/
- Рекурсивно вытягиваем все *.php файлы из библиотеки ZendFramework формируя наименования классов
- Сортируем в алфавитном порядке и тупо валим в php.xml
- Перезагружаем Notepad++
Сам php.xml я не сортировал, так как не хотел заморачиваться с самим форматом, поэтому всё обошлось грубой силой. Ну, вот и сам код:
Listing №1 (PHP)
<?php
error_reporting(E_ALL);
$pathToNotepadPhpXml = 'путь к /Notepad++/plugins/APIs/php.xml';
$pathZFLibrary = 'путь к /ZendFramework/library/';
function createZFClassNames($dirPath)
{
static $classNames = array();
$structure = glob("$dirPath/*");
foreach ($structure as $element) {
if (!is_dir($element)) {
$name = str_replace('/', '_', $element);
if(FALSE !== strpos($name, '.php')) {
$classNames[] = $name;
}
}
else {
createZFClassNames($element);
}
}
return $classNames;
}
function processNames(&$item, $key, $delCount)
{
$item = substr($item, 0, strlen($item) - 4);
$item = substr($item, $delCount);
$item = "\t\t" . '<KeyWord name="' . $item . '" />' . "\n";
}
$delCount = strlen($pathZFLibrary);
$startPath = rtrim($pathZFLibrary, "/");
$zfClassNames = createZFClassNames($startPath);
sort($zfClassNames);
array_walk($zfClassNames, 'processNames', $delCount);
$content = file_get_contents($pathToNotepadPhpXml);
$pos = stripos($content, '</AutoComplete>') - 1;
file_put_contents($pathToNotepadPhpXml, substr($content, 0, $pos) . join('', $zfClassNames) . substr($content, $pos));
Если у кого-то работать не будет - не расстраивайтесь. Еще не забудьте перед всем этим сохранить копию php.xml на всякий случай. До новых встреч!
кодерам на радость