Подсветка синтаксиса:
Это приходит на ум. Я на самом деле не пробовал этот пример, поэтому я не могу ничего сказать о производительности, но, похоже, это самый простой способ заставить основной синтаксис выделить и запустить.
Авто-завершение:
Имея список возможных ключевых слов (которые могут быть отфильтрованы по контексту), вы можете быстро отбросить все, что не соответствует тому, что пользователь в данный момент печатает. В большинстве языков вы можете смело ограничивать себя одним «словом», так как пробел обычно недопустим в идентификаторе. Например, если я начну вводить «li», база данных автозаполнения может отбросить все, что не начинается с букв «l» и «i» (игнорируя регистр). Поскольку пользователь продолжает печатать, все больше и больше опций могут быть отброшены, пока не останется только один - или, по крайней мере, несколько. Поскольку вы просто смотрите по одному слову за раз, это действительно будет очень быстро.
Отступ:
Быстрый и грязный подход, который (вроде бы) работает на C-подобных языках, состоит в том, чтобы иметь счетчик, который вы увеличиваете один раз для каждого '{', и уменьшаете один раз для каждого '}'. Когда вы нажимаете Enter, чтобы начать новую строку, уровень отступа равен counter * indentWidth
, где indentWidth
- это постоянное количество пробелов или табуляций для отступа. Это страдает серьезным недостатком, однако, рассмотрим следующее:
if(foo)
bar(); // This line should be indented, but how does the computer know?
Чтобы справиться с этим, вы можете искать строки, заканчивающиеся на ')', а не точку с запятой.