Не понял пару вещей.
У вас данные по спану хранятся отдельно(может для этого у вас и используется спан список) и если скролить то они берутся из этого хранилища или каждый раз вычисляются, если даже ничего не введено(тогда какие функции у спан списка)?
Если проскролить на одну строчку, то спан будет вычисляться только для новой строки или для всего что на экране?
У меня каждый раз вычисляются, так как я опасаюсь, что в каком-нибудь 3000+ строк кода файле будет их так много, что выскочит OOM. Но честно говоря я не пробовал, и в принципе попробовать стоит.
Но спаны, которые уже размещены и которые в области видимости я не перевставляю в EditText.
Можно, но мне кажется, все же узким место будем в любом случае UI thread и метод setSpan, так что не уверен что пользователь вообще заметит прирост перформанса. Но я все равно попробую, спасибо за мысль.
вы бы не могли оформить свое решение в форме опен сорс библиотеки? мне было бы интересно попробовать
сам использовал для посветки кода CodeMirror вместе с WebView
отличный вам пример использования GitHub Android клиент. Там CodeMirror как раз используется для подсветки кода. Правда немного устаревшей версии, попробую позже обновить.
То есть, здесь не только об IDE на андроид речь идет, всякие GitHub, Gitlab клиенты и другие приложения, отображающие код — потенциальные пользователи :)
Ничего вам не могу сказать о потоках в javascript, не осведомлен. простое отображение кода без редактирования работает довольно шустро.
Плюс с приходом полноценного Chromium движка для Android WebView уверен подобные вещи значительно ускорятся.
Так это вообще совсем другое дело. Просто подкрасить текст это совсем несложно. Другое дело, когда одна измененная буква требует перестройки AST и соответственно раскраски.
Я понимаю, что у AST есть и другие задачи, но для подсветки-то зачем его использовать?
Допустим, мы показываем исходный текст на Java. В тексте есть строки с escape-последовательностями, которые хорошо бы выделять цветом/стилем. Чем вам тут поможет AST? Будете хранить один строковый литерал в виде целого поддерева или всё же обработаете все escape-последовательности ещё в лексере?
Подсветка кода на android. Мой опыт