Наряду с обычными мета-символами, Proxomitron предоставляет специальные команды соответствия. Немного похожие на вызов фунций, они расширяют функциональность обычных правил соответствия и добавляют различные возможности, которые трудно или невозможно осуществить посредством только мета-символов. В общем случае формат команд имеет вид:
$COMMAND(Parameter1, Parameter2, ...)
Поскольку команды начинаются с "$", этот символ не имеет своего специального значения. Таким образом, вы можете использовать его в выражениях без необходимости использования символа отмены ("/"). Исключением являются случаи, когда за ним следует текст, сопоставленный с существующей командой.
И последнее замечание: не все команды могут использоваться где угодно. Некоторые функции применяются только в выражениях соответствия, другие только в тексте замены (и несколько в обоих случаях). Аналогично, некоторые команды работают только в фильтрах заголовков, тогда как другие применются в web-фильтрах. Все эти ограничения указаны в описаниях функций.
А теперь то, что вы давно ждали - полный (надеюсь) список команд, их параметров (если таковые имеются) и их использования.
Быстрый переход: нажмите на ссылку для быстрого перехода к описанию команды:
$AV $AVQ $CON $ESC $FILTER $IHDR $INEST |
$JUMP $LST $NEST $OHDR $RDIR $SET $SETPROXY |
$STOP $TYPE $UESC $URL $USEPROXY |
Ограничения: Только выражения соответствия
Типы фильтров: Входящие заголовки, исходящие заголовки, выражения соответствия
Эта команда используется для соответствия значению атрибута. Сначала она находит и изолирует значение - автоматически определяя наличие или отсутсвие кавычек. Соответствие внутри команды ограничено только значением. Любые кавычки, в которые заключено значение, игнорируются.
Например, для соответствия любому изображению со словом "Gargalishous!" в теге, мы должны использовать:
<img * alt=$AV(*gargalishous!*) *>
который будет соответствовать любой из строк:
<img src="foo" alt="My is this trout ever Gargalishous!">
<img src="foo" alt='Gee your hair is Gargalishous! Is that bison flavor?'>
<img src="foo" alt=JustRawGargalishous! >
Даже если соответствие включает кавычки, они все равно будут поглощаться командой. Это значит, что если вы хотите сохранить все значение целиком, включая кавычки, вы должны записать выражение так:
<img * alt=($AV(\1))\2 *>
Здесь \2 будет содержать полный тег с оригинальными кавычками, тогда как \1 будет содержать только чистое значение. Например:
<img src="foo" alt="Move all Zig!">
\1 = Move all Zig!
\2 = "Move all Zig!"
Но это также можно сделать другим путем - просто используя $AVQ()
Ограничения: Только выражения соответствия Команда подобна $AV(...) за исключением того, что она также включает в соответствие любые кавычки. Полезна, когда необходимо сохранить просто значение атрибута. Например, выражение:
<img * alt=$AVQ(\1) * >
будет сохранять любые значения тега alt в переменную \1.
Ограничения: Нет Команда используется для включения блок-файла в любое выражение. Содержимое блок-файла сравнивается с текстом строка за строкой до тех пор, пока не будет найдено совпадение. Иначе выражение возвращает FALSE.
Ограничения: Только выражения соответствия Команда $NEST находит закрывающий тег или символ для данного начального тега или символа даже если теги вложены друг в друга. Чтобы использовать команду, вы должны дать "начальное соответствие", которое будет соответствовать открывающему тегу и "конечное соответствие", которое будет соответствовать закрывающему тегу. Например, для соответствия вложенным тегам <TABLE> вы можете записать:
$NEST(<table*>,</table>)
В данном тексте, найденное соответствие выделено красным: Примите во внимание, что команда найдет правильный закрывающий тег для внешней таблицы, даже если во внутренней таблице используются те же теги.
$NEST опционально может иметь третий параметр, "внутреннее соответствие". Если он представлен, то это соответствие будет применено к участку между открывающим и закрывающим тегом. Важно иметь в виду, что этот параметр не включает текст в открывающем или закрывающем теге, а только тот, что находится между ними. Опять, из примера выше:
$NEST(<table*>,\1,</table>)
В данном тексте "\1" будет соответствовать только синему участку: Ограничения: Только выражения соответствия $INEST ("Inner Nest") работает аналогично $NEST, за исключением того, что открывающий и закрывающий теги находятся вне команды. Другими словами, подразумевается, что открывающий тег вы уже нашли, и хотите найти его конец. И опять, пример выше теперь выглядит так:
<table name=$AV(*outer*) >$INEST(<table*>,</table>) </table>
В данном тексте соответствие выделено красным: Преимущество такого подхода в том, что теперь проще найти конкретный открывающий тег (в этом примере это таблица со словом "outer" в имени), как противоположность просто любому открывающему тегу этого типа. Это было бы затруднительно сделать с использованием одной команды $NEST, поскольку любая проверка "начального соответствия" давала бы ИСТИНУ не только для внешней, но и для внутренней таблицы.
Ограничения: Только выражения соответствия Используется для задания позиционной переменной определенного значения. Любой текст замены, включая другие переменные, может быть задан в этой команде. Первый параметр - это позиционная переменная от \0 до \9 или стековая переменная \# (причем "\" - опционально). За знаком равенства следует собственно устанавливаемое значение. Например:
Установить \1 равным "foobar": $SET(1=foobar)
Установить переменную \1 равной содержимому \2: $SET(1=\2)
Помещая команду $SET внутрь выражения, вы можете установить различные значения только only если выражение соответствия достигает этой точки. Это может использоваться для эффекта, подобного if/then/else: Результатом будет:
если имя=one то "Naoko Matched" Команда имеет некоторые ограничения: значение переменной не "расширяется" до тех пор, пока она прямо не вызвана из текста замены. Это значит, что если \1 содержит "fish" и команда типа $SET(\2=\1 food), то \2 не даст в результате "fish food", но будет буквально установлена "\1 food". Однако, она будет расширена в "fish food" когда \2 выводится в текст замены. Почему это важно? Это значит, например, что вы не сможете установить переменную, включающую часть самой себя как в $SET(\1=что-либо и \1).
Ограничения: Только выражения соответствия CON будет истиной только в том случае, если номер текущего соединения 'x' из 'y' (опционально, для каждых 'z' соединений). Может использоваться для замены значений в зависимости от соединений. Следующий пример будет менять последовательно три значения в переменной \0:
($CON(1,3) $SET(0=Значение один из трех)| Используйте значение 'z' для определение задержки смены значений на определенное число соединений.
Ограничения: Только выражения соответствия $OHDR и $IHDR могут использоваться для проверки значения любых входящих и исходящих заголовков. Сначала введите имя конкретного фильтра для проверки (без подстановочных символов) с последующим выражением соответствия для значения (можно с подстановочными символами). Команда будет истинной только в том случае, если значение заданного заголовка совпадет с выражением в части "соответствие". $OHDR проверяет исходящие заголовки, $IHDR - входящие. Например, выражение ниже будет соответствовать только если заголовок "Referer" содержит 'microsoft.com'
$OHDR(Referer:*.microsoft.com)
Эта команда может использоваться в web-фильтрах только если значения заголовков также истинны, или для сохранения в переменных и дальнейшего использования значений заголовков в тексте замены. Вы также можете использовать их фильтрах заголовков для проверки комбинаций заголовков.
Ограничения: Только выражения соответствия $URL может использоваться для проверки URL внутри проверяемой части текста. Обычно для этих целей используется соответствие URL, но с этой командой вы можете проверить другой URL, основанный на проверяемом тексте. Также удобно для сохранения частей URL в переменные. Следующий пример сохраняет путь URL:
$URL(http://www.somehost.com/\1)
Замечание: Соответствие URL теперь включает часть URL, содержащую протокол ("http://"). Поскольку теперь Proxomitron работает не только с HTTP, это может оказаться полезным. Однако это также требует внесения изменений в ранее созданные фильтры.
Ограничения: Только выражения соответствия Команда, проверяющая тип содержимого. Эта команда может использоваться для ограничения действия фильтра только заданными типами страниц (типа JavaScript). Команда "code" одного из следующих известных типов:
Может оказаться особенно полезным в соответствии URL. Это значение неопределено в фильтрах заголовков (поскольку значение содержимого может быть еще неизвесно). Имейте в виду, что это быстрая и простая проверка. Для более сложных проверок типа содержимого можно использовать "$IHDR(Content-Type: ... )", где "..." - любое выражение, включая подстановочные символы.
Ограничения: Выражения соответствия или замены Команда $RDIR (редирект) используется для прозрачного перенаправления URL в другое место. Также возможно перенаправление на локальный файл используя синтаксис "http://file//filename". Новый URL должен быть типа, понимаемого Proxomitron (http, или, при наличии SSLeay, https).
Используйте команды $RDIR и $JUMP (см. ниже) в тексте замены только фильтров загловоков. Важно понимать, что для исходящих заголовков перенаправление происходит перед соединением с оригинальным сайтом, но при использовании во входящих заголовках, сначала должно быть проведено соединение с оригинальным сайтом! Эти команды не дадут эффекта web-фильтрах, поскольку в этой точке времени оригинальная страница уже начала загружаться броузером. В таких случаях можно использовать JavaScript для перехода в новое место:
<script> document.location="http://some.new.url/"; </script>
Ограничения: Выражения соответствия или замены Подобно команде $RDIR, команда $JUMP используется для перенаправления URL в другое место. Однако в отличие от прозрачного перенаправления эта команда просто сообщает броузеру о смене адреса. Это больше похоже на мета-тег "REFRESH" или функции document.location в JavaScript (фактически броузеру посылается команда 302 - redirect).
С командой $JUMP ваш броузер уверен в обновлении страницы, и URL, который вы просматриваете, будет обновлен, отражая новое местоположение. Лучше всего это работает, когда надо перенаправить страницу целиком, поскольку $RDIR лучше подходит для невидимого перенаправления отдельных элементов страницы, типа изображений или java-аплетов. Используйте $RDIR, когда вы хотите, чтобы факт перенаправления остался "за сценой", и используйте $JUMP, когда вы хотите попасть на один сайт, обращаясь к другому.
Ограничения: Выражения соответствия или замены $STOP - очень простая команда. По ее достижении фильтр будет выключен до конца страницы/соединения. Текущее совпадение будет доведено до конца, но поиск следующих производиться не будет.
Это может быть весьма полезным для фильтров, которые должны совпадать только один раз. Особенно те, которые что-либо вставляют в текст страницы в заданной точке. Например, вы хотите вставить небольшой скрипт после тега <BODY>. Вы можете использовать:
Это не только даст уверенность, что скрипт будет вставлен только единожды, но также ускоряет работу, поскольку Proxomitron не тратит время зря на дальнейшие поиски. Примите во внимание, что команда $STOP будет работать и в том случае, даже если фильтр в целом не нашел совпадения при вызове в некоторой точке.
Ограничения: Выражения соответствия или замены Команда $FILTER может использоваться для принудительного включения/отключения фильтрации определенного запроса, в зависимости от его типа. Обычно фильтруются только определенные типы (text/html, text/css, image/gif, и т.д.). $FILTER может использоваться в фильтрах заголовков и принимает значения "true" или "false". Если значение "true", запрос идет через web-фильтры в зависимости от типа. Однако это будет работать, только если содержимое текстового типа.
Вы можете это использовать во избежание "замораживания" определенных изображений GIF, используя команду в фильтре заголовка, совместно с соответствием URL. Например:
Out = "True" Ограничения: Выражения соответствия или замены Команда $USEPROXY также принимает значение "true" или "false" и может игнорировать значение параметра "Use remote proxy" для данного соединения, путем включения или отключения прокси. Это даст уверенность, что прокси используется (или не используется) для данного сайта или некоторого действия.
Чтобы команда возымела эффект, она должна вызываться в выражении соответствия или тексте замены исходящих фильтров заголовков, поскольку установки прокси должны быть выполнены перед подключением к сайту.
Ограничения: Выражения соответствия или замены Команда $SETPROXY принуждает соединение использовать определенный проси. Она игнорирует параметр "Use remote proxy" и текущий прокси, выбранный в прокси-селекторе. Это дает уверенность, что определенный прокси используется в данной ситуации или или для определенного URL.
Устанавливаемый прокси уже должен быть в списке внешних прокси. Эта команда просто устанавливает прокси из этого списка. Обычно требуется только первая часть имени прокси - будет использован первый прокси, найденный в списке. Совпадение должно быть полным (подстановочные символы не допускаются).
Подобно предыдущей команде, эта также должна вызываться в выражении соответствия или тексте замены исходящих фильтров заголовков.
Ограничения: Текст замены Команда $UESC аналогична функции JavaScript unescape(). Она преобразует специальные символы URL обратно в ASCII. Полезна для возвращения нормального вида URL, внедренным в другие URL (распространенный трюк, который используют многие сайты для отслеживания ссылок, на которые вы нажимаете). Часто символы типа ":" и "/" преобразуются в их hex-эквивалент ("%3A" и "%2F"), что усложняет использование URL.
$UESC может использоваться в тексте замены, и ее аргументом может являться любой допустимый текст (такой как переменные \1). Большинство символов будет преобразовано обратно в их правильную форму, но пробелы и любые ASCII символы, которые не могут быть отображены, останутся без изменений.
Ограничения: Текст замены Действие команды $ESC противоположно команде $UESC. Подобно функции JavaScript escape(), она преобразует большинство не цифро-буквенных символов в их hex-эквивалент (вида %xx), делая их безопасными для включения как часть URL.
$ESC может использоваться в тексте замены, и ее аргументом может являться любой допустимый текст (такой как переменные \1).
$AVQ(match)
Типы фильтров: Все
$LST(blockfile name)
Типы фильтров: Все
$NEST(начальное соответствие, [внутреннее соответствие,] конечное соответствие)
Типы фильтров: Все (но в основном web-фильтры)
...некий HTML...
<table name="outer table">
...
<table name="inner table">
...
</table>
...
</table>
...остальной HTML...
...некий HTML...
<table name="outer table">
...
<table name="inner table">
...
</table>
...
</table>
...остальной HTML...
$INEST(начальное соответствие, [внутреннее соответствие,] конечное соответствие)
Типы фильтров: Все (но в основном web-фильтры)
...некий HTML...
<table name="outer table">
...
<table name="inner table">
...
</table>
...
</table>
...остальной HTML...
$SET(\# или \0-\9=Значение)
Типы фильтров: Все
Соответствие: name=(one $SET(0=Naoko) | two $SET(0=Atsuko)
| three $SET(0=Michie) | $SET(0=Default))
Замена: "\0 Matched"
если имя=two то "Atsuko Matched"
если имя=three то "Michie Matched"
иначе "Default matched"
$CON:(x,y[,z])
Типы фильтров: Все
$CON(2,3) $SET(0=Значение два из трех)|
$CON(3,3) $SET(0=Значение три из трех))
$IHDR(имя-заголовка:соответствие)
$OHDR(имя-заголовка:соответствие)
Типы фильтров: Все
$URL(проверяемое значение)
Типы фильтров: Все
$TYPE(code)
Типы фильтров: Web-фильтры
htm - Web-страницы
css - Таблицы стилей
js - JavaScript
vbs - VB Script
oth - Все остальное
$RDIR(http://some.url.com/)
Типы фильтров: Только фильтры заголовков
$JUMP(http://some.url.com/)
Типы фильтров: Только фильтры заголовков
$STOP()
Типы фильтров: Все
Match: <body\s \1>
Replace: <body \1>
<script>my script</script>
$STOP( )
$FILTER(значение True или False)
Типы фильтров: Только фильтры заголовков
Key="URL: Don't freeze this gif"
URL="www.somewhere.com/animate_me.gif"
Replace="$FILTER(False)"
$USEPROXY(значение True или False)
Типы фильтров: Только фильтры исходящих заголовков
$SETPROXY(имя.удаленного.прокси[:порт])
Типы фильтров: Только фильтры исходящих заголовков
$UESC(escaped text)
Типы фильтров: Все
$ESC(any text)
Типы фильтров: Все