Форумы Форум www.proxomitron.ru
Все о программе Proxomitron
Главная  • FAQ для форума  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Личные сообщения  •  Вход
 Опять наверно странного хочу....
 Сайт -> Форумы » Помогите убрать баннер...
Следующая тема
Предыдущая тема

Новая тема  Ответить
Автор Сообщение
DrAlex
Гость





СообщениеДобавлено: Чт, Ноя 20 2008 00:26 Цитировать |  |  | 

пару лет назад пытался заюзать проксимитрон для своих нужд - выяснилось что никак не получится - не умеет он данные POST править (правка данных формы не подходит - клиент флэшовый был).
счас опять вернулся к нему - для других целей . вроде теоритически подойти может - но ......

в общем вопросов несколько .
сразу об особенностях контента на котором испытываю - и будет работать . куча табов и \r\n в самых неподходящих местах .

по началу пара непринципиальных вопросов .
1) всё тестировал через test в редактировании фильтров .
как таким редактором пользоваться можно - даже скролинга нет у окон . как оптимальней тестировать ?
2) INEST странно себя ведёт . почему то первый тег не отрезает . а только открывающую скобку . или это я не так понял что то - и оно так и должно . то есть при <a href=zzz>dddd</a> получается a href=zzz>ddd ......

из принципиальных .
1) если в переменную уже что то положено - как её обнулить ?
то есть если я загнал в переменную \1 что то и потом пытаюсь на каком то условии сделать ($SET(\2=aaa) $SET(\5=bbb) )
то в замене \2 и \5 будут aaa и bbb , однако если пытаюсь сделать ($SET(\2=aaa) $SET(\1=bbb) ) , то 2 будет aaa , как и положенно , но \1 - так и останется со старыми данными .
замену тестирую на уровне

Код:

START
- \0 - \2 - \3 - \4 -
\r\n
\5
END


может неверно понимаю механизм как оно работает - типа замена происходит в момент заполнения переменной ?

2) как в условиях использовать уже заполненные переменные ? реально ли это ? то есть если текущее значение для сравнения равно такому то и при этом в \1 лежит такое то слово - то в \8 положить .....
К началу
Alex Qwerty
Gold Member
Gold Member


Зарегистрирован: 20.07.2007
Сообщения: 204

СообщениеДобавлено: Чт, Ноя 20 2008 01:42 Цитировать |  |  | 

Цитата:

1) всё тестировал через test в редактировании фильтров .

как таким редактором пользоваться можно - даже скролинга нет у окон . как оптимальней тестировать ?

Растяни на весь экран.

Цитата:

2) INEST странно себя ведёт

А что ты делаешь?

Цитата:

1) если в переменную уже что то положено - как её обнулить ?

Используй глобальные переменные:

Код:
[Patterns]
Name = "New HTML filter"
Active = FALSE
Limit = 256
Match = "(test)\1"
        "$SET(a=\1)"
        "$SET(2=aaa)"
        "$SET(a=\2)"
Replace = "1=\1\r\n"
          "2=\2\r\n"
          "a=$GET(a)"


Цитата:

то есть если текущее значение для сравнения равно

Посмотри в помощи $SET, $TST.
К началу Профиль Сообщение
DrAlex
Гость





СообщениеДобавлено: Чт, Ноя 20 2008 04:32 Цитировать |  |  | 

растягивал - маловато будет .
есть таблица . в ней сотня <tr>.....</tr>
сотню фильтров писать - не дело .
то есть нужен 1 фильтр многократного применения .
соответственно на тесты - минимум 4 строчки - тут растягивание не помогает ....
соответственно глобальные переменные тоже ....
на форуме нашёл как решаются почти такие вопросы через глобальные переменные - но там счётчик . а мне наоборот - переменные обнулять надо .

то есть грубо говоря - в таблице сотня блоков tr..../tr вида

Код:

<td><a href=#HREF#>#NAME#</td>
<td>#P1#</td>
<td>#P2#/#P3#</td>


