Ремесло программиста

Объявление

форум на движке phpBB доступен для тестирования
www.strategia.space
www.strategia.space/forum/
по предложению Лиса - канал на Matrix - #remdev:matrix.org

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Ремесло программиста » Существующие среды разработки » Текстовый редактор


Текстовый редактор

Сообщений 1 страница 6 из 6

1

Сделал текстовый редактор с подсветкой синтаксиса . Пока правда альфа и ещё много чего хочется доделать. Качаем тестируемым делимся впечатлениями.
Ссылка
https://downloader.disk.yandex.ru/preview/3733a11b5fa7abf643b916ea2cc54c11fe628811638144da39ed679edb17e00b/inf/JZDcLSDGKeooY-s86HbgP4JTj_hrP2kFTHF5pFeiuopyCVXm4VtUJAQqaRwU-yJSjvzBNb6438CdQdqzf_FSHA%3D%3D?uid=0&filename=2018-03-10_21-04-22.png&disposition=inline&hash=&limit=0&content_type=image%2Fpng&tknv=v2&size=830x936

2

архив с исходниками (паскаль или что-то похожее)
без инструкции по сборке, вероятно можно собрать с помощью lazarus, как систему Уткина
содержит "резервные копии" - файлы с префиксом ~ в расширении (также известные как "мусор")
не описаны возможности подсветки, поэтому компилировать нет мотивации (а бинарники не запускаю, религия запрещает)

3

Form1 в заголовке.
Не увидел in  в списке ключевых слов и таки да, не подсвечивает in.
Дальше - это не подсветка синтаксиса, а подсветка ключевых слов. Можно 50 раз написать begin в строке и все они выделятся, что совершенно некорректно для синтаксиса.

вероятно можно собрать с помощью lazarus, как систему Уткина

Нет, это Делфи 7.

не описаны возможности подсветки

Plexer.KeyWord[0]:='Program';
Plexer.KeyWord[1]:='Declaration';
Plexer.KeyWord[2]:='Implementation';
Plexer.KeyWord[3]:='Begin';
Plexer.KeyWord[4]:='End';
Plexer.KeyWord[5]:='uses';
Plexer.KeyWord[6]:='Const';
Plexer.KeyWord[7]:='Type';
Plexer.KeyWord[8]:='VAR';
Plexer.KeyWord[9]:='Label';

Plexer.KeyWord[10]:='function';
Plexer.KeyWord[11]:='procedure';
Plexer.KeyWord[12]:='array';
Plexer.KeyWord[13]:='record';
Plexer.KeyWord[14]:='asm';
Plexer.KeyWord[15]:='assembler';
Plexer.KeyWord[16]:='stdcall';
Plexer.KeyWord[17]:='if';
Plexer.KeyWord[18]:='then';
Plexer.KeyWord[19]:='else';

Plexer.KeyWord[20]:='for';
Plexer.KeyWord[21]:='to';
Plexer.KeyWord[22]:='downto';
Plexer.KeyWord[23]:='do';
Plexer.KeyWord[24]:='repeat';
Plexer.KeyWord[25]:='until';
Plexer.KeyWord[26]:='while';
Plexer.KeyWord[27]:='goto';
Plexer.KeyWord[28]:='case';
Plexer.KeyWord[29]:='of';

Plexer.KeyWord[30]:='shl';
Plexer.KeyWord[31]:='shr';
Plexer.KeyWord[32]:='mod';
Plexer.KeyWord[33]:='div';
Plexer.KeyWord[34]:='not';
Plexer.KeyWord[35]:='or';
Plexer.KeyWord[36]:='and';
Plexer.KeyWord[37]:='xor';
Plexer.KeyWord[38]:='nil';
Plexer.KeyWord[39]:='forward';

Plexer.CommentPrefix :='//';
Plexer.Comment2Begin :='{';
Plexer.Comment2End :='}';
Plexer.NumberPrefix :='$';
Plexer.CharPrefix :='#';
Ключевые слова следует хранить во внешних файлах, для гибкости. Там не сложно же - загнать в TStringList. И да, цвета тоже следует хранить в том же файле.

NL:string=#13#10;

В линуксе строки могут заканчиваться по-другому. У Лиса даже на эмуляторах в теории могут возникнуть косяки при запуске.

Зачем нужна TForm1.Button1Click? Это тестовая процедура?

