ITDumka
Поддержка ZendFramework в Notepad++

Прошу прощения, что давно не писал сюда. Последнее время совсем его нет, да и эту заметку напишу для отмазки. Сегодня мы поговорим об отличном редакторе 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/, так и не нашел.

Для этого, я накалякал кусок кода. Действия примерно такие:

  1. Определяем пути к php.xml файлу Notepad++ и к ZendFramework/library/
  2. Рекурсивно вытягиваем все *.php файлы из библиотеки ZendFramework формируя наименования классов
  3. Сортируем в алфавитном порядке и тупо валим в php.xml
  4. Перезагружаем Notepad++

Сам php.xml я не сортировал, так как не хотел заморачиваться с самим форматом, поэтому всё обошлось грубой силой. Ну, вот и сам код:


Listing №1 (PHP)
  1. <?php
  2. error_reporting(E_ALL);
  3.  
  4. $pathToNotepadPhpXml = 'путь к /Notepad++/plugins/APIs/php.xml';
  5. $pathZFLibrary = 'путь к /ZendFramework/library/';
  6.  
  7. function createZFClassNames($dirPath)
  8. {
  9.   static $classNames = array();
  10.  
  11.   $structure = glob("$dirPath/*");
  12.  
  13.   foreach ($structure as $element) {
  14.     if (!is_dir($element)) {
  15.       $name = str_replace('/', '_', $element);
  16.       if(FALSE !== strpos($name, '.php')) {
  17.         $classNames[] = $name;
  18.       }
  19.     }
  20.     else {
  21.       createZFClassNames($element);
  22.     }
  23.   }
  24.   return $classNames;
  25. }
  26.  
  27. function processNames(&$item, $key, $delCount)
  28. {
  29.   $item = substr($item, 0, strlen($item) - 4);
  30.   $item = substr($item, $delCount);
  31.   $item = "\t\t" . '<KeyWord name="' . $item . '" />' . "\n";
  32. }
  33.  
  34. $delCount = strlen($pathZFLibrary);
  35. $startPath = rtrim($pathZFLibrary, "/");
  36. $zfClassNames = createZFClassNames($startPath);
  37. sort($zfClassNames);
  38. array_walk($zfClassNames, 'processNames', $delCount);
  39. $content = file_get_contents($pathToNotepadPhpXml);
  40. $pos = stripos($content, '</AutoComplete>') - 1;
  41. file_put_contents($pathToNotepadPhpXml, substr($content, 0, $pos) . join('', $zfClassNames) . substr($content, $pos));


Если у кого-то работать не будет - не расстраивайтесь. Еще не забудьте перед всем этим сохранить копию php.xml на всякий случай. До новых встреч!


Comments
By   123
Published   19.05.2010

кодерам на радость

Published   19.05.2010

123
кодерам на радость

ага ) только вроде есть нормальный плагин ;)

Create comment
 
Formatting
Comment can not be edited. Please, use the button "Preview"
By
  (Enter prev char)
Comment
Categories
PHP
12
articles
Прочее
4
articles
Delphi
0
article
C/C++
0
article
C#
0
article
Java
0
article
Perl
0
article
Python
0
article
Enter
Cookie must be "ON"
Login
Password
 
Popular tags
PHP
9
articles
паттерн
5
articles
framework
5
articles
шаблон
5
articles
Template View
3
articles
Facade
3
articles
Service Stub
3
articles
Page Controller
2
articles
Singleton
2
articles
Gateway
2
articles
MySQL
2
articles
Registry
2
articles
Command
2
articles
Front Controller
2
articles
Action
2
articles
Abstract Factory
2
articles
типовое решение
2
articles
шаблоны проектирования
2
articles
Iterator
2
articles
Transaction Script
2
articles
Rambler's Top100 Правильный CSS!