где #HREF#,#NAME#,#P1#,#P2#,#P3# - изменяемые части .
далее логика такая
1) если #NAME# из списка - блок без изменений
2) если (#P1#==1 || #P1#==2) && #P2#!=#P3# весь блок без изменений.
иначе блок удалить .

такое реально реализовать ?

пока максимум 2 параметра удаётся связать - и то с таким геммороем , что вносить туда третий параметр - не реально .
чтоб блок удалить - весь блок приходится пытаться сохранить в стековой переменной (собрать потом из разных переменных не получается - так как они не обнуляются) , проверка даже на 2 самых простых условия превращается в нечто невообразимое - чтоб промежуточные тэги внести в стековую переменную (иначе данные фиг удалить) ....
вот и спрашиваю - есть более разумный вариант ? или тут только проктологом работать ?
К началу
DrAlex
Гость





СообщениеДобавлено: Чт, Ноя 20 2008 04:43 Цитировать |  |  | 

Цитата:
Используй глобальные переменные:

ну там и кусок кода .
спасибо .
такого результата неудавалось достичь . есь что хоть далее тестировать . может ещё пару часов угроблю - и разберусь что к чему Smile
К началу
Alex Qwerty
Gold Member
Gold Member


Зарегистрирован: 20.07.2007
Сообщения: 204

СообщениеДобавлено: Чт, Ноя 20 2008 08:41 Цитировать |  |  | 

Цитата:
соответственно на тесты - минимум 4 строчки - тут растягивание не помогает ....

Можно еще кинуть тестовый файл в proxomitron\html\file.html и грузить в браузере http://dbug..local.ptron/file.html


Немного потрахавшись, получил это, дальше трахайся без меня ;-)

Код:

[Patterns]
Name = "New HTML filter 2-2"
Active = FALSE
Bounds = "$NEST(<tr,</tr>)"
Limit = 256
Match = "("
        "(<tr> <td> <a href=[^>]+>\4</td> <td>\1</td> <td>\2/$TST(\2)</td> </tr>)\0($TST(\4=save*)$SET(newTR=\0)|$SET(newTR=del2))"
        "|"
        "(<tr> <td> <a href=[^>]+>\4</td> <td>\1</td> <td>\2/\3</td> </tr>)\0"
        "($TST(\4=save*)$SET(newTR=\0)|$TST(\1=1|2)$SET(newTR=\0)|$SET(newTR=del))"
        ")"
Replace = "$GET(newTR)"


Проверял на этом (кстати, у тебя <a не закрыт):

Код:

<tr> <td><a href=#HREF#>#NAME#</td> <td>#P1#</td> <td>#P2#/#P3#</td> </tr>
<tr> <td><a href=#HREF#>save1</td> <td>#P1#</td> <td>#P2#/#P3#</td> </tr>
<tr> <td><a href=#HREF#>remove1</td> <td>#P1#</td> <td>#P2#/#P3#</td> </tr>
<tr> <td><a href=#HREF#>save2</td> <td>#P1#</td> <td>2/2</td> </tr>
<tr> <td><a href=#HREF#>remove2</td> <td>#P1#</td> <td>#P2#/#P3#</td> </tr>

<tr> <td><a href=#HREF#>a</td> <td>1</td> <td>2/2</td> </tr>
<tr> <td><a href=#HREF#>a</td> <td>2</td> <td>2/3</td> </tr>
К началу Профиль Сообщение
DrAlex
Гость





СообщениеДобавлено: Чт, Ноя 20 2008 23:33 Цитировать |  |  | 

<a> не закрыл - сорри - код вручную набирал . реально там всё закрыто .
мне не нужен готовый код фильтра - а просто направление с чем разбираться . под текущую ситуацию я его приспособить смогу - поняв что и как - к сожалению в хелпах мало примеров по которым это понять можно ....
ещё раз спасибо - счас гляну и поэксперементирую Smile
К началу
chAlx
Moderator
Moderator


Зарегистрирован: 30.06.2004
Сообщения: 2622
Откуда: SPb

