Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Онлайн редактор дял гиков (https://javascript.ru/forum/misc/11805-onlajjn-redaktor-dyal-gikov.html)

tenshi 14.09.2010 15:51

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

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

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

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

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

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

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

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

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

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

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

MadGest 15.09.2010 12:08

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

tenshi 15.09.2010 16:45

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

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

а сабж предназначен для написания статей и коментариев к ним.

tenshi 15.09.2010 16:49

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


Часовой пояс GMT +3, время: 11:17.