Тестим подсветку кода.
Aleko
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
переписал подсветку кода. в паблик пока не поставил и на форум не установил. хочу сначала пофиксить возможные баги. так что вот вам тестовый файл: 2 поля, в верхнее впечатываете код, в нижнем он автоматически подсвечивается. пробуйте найти ошибки подсветки и пишите о них в тему. я проверял во всех ослах и в нормальных браузерах. работает везде за исключением переключения режима переноса строк в осле 5.5 и глюками этого же переключения в 6 и 7 ослах. в 8 всё отлично.
- исправлены ошибки с подсветкой регулярных выражений (вродебы 100%) - вообще много чего исправлено
Бесплатные обои.
DSC
Группа: Проверенные
Пользователь №: 127
Сообщений: 516
Получено оценок: 41
Не делает отступы: aka Latro Сообщение отредактировал DSC - Суббота, 07.11.2009, 12:10
Aleko
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
DSC , знаю. Это дань кроссбразуерности - в осле сделать сохранение форматирования текста очень сложно ввиду нескольких свалившихся в кучу багов - innerHTML, стирающего форматирование и очень криво работающего white-space. Кстати нумерации строк не будет ни в каком виде.
Бесплатные обои.
DSC
Группа: Проверенные
Пользователь №: 127
Сообщений: 516
Получено оценок: 41
А, ну тогда ещё одно, юкозовские коды не подсвечиваются! aka Latro
Aleko
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
DSC , подсветка конструкций отключена. Она будет позднее.Бесплатные обои.
Aleko
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
Тема ап, прошу внимания. Сейчас добавляю в подсветку новую фичу - распознавание и подсветка js кода в css expressions. Для нахождения самих эспрешенов написал вот такую страшноужассную регулярку, которая работает со скобками и определяет, когда скобки закрыты, а когда нет.
Code
<script>:/(expression\s*)(\((?:\\\)|(\((?:\\\)|(?:\(.*?)\)|(?:'.*?)\)(?:.*?')|(?:\/.*?)\)(?:.*?\/)|(?:".*?)\)(?:.*?")|[^\)])*\))|(?:\/.*?)\)(?:.*?\/)|(?:'.*?)\)(?:.*?')|(?:".*?)\)(?:.*?")|[^\)])*\))/ig</script>
Меня интересует, можно ли вообще её сократить? (про мелкие сокращения с кавычками и слешами знаю, но число групп лень считать))
Пример работы регулярки (зеленым выделен определенный регуляркой участок):
expression()
с пустыми скобками не определяется, так как подсвечивать нечего.
expression() )
определит до первой закрывающей скобки
expression(\))
но пропустит заслешованную скобку
expression(')'")"/)/)
или скобки в кавычках и в регулярном выражении
expression(())
так же пропустит закрытые скобки
Вроде бы всё. Работает у меня всё верно. млин. нашел ошибку, туплю...
Бесплатные обои.
Aleko
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
Так, новая версия пошла в паблик. тестим прямо на форуме. Бесплатные обои.
Aleko
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
Уважаемые пользователи! Срочно начинаем дружно искать баги в новой версии подсветки кода. В паблик она ещё не выложена но уже стоит на моем сайте. Из новшеств: поочередная подсветка строк, нумерация строк, возможность переносить длинные строки, если они не влезают в экран.
Я так же сделал возможным соблюдение разметки и локально у меня всё отлично работало, но вот ucoz увы сам запарывает всю разметку, так что эта функция отключена.
Скрипт почти полностью переписан и должен работать быстрее. Но ошибки наверняка есть. очень прошу мне помочь с дебугой)
Пример работы:
Code
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Верстка от AD</title> <style type="text/css"> html, body {margin:0;height:100%;} #wrapper {height:auto !important;height:100%;min-height:100%;min-width:800px;} #header {height:200px;} #left {float:left;width:200px;} #right {float:right;width:200px;} #center {margin:0 200px 0 200px;} #spacer {height:100px;} #footer {height:100px;margin-top:-100px;} .clear {clear:both;} </style> </head> <body> <div id='wrapper'> <div id='header'> <!-- Содержимое хэдэра --> </div> <div id='container'> <div id='left'> <!-- Содержимое левой колонки --> </div> <div id='right'> <!-- Содержимое правой колонки --> </div> <div id='center'> <!-- Содержимое центральной колонки --> </div> </div> <div class='clear'></div> <div id='spacer'></div> </div> <div id='footer'> <!-- Содержимое футера --> </div> </body> </html>
Бесплатные обои.
Aleko
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
Code
Тест запарывания пробелов системой: Тут должно быть 10 пробелов: ! ! Тест запарывания табов системой: Это текст с одним табом. Это текст с двумя табами. С тремя.
Такс. Пробелы не режутся. А вот табы режутся. Обидно. Ко всем в обработанном коде появляется куча лишних пробелов. Надо будет написать свой бб код [code] с нормальной обработкой символов.
Бесплатные обои.
Aleko
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
Так, в 6 и 7 ослах всё падает. это я знаю. Бесплатные обои.
DSC
Группа: Проверенные
Пользователь №: 127
Сообщений: 516
Получено оценок: 41
Aleko , ты написал, что есть нумерация строк, и где она?aka Latro
frost
Группа: Проверенные
Пользователь №: 344
Сообщений: 29
Получено оценок: 7
посмотри внимательно на код... слева синим цветом
frost
Группа: Проверенные
Пользователь №: 344
Сообщений: 29
Получено оценок: 7
Code
<!-- Многострочный коммент работает -->
DSC
Группа: Проверенные
Пользователь №: 127
Сообщений: 516
Получено оценок: 41
frost , сейчас уже есть) Aleko , посмотри на сообщение #13 , там в нумерации 1 и 2 слелись!aka Latro
Aleko
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
DSC , сейчас уже всё нормально.
Бесплатные обои.
MrOizo
говорун
Группа: Проверенные
Пользователь №: 42
Сообщений: 188
Получено оценок: 6
Aleko , у меня почему-то цифры сливаются
Aleko
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
нда, в опере глюк Бесплатные обои.
Aleko
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
вернул пока старый вариант. Бесплатные обои.
frost
Группа: Проверенные
Пользователь №: 344
Сообщений: 29
Получено оценок: 7
Aleko , для нумерации лучше такой код Code
<script> eachLine = function() { var _8 = studioad.get(".codeMessage") for (_9 = 0; _8.length > _9; _9++) { var _10, _1e, _2a, _3a, _3b, _3c, _4a; _10 = _8[_9]; _10e = _10.innerHTML; _11 = 1; _12a = /*@cc_on!@*/false ? /(<BR>)/ig : /(<br(?:\s*\/)?>)/ig; _12b = /(<td class=['"]?number['"]?>)(\d{1})\.(<div.*?>)?(<\/td>)/ig; _12c = /(<td class=['"]?number['"]?>)(\d{2})\.(<\/td>)/ig; _12d = _10e.replace(_12a, function () { return '</td></tr><tr><td class="number">' + (++_11) + '.</td><td class="content">' }); tabs = function () { _10e = '<table class="tbl" border="0" cellpadding="0" cellspacing="0"><tr><td class="number">1.<div style="overflow:hidden;width:35px;"></div></td><td class="content">' + _12d + '</td></tr></table>'; if (_11 > 9 && _11 < 100) { _10e = _10e.replace(_12b, '$10\$2.\$3') } else if (_11 >= 100 && _11 < 1000) { _10e = _10e.replace(_12b, '$10\$2.\$3').replace(_12c, '$10\$2.\$3') } _10e = _10e.replace(/(<td class=['"]?content['"]?>)(<\/(td|tr)>)/ig, '$1 $2') }; tabs(); _10.innerHTML = _10e +'<div class="menu"><a href="javascript:" onclick="setbrs(this,'+_9+');">не переносить динные строки</a></div>' } };eachLine(); </script>
работает даже в ie5; а для табов можно заменять напирмер __tab4__, __tab3__, ... 4 3 - количествро табов
Code
<script> padTab = function () { var oneTabPaddingPx = 30; var _13 = studioad.get(".content"); for (_14 = 0; _13.length > _14; _14++) { var _15 = _13[_14]; _15.innerHTML = _15.innerHTML.replace(/(__tab)(\d+)(__)/g, function (_16a, _16b, _16c, _16d) { _15.style.paddingLeft = _16c * oneTabPaddingPx + 'px'; return _16a.innerHTML = ''; }); } };padTab(); </script>
класс content потомучто в table -> content (думаю ты понял) работает тоже вездеСообщение отредактировал frost - Вторник, 17.11.2009, 12:35
Aleko
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
frost , спасибо конечно, но лучшести не вижу. А табы убирает ucoz, я бы их сохранил в теге pre именно табами.Бесплатные обои.
frost
Группа: Проверенные
Пользователь №: 344
Сообщений: 29
Получено оценок: 7
ну этот код получше тем что более точно под себя можно подогнать оформление.. а насчет тега pre в ie вроде какието баги есть.. помойму там не работает "\n"
Aleko
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
frost , с pre я все баги решил уже. Но на ucoz его увы не поиспользуешь - код не тот выдается, лишнего куча.Бесплатные обои.
Aleko
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
Таакс. Значит вроде бы баги я пофиксил. И всё подсвечивается правильно. Тестим: Бесплатные обои.
DSC
Группа: Проверенные
Пользователь №: 127
Сообщений: 516
Получено оценок: 41
Aleko , ты конечно такой геморрой сделал, с <li> былобы гораздо проще!))aka Latro
frost
Группа: Проверенные
Пользователь №: 344
Сообщений: 29
Получено оценок: 7
DSC , так настроить диз проще
DSC
Группа: Проверенные
Пользователь №: 127
Сообщений: 516
Получено оценок: 41
ну пох, я нашёл типо баг, короче он не распознаёт вот такое: 1074; 1086; 1090;(без пробелов после решётки) aka Latro Сообщение отредактировал DSC - Пятница, 20.11.2009, 13:36
MrOizo
говорун
Группа: Проверенные
Пользователь №: 42
Сообщений: 188
Получено оценок: 6
А где можно качнуть последнюю версию подсветки?
neio
говорун
Группа: Проверенные
Пользователь №: 128
Сообщений: 195
Получено оценок: 26
MrOizo , вроде вот Но эта версия вроде в паблик еще не вышла
Aleko
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
Quote (DSC )
я нашёл типо баг
C этим придется смириться.Бесплатные обои.
DSC
Группа: Проверенные
Пользователь №: 127
Сообщений: 516
Получено оценок: 41
Aleko , да?, ну ладно...) хотя у меня вроде есть идея как такое сделать, хочешь напишу в аську)aka Latro
Aleko
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
Так, снова всё обновил. Вроде багов нет. Проверяем. Бесплатные обои.
Slimmi
говорун
Группа: Модераторы
Пользователь №: 5
Сообщений: 287
Получено оценок: 38
Aleko , проверяем и пока багов не наблюдаем Большие фотостатусы
Vanofuture
молчун
Группа: Пользователи
Пользователь №: 35
Сообщений: 27
Получено оценок: 2
Знаю что не так важно, но всё-таки regexp-проблемы не решены Code
<script type="text/javascript"> var lol = i++ //ilold var lol = (navigator.cookieEnabled && /666/ig.test('666')); var brainfuck = /(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\ \[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]| 2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1 f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/i; </script>
Aleko
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
Vanofuture , я упростил их решение) кстати, в dreamweaver экспы подсвечиваются только после скобки круглой и равно. Всё, больше ни после чего. Так что я хз, к чему склонятся)) Что касается браинфака: смотрим скрин (слеши то экранировать надо и регекспы в одну строку писать):
Бесплатные обои.
Vanofuture
молчун
Группа: Пользователи
Пользователь №: 35
Сообщений: 27
Получено оценок: 2
Quote (Aleko )
в одну строку писать
Fukken uCoz parser! Quote (Aleko )
слеши то экранировать
В наборах символах разве тоже? Code
javascript: alert(/[asd/]+/.test('/'))
Quote (Aleko )
в dreamweaver
Если в дриме есть ошибки не нужно их копировать
Aleko
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
Quote (Vanofuture )
В наборах символах разве тоже?
на сколько я знаю - да, другое дело что ещё можно экранировать любое количество символов между \Q и \E. Вот этого я не учел, буду исправляться.Бесплатные обои.
Aleko
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
Вобщем вот такая регулярка у меня получилась:
Code
/(\,|\+|\=|\||&|>|<|\:|\?|\(|\[|\{)(\s*)(\/(?=[^\*])(\\\/|\\Q.*?\/.*?\\E|[^\/<>\n\r])+\/|\/\/)([gim]{0,3})/g
Бесплатные обои.
ZheKA
молчун
Группа: Проверенные
Пользователь №: 89
Сообщений: 38
Получено оценок: 4
Можно ли там где Quote
Исходный код | Переносить строки
как нибудь добавить строку "Скопировать код" ?
UnderShot
Группа: Модераторы
Пользователь №: 45
Сообщений: 923
Получено оценок: 85
ZheKA , флеш нужен.Очень важная тема! Filmzona — онлайн фильмы .
Hammer
Группа: Пользователи
Пользователь №: 2965
Сообщений: 9
Aleko , сделай-ка цвет выделения цифр равным с бэкраундом синим, как бы понт.
ZheKA
молчун
Группа: Проверенные
Пользователь №: 89
Сообщений: 38
Получено оценок: 4
Quote (UnderShot )
ZheKA, флеш нужен.
А разве на JS нельзя?
DSC
Группа: Проверенные
Пользователь №: 127
Сообщений: 516
Получено оценок: 41
ZheKA , нет нельзя!aka Latro