СообщениеДобавлено: Чт, Ноя 20 2008 23:55 Цитировать |  |  | 

DrAlex:

Цитата:
как таким редактором пользоваться можно


Он ещё и глюкануть может при ресайзе..
Для тестов можно попробовать пропатченный интерфейс.

Цитата:
в таблице сотня блоков tr..../tr вида


Обычно создаётся фильтр на один блок, который срабатывает много раз при загрузке всей страницы. Логика фильтра должна быть с обратными проверками: что надо менять (в данном случае удалять), то и проверяем; если никакая проверка не сработает -- блок останется без изменений.

Цитата:
2) если (#P1#==1 || #P1#==2) && #P2#!=#P3# весь блок без изменений.

Это эквивалентно условию: if (#P1# != (1|2) or #P2# == #P3#) then удалить.

Получится примерно так:

Код:
Match = "<tr>"
        "<td> <a*>(^$LST(NamesNoChange)) *</a> </td>"
        " ("
        "  <td>(^1|2)*</td> <td>*</td> |"
        "  <td>*</td> <td>\2/$TST(\2)</td>"
        " )"
        " </tr>"
Replace = ""

(синтаксис не проверял)

Проверки на не-вхождение (^строка) проверяют начало строки и не захватывают её в буфер, так что если надо проверять всю строку (пропускать 1, но не пропускать 11), придётся немного изменить.

Фрагменты типа <a*> и <td>*</td> желательно записывать через $NEST(), чтобы избежать недоразумений с вложенными угловыми скобками и тегами.

Фрагмент \2/$TST(\2) проверяет, чтобы с двух сторон от слеша было одно и то же.

Обнулить переменную можно командой $SET(1=). Но локальные переменные, установленные через нормальный захват (*)\1 плохо работают с $командами. А глобальные будут жить до окончания http-запроса, т.е. даже при выходе из фильтра.


Последний раз редактировалось: chAlx (Пн, Ноя 24 2008 11:13), всего редактировалось 2 раз(а)
К началу Профиль Сообщение
DrAlex
Гость





СообщениеДобавлено: Пн, Ноя 24 2008 06:16 Цитировать |  |  | 

фигово разбираться когда в синтаксисе не уверен .
интересный момент - может кто объяснит почему так происходит .

сталю три тестовых блока - ну и пару левых для проверки .
делаю просто проверку по слову - со списками пока не разбирался - и пустой реплэйс
Код:
*
<td align="left">
<a*>
((слово))
</a>*


так нормально . блок пропускается .
пытаюсь сделать чтоб только этот блок выводился . логично поставить отрицание просто . типа (^(слово)) . и не работает . пишет [No Match] .
пока подбором не подобрал что этот кусок в переменную сувать надо - (^(слово))\5 - тогда заработало только . почему так ?
К началу
chAlx
Moderator
Moderator


Зарегистрирован: 30.06.2004
Сообщения: 2622
Откуда: SPb

СообщениеДобавлено: Пн, Ноя 24 2008 11:12 Цитировать |  |  | 

DrAlex:

Цитата:
подобрал что этот кусок в переменную сувать надо - (^(слово))\5


Как я писал, проверка с отрицанием не захватывает текст в буфер. Т.о. после проверки фильтр либо вылетает сразу, если она не прошла, либо идёт дальше проверять фрагмент <a*></a> и опять же вылетает, т.к. в шаблоне не указано ничего, что могло бы быть между тегами (а в тестовом тексте что-то есть).
Вставка \5 эквивалентна вставке (\5) или * (как в моём примере) -- это просто пропуск любого текста после проверки на не-вхождение до начала нужного тега.

Пример подправил, чтобы больше был похож на кусок конфига (который импортируется в список фильтров по правому клику).
К началу Профиль Сообщение
Показать сообщения:      
 
Новая тема  Ответить

 Перейти:   




Следующая тема
Предыдущая тема
Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


P o w e r e d b y p h p B B © p h p B B G r o u p :: T h e m e b a s e d o n FI T h e m e :: Часовой пояс: GMT + 3