Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
andylars 12.06.2017 18:51 / 14.06.2017 00:01
рац.предложение прозвучало около года назад^paint[string][options] # для обратной совместимости ^taint не трогаем # формулировку типа "краски" tainted для неопределенно грязных меняем на dirty # чтобы не порождать исторически сложившейся путаницы где, string: строка (или код, т.к. механизм работает только со строками то синтаксически "хромой" наследный ^untaint{} не имеет смысла) options: хеш опций $.to[color] в какой цвет красить, по-умолчанию dirty (неопределенно грязный) $.what[ красить не всю строку, а только определенные цвета в строке $._default(true/false) правило для всех встреченных цветов, и не указанных в наборе ниже, по-умолчанию _default(true) значит красить все цвета строки в $.to (стандартное поведение taint-ов) $.color(true/false) true - красить указанный цвет в $.to или наоборот исключить (false) ] $.apply(true/false) мгновенное или отложенное применение (по-умолчанию false) $.regex[] применить только к подстрокам по регэкспу # Пример1 ^paint[$var] пачкает в dirty (неопределенно грязный) всю строку, поведение полностью аналогично ^taint[$var] ^paint[$var][ куски dirty-покраски преобразовать в as-is, аналог ^untaint{$var} $.to[as-is] $.what[ $._default(false) $.dirty(true) ] ] ^paint[$var][ демонстрация гибкости $.to[as-is] покрасить строку в as-is $.what[ $._default(false) иcключить применение для всех встреченных в строке цветов $.uri(true) но применить для куска строки, которая покрашена в uri-цвет ] $.apply(true) и применить преобразование сразу ] # Дополнение: можно, также, ввести одну пользовательскую логическую краску (например usr) которая ничего не делает, но пригодится для какой-то логической операции в покраске, вот ту же "точку/разделитель" промаркировать и применять правило только к ней. Удобно на случай, когда мы не знаем какие символы будут окрашены в usr, и поэтому не можем применить regex, но зато можем применить правило для логического цвета. # Пример2 (для логической краски) # покрасим символ-разделитель в логический цвет $a[^paint[&][$.to[usr]]] $e[^paint[=][$.to[usr]]] $some_uri[var1${e}value1${a}var2=value2&var2=value3] -> var1=value1&var2=value2&var2=value3 ^paint[$some_uri][ покрасить $some_uri $.to[uri] в uri-раскраску $.what[ $.usr(false) но исключить это для кусков строки цвета usr ] ] # результат работы: сепараторы, покрашенные в usr не будут окрашены в uri-цвет: var1=value1&var2%3Dvalue2%26var2%3Dvalue3