Записи

Первый этап (Плагин для роста городов на myminicity.com)

1 год назад (2009/01/10 19:53:04)

Я уже не раз писал, о том, что Мегатрон строит свой город. А мне интересно им помогать. Но в одиночку справляться скушно, да и процесс помощи должен быть глобальным. Поэтому я прошу у вас помощи:

Все кто пользуется FireFox и не боится небольшого дополнительного трафика. Поставьте пожалуйста дополнение MyMiniCity Updater (Для тех кому не дают ставить оттуда. можно поставить по этой ссылке). Это дополнение будет проверять наш город пока запущен браузер и по возможности строить в нём нужные объекты. Вся проблема заключается в том, что с одного IP можно сделать одну постройку за сутки. Поэтому заходить надо каждый день. А просить вас заходить и не забывать я, конечно, могу, но эффект будет слабый.

Для тех кто строит свои города, можно выставить в настройках чтобы обновлялись они. Правда по человечески прошу не удалять мегатрон. Пусть мы будем расти вместе.

Шпионка для ленивых

1 год назад (2008/12/04 00:01:58)

Иногда попадается интересный человек, и есть желание поглядеть его внешность. Для этого у нас есть фотоальбом в ЖЖ у пользователя. Но не всегда его можно поглядеть. Но, вот люди, добавляя фотографии в него забывают о самом главном: Ограничить доступ к фотографиям.

Просмотр фотографий у пользователя


Пара, тройка доработок

1 год назад (2008/09/23 02:03:33)

Сегодня меня пропёрло чуть-чуть попрограммировать, и вот что вышло:

  • Первая версия направляющий у тех веток комментариев, которые имеют ответы ниже, чтобы было легче искать. дальше, в планах. приделать красивые полосочки им.
  • Заодно сделал у себя в дневнике ссылочку на подсчёт статистики комментариев для записи. Смысл только в увеличении рейтинга у поисковиков =)
  • И самое не нужное, но полезное на последок. Сделал небольшой Javascript для отображения полосы прогресса. Позже у [info]20947 выложу как пользоваться и с чем кушать. Но теперь будет понятно, что идёт загрузка статистик и примерно сколько она ещё собирается грузиться.

Полоски и линейки

1 год назад (2008/09/10 04:17:27)

Несколько дней, я по вечерам и ночам, занимался создаением инструмента, для возможности быстро сделать себе линеечку, на сайт или форум. Пол года назад, или даже больше, я уже обещал людям заняться и сделать, возможность создавать полоски.

Сегодня сервис будет в тестовом режиме, попробуйте и выскажите предложения и найденные ошибки. Ну и если вам надо полоску которой у меня нету, то рисуйте и кидайте я добавлю, это же относится и к бегункам.

У полосок есть два текста, до события и после. Оценивайте!

html парсер. Часть третья. Разбор текста.

2 года назад (2007/11/25 19:11:19)

Наверное самая большая часть кода и самая важная тут.

	function Parse($text){

$text=preg_replace($this->ReplaceTagsFrom,$this->ReplaceTagsTo,$text);

@preg_match_all('/([^\<]*?)\<(\/?)([^\s]+?)((?:(?:\s+(?:[\w]+?)=("|\')(?:[^\5]*?)(?<!\\\\)\5)*?)(?:\s*)\/?)\>/',$text.'<br />',$textdrop);
$tags=array();
if(count($textdrop[0])==0)
return htmlspecialchars($text);
foreach($textdrop[0] as $id=>$line){
$pretext=$textdrop[1][$id];
$closetag=$textdrop[2][$id]=='/';
$curtag=strtolower($textdrop[3][$id]);
$tagparam=$textdrop[4][$id];
if ($closetag){
// TagClose
if ((count($tags)>0)&&($tags[0]==$curtag)){
$newtext.=htmlspecialchars($pretext).'</'.$curtag.'>';
array_shift($tags);
continue;
}else{
$newtext.=htmlspecialchars($pretext).'&lt;/'.$curtag.'&gt;';
continue;
}
}
elseif (!isset($this->allow[$curtag])){
}else{
// TagOpen
preg_match_all('/\s([\w]+?)=("|\')((?:[^\2]*?)(?<!\\\\))\2/',$tagparam,$params);
$param='';
foreach($params[0] as $pid=>$line){
if (in_array(strtolower($params[1][$pid]),$this->allow[$curtag]))
if (strtolower($params[1][$pid])=='href'){
// Провека ссылок
preg_match('/(?:(\w*?):)(.*)/',$params[3][$pid],$link);
if ((count($link)==0)||(in_array(strtolower($link[1]),$this->AllowProtocols)))
$param.= ' '.$params[1][$pid].'='.$params[2][$pid].$params[3][$pid].$params[2][$pid];
}else
$param.= ' '.$params[1][$pid].'='.$params[2][$pid].$params[3][$pid].$params[2][$pid];


}
if (in_array($curtag,array_keys($this->allow))){
if (!in_array($curtag,$this->simpletag)){
array_unshift($tags,$curtag);
$newtext.=htmlspecialchars($pretext).'<'.$curtag.$param.'>';
}else{
$newtext.=htmlspecialchars($pretext).'<'.$curtag.$param.' />';
}
continue;
}
}

 


$newtext.=htmlspecialchars($pretext).'<'.($closetag?'/':'').$curtag.htmlspecialchars($tagparam).'>';

}
foreach($tags as $tag)
$newtext.='</'.$tag.'>';

return $newtext;
}

Если рассматривать работу данного скрипта по порядку, то:

  1. Сначала производится замена тегов согласно правил замены.
  2. Происходит разбор всего текста с помощью регулярного выражения. Получилось немного громоздкое, но работоспособное.
  3. Проверка количства найденых тегов, и если почему-то ничего не нашлось, то вывод текста, всё равно с экранированием лишнего, вдруг обошли регулярку.
  4. Начинается цикл по всем найденным тегам, вот и началось всё инетересное.
    1. В начале может быть странный текст не относящийся к тегам.
    2. Проверям наличие / в началетега, тем самым определяем что происходит.
    3. Вытаскиваем имя тега и его параметры.
    4. Если тег закрывается, то мы проверям допустимость закрытия его, то есть, что он был открыт последним или просто отображаем его на экране, как текст.
    5. Если тег не закрывался, то надо проверить, может ли он открываться и если может, то
      1. Производим разбор всех параметров у тега в массив.
      2. Проходим по массиву параметров и проверям доступность их применения их у тега.
      3. Если параметр является ссылкой, то ещё дополнительно разбираем её отделяя протокол если передан.
      4. Проверив протокол на правильность мы записываем параметр к тегу.
      5. Если тег может открываться, хмм... Ну ладно два раза не будет лишним проверить.
      6. В зависимости отприменения тега одиночным или нет, мы добавим в стек тегов его или нет и также занесём в код.
    6. Если мы таки не нашли что делать нам с тегом, то выведем его как есть на экран.
  5. Остаётся пробежаться по всем не закрытым тегам и закрыть их.

Вот и готов текст.

Авторизация


Поиск на сайте