Для подсветки есть готовый https://ru.wikipedia.org/wiki/SynEdit
В свое время он не подошел как раз из-за такого же как у Вас метода, а именно подсветки ключевых слов, а не синтаксиса. Иными словами - SynEdit также подсвечивает слово, независимо от того корректна ли запись в строке. В результате будет расцвечена например строка:
if if if if if if if for for for for then then then to to to
что абсолютно не приемлимо. На мой взгляд, строка должна расцвечиваться только в том случае, если она не имеет явных косяков. Я в свое время корячился для В-1, там косячные строки просто выделялись красным (для этого напрягался парсер языка), для остальных уже применялись расцветки слов.
http://sd.uploads.ru/t/FdWB5.jpg
http://sd.uploads.ru/t/MfHmV.jpg
Правда подсветка там все равно глючила страшно....

ЗЫ. Packed тоже нет. Вам надо выверить список ключевых слов языка.

Отредактировано utkin (2018-03-11 22:53:19)

4

utkin написал(а):

Нет, это Делфи 7.

Именно поэтому что Delphi 7 в  Lazarus можно с конвертировать нажатием пары кнопок.

utkin написал(а):

Form1 в заголовке.

- частично поправил.
SynEdit - не хватает гибкости, он не умеет красить в разные цвета ключевые слова только делать их жирными. А у меня есть возможность красить в разные цвета, да к тому же поддерживается курсив. Поэтому хочется оформить компонентом, но пока не решил стоит или нет. Вот только что тогда делать с тогда с lazarus'ом?

utkin написал(а):

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

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

utkin написал(а):

В линуксе строки могут заканчиваться по-другому.

Знаю поэтому в парсере все разбирается корректно. Но вот TStringList после загрузки всегда преобразовывает в 2 символа.  Поэтому когда его заменю будет и то и другое, а так же полная поддержка Unicod'а.  А пока можете поиграться  с русскими ключевыми словами, их можно добавить в список.

utkin написал(а):

Зачем нужна TForm1.Button1Click? Это тестовая процедура?

Да тестовая.  Наверно после добавления открытия файла она стала не к чему.

utkin написал(а):

такого же как у Вас метода, а именно подсветки ключевых слов, а не синтаксиса.

Это скорее экзотика. Так как мешает нормально использовать макросы.  Поэтому все предпочитают простой набор правил который позволяет решить ключевое это слово или нет ещё на стадии лексического анализа не вынося на верх в синтаксический анализ.
Можно попробовать сделать виртуальными классы/методы. Тогда пользователь сможет перегрузить классы под свой синтаксический анализатор.

utkin написал(а):

ЗЫ. Packed тоже нет. Вам надо выверить список ключевых слов языка.

В моем языке нет ключевого слова Packed. Когда появится появится и в списке. Хотя тут скорее вопрос сделать для каждого языка свой класс или  же грузить данные из файлов?

5

Поэтому хочется оформить компонентом, но пока не решил стоит или нет. Вот только что тогда делать с тогда с lazarus'ом?

Делать для него компонент отдельно.

Поэтому файлы частично будут ограничивать такую возможность.

Я не увидел каким это образом. Что ключевые слова сразу в массиве, что их сначала достали из файла в массив. Не знаю как это влияет на подчеркивание.

Но вот TStringList после загрузки всегда преобразовывает в 2 символа.

Потому что теория 60-х годов и люди слепо идут по ней, не задумываясь, что вообще-то уже 21-й век на дворе. И зачем Вам вообще будет заморачиваться с переходом строк, если СтрингЛист и так знает когда какая строка закончилась. Обрабатывайте не поток символов, обрабатывайте строки. Тогда рассматривать, чем заканчивается строка вообще нет смысла - более мощно и универсально.

а так же полная поддержка Unicod'а.

Не полная поддержка Юникода у Вас будет из коробки, если сразу будете работать в Лазарусе, а не в Делфи 7. Лазарус пока не умеет корректно обрабатывать BOM. Я на не знании этого факта потерял месяц работы над парсером :).

Это скорее экзотика.

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

Хотя тут скорее вопрос сделать для каждого языка свой класс или  же грузить данные из файлов?

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

ЗЫ. На 10-ке курсив в таком редакторе смотрится истинно отвратительно. Поэтому уже сейчас цветовые схемы форматирования актуальны для хранения во внешнем файле.

Отредактировано utkin (2018-03-12 14:55:20)

6

Чем твоя программа отличается от вот этого
https://extensions.libreoffice.org/exte … ighlighter
расширения к LibreOffice Write?

Твоя программа написана на английском языке.
Твоя программа подкрашивает английские ключевые слова.

То расширение делает то же самое...


Вы здесь » Ремесло программиста » Существующие среды разработки » Текстовый редактор