<?
$RE = <<< HEREDOC
# строка
"(?:
\\\\. |
[^"]
)*+"
|
# однострочный комментарий
\/\/
(?P>TextChunk)
| # многострочный комментарий
\/\\*
.*?
\\*\/
|
(?P<define>
(?<=\\n|^) # начало строки или текста
(?P<probel>
(?:
[ \\t] | # пробелы, табуляция или
\\\\ # обратный слэш, за ним
\\r? # возможно \r
\\n # и \n
)*+
)
[#]
(?P>probel) # хоть такая ссылка и называется рекурсивной, рекурсии фактически нет
define(?=[^a-z0-9_]|\$) # define справа от которого не символ или конец строки
# грамматика требует уточнения
(?P<TextChunk>
(?:
\\\\[^\\r\\n] | # что-то экранированное, но не переводы строк, или
\\\\\\r?\\n | # экранированный перевод строки, или
[^\\r\\n] # любой символ кроме перевода строки
)*+
)
(?:\\r?\\n|\$) # конец строки или текста
)
HEREDOC;
$clb=function($match) {
if (@$match["define"]) {
return "<span style='color:white;background-color:blue'>".$match[0]."</span>";
} else {
return $match[0];
};
};
?>
PD8KJHRleHQ9IGZpbGVfZ2V0X2NvbnRlbnRzKCJwaHA6Ly9zdGRpbiIpOwokUkUgPSA8PDwgSEVSRURPQwogICAgIyDRgdGC0YDQvtC60LAKICAgICIoPzoKICAgICAgICBcXFxcLiB8CiAgICAgICAgW14iXQogICAgKSorIgogICAgfAogICAgIyDQvtC00L3QvtGB0YLRgNC+0YfQvdGL0Lkg0LrQvtC80LzQtdC90YLQsNGA0LjQuQogICAgXC9cLyAKICAgICg/UD5UZXh0Q2h1bmspICAgICAgCiAgICB8ICMg0LzQvdC+0LPQvtGB0YLRgNC+0YfQvdGL0Lkg0LrQvtC80LzQtdC90YLQsNGA0LjQuQogICAgXC9cXCoKICAgIC4qPwogICAgXFwqXC8KICAgIHwKICAgICg/UDxkZWZpbmU+ICAKICAgICAgICAoPzw9XFxufF4pICMg0L3QsNGH0LDQu9C+INGB0YLRgNC+0LrQuCDQuNC70Lgg0YLQtdC60YHRgtCwCiAgICAgICAgKD9QPHByb2JlbD4KICAgICAgICAgICAgKD86CiAgICAgICAgICAgICAgICBbIFxcdF0gfCAjINC/0YDQvtCx0LXQu9GLLCDRgtCw0LHRg9C70Y/RhtC40Y8g0LjQu9C4CiAgICAgICAgICAgICAgICBcXFxcICAgICAjINC+0LHRgNCw0YLQvdGL0Lkg0YHQu9GN0YgsINC30LAg0L3QuNC8CiAgICAgICAgICAgICAgICBcXHI/ICAgICAjINCy0L7Qt9C80L7QttC90L4gXHIKICAgICAgICAgICAgICAgIFxcbiAgICAgICMg0LggXG4KICAgICAgICAgICAgKSorCiAgICAgICAgKQogICAgICAgIFsjXQogICAgICAgICg/UD5wcm9iZWwpICMg0YXQvtGC0Ywg0YLQsNC60LDRjyDRgdGB0YvQu9C60LAg0Lgg0L3QsNC30YvQstCw0LXRgtGB0Y8g0YDQtdC60YPRgNGB0LjQstC90L7QuSwg0YDQtdC60YPRgNGB0LjQuCDRhNCw0LrRgtC40YfQtdGB0LrQuCDQvdC10YIKICAgICAgICBkZWZpbmUoPz1bXmEtejAtOV9dfFwkKSAjIGRlZmluZSDRgdC/0YDQsNCy0LAg0L7RgiDQutC+0YLQvtGA0L7Qs9C+INC90LUg0YHQuNC80LLQvtC7INC40LvQuCDQutC+0L3QtdGGINGB0YLRgNC+0LrQuAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg0LPRgNCw0LzQvNCw0YLQuNC60LAg0YLRgNC10LHRg9C10YIg0YPRgtC+0YfQvdC10L3QuNGPCiAgICAgICAgKD9QPFRleHRDaHVuaz4KICAgICAgICAgICAgKD86CiAgICAgICAgICAgICAgICBcXFxcW15cXHJcXG5dIHwgIyDRh9GC0L4t0YLQviDRjdC60YDQsNC90LjRgNC+0LLQsNC90L3QvtC1LCDQvdC+INC90LUg0L/QtdGA0LXQstC+0LTRiyDRgdGC0YDQvtC6LCDQuNC70LgKICAgICAgICAgICAgICAgIFxcXFxcXHI/XFxuICAgfCAjINGN0LrRgNCw0L3QuNGA0L7QstCw0L3QvdGL0Lkg0L/QtdGA0LXQstC+0LQg0YHRgtGA0L7QutC4LCDQuNC70LgKICAgICAgICAgICAgICAgIFteXFxyXFxuXSAgICAgICAjINC70Y7QsdC+0Lkg0YHQuNC80LLQvtC7INC60YDQvtC80LUg0L/QtdGA0LXQstC+0LTQsCDRgdGC0YDQvtC60LgKICAgICAgICAgICAgKSorCiAgICAgICAgKQogICAgICAgICg/Olxccj9cXG58XCQpICMg0LrQvtC90LXRhiDRgdGC0YDQvtC60Lgg0LjQu9C4INGC0LXQutGB0YLQsAogICAgKQogICAgICAgIApIRVJFRE9DOwoKJGNsYj1mdW5jdGlvbigkbWF0Y2gpIHsKICAgIGlmIChAJG1hdGNoWyJkZWZpbmUiXSkgewogICAgICAgIHJldHVybiAiPHNwYW4gc3R5bGU9J2NvbG9yOndoaXRlO2JhY2tncm91bmQtY29sb3I6Ymx1ZSc+Ii4kbWF0Y2hbMF0uIjwvc3Bhbj4iOwogICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gJG1hdGNoWzBdOwogICAgfTsKfTsKZWNobyBwcmVnX3JlcGxhY2VfY2FsbGJhY2soIi8kUkUveHVzIiwgJGNsYiwgJHRleHQpOwoKPz4=
c3RyaW5nIGFzZD0mcXVvdDtcCiNkZWZpbmUgc2FkZiZxdW90OzsKIApzZnMgLy8gXAogICAgICAgICMgZGVmaW5lIGV3aWZneXUKICAgICBzZGYgLyoKICAgICAgI2RlZmluZSBkZgogICAgICAgIGFzZAogICAgICAgICovIFwKICAgICAgICBcCiAgICAjICAgICAgIFwKICAgICAgICAgICBkZWZpbmUgc2RmXAogICAgICAgIGRzZmRzZlwKICAgICAgICBzZGZzZGZcXAogICBzZGYgI2RlZmluZQogICAgICAgICNkZWZpbmU=
string asd="\
#define sadf";
sfs // \
# define ewifgyu
sdf /*
#define df
asd
*/ \
\
# \
define sdf\
dsfdsf\
sdfsdf\\
sdf #define
#define