Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.09.2010, 15:51
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

Онлайн редактор дял гиков
грубо говоря - текстарея с подсветкой синтаксиса

поскольку подсветка происходит по мере набора, то скорость тут является критическим моментом.

что применяется сейчас:

текст парсится одной регуляркой вида /([\\s\\S]*?)(...)|$)/ где вместо многоточия идёт список паттернов захватывающих части текста, соответствующие определённым синтаксисам. благодаря такой реализации синтаксисы могут конкурировать по принципу "кто первый встал - того и тапки". да, это не позволяет точно распарсить язык, но для целей подсветки вполне хватает вроде бы.

подсвечиватель каждого языка - это простая функция, но она оборачивается в специальный кэширующий враппер. это позволяет лишний раз не производить подсветку, если в нём ничего не поменялось - для объёмных текстов с большим числом параграфов это весьма полезно.

цикл подсветки осуществляется так: вырезаются все переводы строк, br-ки преобразуются в переводы строк, потом вырезаются все тэги - в результате получается читый текст, который направляется на заданную функцию подсветки синтаксиса, которая добавляет свои тэги, сохраняя все символы (только переводы строк заменяются на br-ки и экранируются спец-символы)
полученный хтмл вставляется в скрытую текстарию и в ифрейм.

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

также подсветка выполняется с троттлингом, то есть если вы вводите текст слишком быстро - подсветка производиться не будет пока скорость ввода не замедлится.

чтобы курсор не слетал перед обновлением хтмл-а производится вычисление символьного смещения курсора, потом обновление содержимого и в конце установка курсора на запомненную позицию. к сожалению для этого приходится бежать по дому считая символы. к тому же, метод довольно ненадёжный =(

попробовать альфу можно тут: http://mojura.110mb.com/i-component/i-field.html

предлагайте свои идеи как что ускорить или сделать более расширяемо.
__________________
.ня

Последний раз редактировалось tenshi, 14.09.2010 в 15:55.
Ответить с цитированием
  #2 (permalink)  
Старый 15.09.2010, 12:08
Кандидат Javascript-наук
Отправить личное сообщение для MadGest Посмотреть профиль Найти все сообщения от MadGest
 
Регистрация: 12.07.2010
Сообщений: 123

В Опере тоже глючит. Особенно подсветка синтаксиса. А по поводу советов по улучшению поюзай GoogleDocs. Функционал как редактора текста там отменный. А как редактор кода EditArea посмотри.

Последний раз редактировалось MadGest, 15.09.2010 в 12:11.
Ответить с цитированием
  #3 (permalink)  
Старый 15.09.2010, 16:45
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

гуглодоки я каждый день использую. и функционала его не хватает - прежде всего из-за отсутствия автоматической подсветки.

эдитарея - годится лишь как редактор кода. и то с натягом - подсветка там реализована так, что неправильный яваскрипт внутри хтмл ломает подсветку хтмл после скрипта.

а сабж предназначен для написания статей и коментариев к ним.
__________________
.ня
Ответить с цитированием
  #4 (permalink)  
Старый 15.09.2010, 16:49
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

кстати, завёл репу на гитхабе: http://github.com/sairi-na-tenshi/i-component
__________________
.ня
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск