Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Yuriy V. Vorontsov (Че) 24.04.2004 19:18 / 24.04.2004 19:20
Вчера наткнулся на сабж у egr'а на http://www.egoroff.spb.ru.# comment # xxx @method[xxx] ...code ...Такой шаблон в принципе является удовлетворительным, но хочется большего, к тому же может я что-то не учёл...
@default[param1;param2] $result[^if(def $param1){$param1}{$param2}] @checked[param;value] $result[^if($param eq $value || (!def $param && $value eq "0")){checked}] @main[] <form method="GET"> Путь к папке с библиотеками: <input name="library" value="^default[$form:library;/]"><br> Маска (в regexp'е): <input name="mask" value="^default[$form:mask;\.p^$]"><br> Просмотривать вложенные папки: <input type="radio" name="in" id="1" value="1" ^checked[$form:in;1]><label for=1>Да</label> / <input type="radio" name="in" id="0" value="0" ^checked[$form:in;0]><label for=0>Нет</label><br> <input name="run" type="submit"> </form> ^if(def $form:run){ <HR width="100%"> $autodocs[^autodocs::create[ $.path[$form:library] $.mask[^untaint[as-is]{$form:mask}] $.in(^form:in.int(0)) ]] ^autodocs.scan[] } ########################### @CLASS autodocs @auto[] $CONTENT[^table::create{path}] # Конструктор # 1. init = путь к папку где сканировать # 2. init.path = путь к папку где сканировать # init.mask = маска в regexp # init.in = (1/0) открывать вложенные папки @create[init] $PATH[/] $MASK[\.p^$] $INSIDE(0) ^if($init is string){ $PATH[$init] }{ ^if($init is hash){ ^if(def $init.path){ $PATH[$init.path] } ^if(def $init.mask){ $MASK[$init.mask] } ^if(def $init.in){ $INSIDE(^init.in.int(1)) } }{ ^throw[autodocs.create;$init;Входной параметр задан не верно, это может быть string или hash.] } } # Начать сканирование @scan[] ^scandir[$PATH] ^if($CONTENT){ ^CONTENT.menu{ ^open[$CONTENT.path] } } #$result[] # Рекурсивный просмотр папок @scandir[folder][folder;list] $list[^file:list[$folder]] ^list.menu{ ^if(^list.name.match[$MASK][]){ ^add[$folder/$list.name] } ^if($INSIDE && (-d "$folder/$list.name")){ ^scandir[$folder/$list.name] } } #$result[] # Добавить файл в стэк обработки @add[file] ^CONTENT.append{$file} #$result[] # Обрезать ужас моего не знания regexp'а @cut[string;also] ^if(def $string){ $result[^string.match[\n$also][g]{}] }{ $result[] } # Обрезать ужас моего не знания regexp'а и символы комментариев @change_comment[string] ^if(def $string){ # $result[^string.match[\n+][g]{^#0D}] $result[^string.match[#+][g]{}] }{ $result[] } @unescape_br[string] ^if(def $string){ $string[^string.match[\n\n+][g]{<p>}] $result[^string.match[\n][g]{<br>}] }{ $result[] } # открыть файл @open[file][f;HELP;table;GHELP] ^if(-f $file){ $f[^file::load[text;$file]] $f[ $f.text ] $HELP[^table::create{method comment}] $GHELP[^hash::create[]] $table[^f.match[((\n#^[^^\n^]*)*)(\n@^[^^\n^]*)(\n[^^\n]*)][g]] $f[] ^table.menu{ ^if(^table.3.match[@(CLASS|BASE|USE)][]){ $GHELP.[My^cut[$table.3;@]][ $.value[^cut[$table.4]] $.comment[^change_comment[$table.1]] ] }{ ^HELP.append{^cut[$table.3] ^change_comment[$table.1]} } } $table[] ^make[$file;$GHELP;$HELP] $HELP[] $GHELP[] # $result[] }{ ^throw[autodocs.open;$file;;${file}: Такой файл не найден] } @make[file;GHELP;HELP][body] $body[ ^if(def $GHELP.MyCLASS){ <H1>Класс: $GHELP.MyCLASS.value</H1> ^if(def $GHELP.MyCLASS.comment){ <h3>$GHELP.MyCLASS.comment</h3> } }{ <H1>Класс: MAIN</H1> <h3>Расширение базовых функций Parser3</h3> } <H2>Файл $file<H2> ^if($HELP){ <table border=1> ^HELP.menu{ <tr> <td align="left" valign="top" width="10%"> <pre>$HELP.method</pre> <ul>^unescape_br[$HELP.comment]</ul> </td> </tr> } </table> } <HR width=100%> ] $body #$result[]