FreeBasic
Главная
Вход
Регистрация
Пятница, 19.04.2024, 09:31Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 7
  • 1
  • 2
  • 3
  • 6
  • 7
  • »
Форум » Вспомогательное программное обеспечение » Вспомогательные утилиты для программистов » IUP_FB_EDITOR (Редактор для Freebasic написанный на Freebasic)
IUP_FB_EDITOR
WQДата: Среда, 18.10.2017, 16:59 | Сообщение # 1
Полковник
Группа: Проверенные
Сообщений: 215
Репутация: 7
Статус: Offline
https://sourceforge.net/projects/iupfbeditor/
Автор, как я понимаю, haav

Неплохо (имхо, все-таки из того что доступно для FB в плане создания GUI - IUP это лучшее)
Можно использовать для Linux32 ( автор poseidonFB от этой версии отказался )
Только аналогично, как и в poseidonFB, у меня в Win в окнах настроек элементы не влезают, не хватает высоты окна wink 
Открыл исходники, в options_dialog.bi у диалогов заменил при установке RASTERSIZE "500x500" и т.д. на, соответственно, "500x" и т.д.
- все элементы стали видны
 
haavДата: Среда, 18.10.2017, 17:18 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Цитата WQ ()
Только аналогично, как и в poseidonFB, у меня в Win в окнах настроек элементы не влезают, не хватает высоты окна


Какая у тебя винда?


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
WQДата: Среда, 18.10.2017, 17:26 | Сообщение # 3
Полковник
Группа: Проверенные
Сообщений: 215
Репутация: 7
Статус: Offline
Цитата haav ()
Какая у тебя винда?
Win 7x64
В настройках экрана размер элементов средний - 125%
Переключил на 100% - все влезает и без изменения RASTERSIZE
 
haavДата: Среда, 18.10.2017, 17:55 | Сообщение # 4
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Цитата WQ ()
В настройках экрана размер элементов средний - 125%
Переключил на 100% - все влезает и без изменения RASTERSIZE


Ааа... , ясно. Да при играх с масштабом элементов, они не влезают. Но в любом случае, вариант с автоподстройкой размера мне не нравится . Все элементы в этом случае грудятся почти без просветов. Я оставлю как есть. Ну а для таких как ты есть исходный код, правьте там что хотите smile

Цитата
Можно использовать для Linux32 ( автор poseidonFB от этой версии отказался )


Наверное потому, что баги и в 3.22 я встречал, а уж в IUP для linux32 их вагон и маленькая тележка. Писал автору IUP насчет багов, но он с прибором положил на поддержку, ну и хрен с ним. Я нашел обходные пути. Хотя надо признать, что один из багов, про который я писал в письме он исправил в 3.23. Возможно сам напоролся...


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
quiet_snow_losДата: Суббота, 21.10.2017, 01:59 | Сообщение # 5
Рядовой
Группа: Пользователи
Сообщений: 16
Репутация: 0
Статус: Offline
Опаля, чего выпустилось. На выходные уезжаю, короче в понедельник потестирую.
Похоже заменка FBEdit-у подъехала. Стас как всегда жжёт. good
 
electrikДата: Суббота, 21.10.2017, 02:40 | Сообщение # 6
Полковник
Группа: Друзья
Сообщений: 180
Репутация: 3
Статус: Offline
Есть пожелание. я как обычно со своими говорилками. короче, заявленная функция автозавершения ключевых слов у меня не видится. возможно, это выводится в каком-нибудь графическом окне, в котором скринридер не видит текст. что если сделать двойную опцию автозавершения опционально, первая как у тебя, а вторая как в пурике, тоесть выползает комбобокс в котором можно выбирать варианты. естественно, когда выползает комбобокс, фокус должен вставать на него. может потом покурю код и найду как это сделать, но пока если есть такая возможность, было бы не плохо нарулить. со временем, вообще можно будет подумать, чтобы он и из инклюдов подстановку делал, но это сложновато. как я понял алгоритм автозавершения scintilla? очень классно, что можно доп утилиты подрубать, таким образом, если кто-то напишет редактор форм, это дело можно будет связывать, ну например при помощи сообщений от одной программе другой, к примеру создали форму, и iup редактору послали сообщение: создай новое окно и прими исходный код формы. обычно такие вещи делаются dll плагинами, это даже и лучше, но москва не сразу строилась, и если со временем будет поддержка плагинов, можно будет рулить что хочешь.
 
haavДата: Суббота, 21.10.2017, 08:20 | Сообщение # 7
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Цитата quiet_snow_los ()
Похоже заменка FBEdit-у подъехала. Стас как всегда жжёт.

Леха, это громко сказано. У FbEdit пока нет конкурентов , ближайший poseidonFB (если автор поработает над багами). Моя поделка скорее замена FbIDE с возможностью писать под Linux. Я уже писал на англоязычном форуме, что редактор не был самоцелью, просто хотел испытать IUP и ICONV в полевых условиях. В итоге, теперь в Linux я могу более менее нормально кодить. А то там с редакторами полный облом. Нет, редакторы конечно есть, но в каждом есть то, что просто заставляет перезагружаться в винду и писать код в винде. Например:
1) Geany не имеет быстрого запуска, непонятная реализация кодировок , плохая реализация Drag-and-Drop текста , ну и еще так по мелочи.
2) WXFBE - проблемы с русским языком в путях, куча мелких багов, но все это не беда, тем более что я под Linux эти минусы устранил. Главная проблема: отсутствие Drag-and-Drop текста , а без него я не могу полноценно работать.
3) poseidonFB - как и в WXFBE , отсутствие Drag-and-Drop текста. Какая-то кривая реализация быстрого запуска (все файлы переносятся куда-то , там компилируются\запускаются , но не удаляются)

Мне же нужен простой инструмент под Linux , чтобы я без напрягов мог писать\править\компилировать любые исходники (в любой кодировке). И чтобы интерфейс был схожим с FbEdit, потому как я за много лет уже привык к данному редактору (иконки\горячие клавишы).

По большому счету я готовлюсь к тому, что придется скоро полностью перебираться на Linux, ведь до прекращения поддержки win7 осталось мало времени, а win10 - это тупик. Кто знает, что взбредет мелкософту дальше, какие "фичи" засунут в свои обновления. И ведь я не смогу помешать установке обновлений на свой комп, я как бы не хозяин на винде... Поэтому редактор не будет лишним. Я уже сделал для себя переводчик под Linux по типу Dicter, правда он использует сервис "Yandex Translate", но тут нет альтернатив, ведь мелкософт и гугл свои сервисы перевели на платную основу. Да, перевод хуже чем у гугл, но для Linux мануалов в принципе хватает и не приходится каждый раз лазить в браузер , чтобы перевести какой-нибудь readme. В принципе игры в последнее время меня мало волнуют, а все остальное на Linux более или менее можно использовать.

Цитата electrik ()
Есть пожелание. я как обычно со своими говорилками. короче, заявленная функция автозавершения ключевых слов у меня не видится. возможно, это выводится в каком-нибудь графическом окне, в котором скринридер не видит текст. что если сделать двойную опцию автозавершения опционально, первая как у тебя, а вторая как в пурике, тоесть выползает комбобокс в котором можно выбирать варианты. естественно, когда выползает комбобокс, фокус должен вставать на него. может потом покурю код и найду как это сделать, но пока если есть такая возможность, было бы не плохо нарулить. со временем, вообще можно будет подумать, чтобы он и из инклюдов подстановку делал, но это сложновато. как я понял алгоритм автозавершения scintilla?


Серега, я вот тоже все время путаю "Автозавершение" и "Автодополнение". У меня не реализовано то, что ты имеешь ввиду. У меня реализовано автозавершение кода, например:

набрал do , нажал Enter , появилось LOOP

В общем все подобные конструкции: sub - end sub , for - next и т.д.

Сразу хочу сказать, что некоторые конструкции работают только если введен минимум:

Например если просто ввести for и нажать enter , автозавершения не произойдет. Нужно ввести минимум подобную конструкцию for i=0 to 1 . Так же while должен содежать что-то после себя через пробел. Sub обязательно должен иметь скобки. Function должна иметь в своей строке ключевое слово AS. А например Select должна иметь Case и что-то после Case. По сути все по правилам синтаксиса FB.

Что касается того, что ты имел ввиду, то я вроде как начал было разбираться в этом, но так и не нашел оптимального способа как сделать автодополнение из типов. То есть дополнение ключевых слов FB сделать не проблема не разу. Для меня проблема сделать дополнение полей TYPE\ENUM\UNION. А пока нет нормальной идеи, которая покажется мне разумной, я автодолнение отложил в долгий ящик. Все дело в том, что я не знаю как реализовать это без тормозов. Вот запустите тот же poseidonFB и начните писать в редакторе. Все вроде работает хорошо. А теперь загрузите туда код скажем с 1500 строками и попробуйте в нем поработать. Тормоза при введении букв будут очень заметными и даже раздражающими. Это не укор автору poseidonFB , он молодец, сделал очень мощную IDE, просто не до конца продумал некоторые вещи.

Некоторые советы при тестировании и вообще использовании:

1) В папке Help есть файлик helpEditorRU.html , желательно прочитать его
2) Не пытайтесь тестировать из под редактора FbEdit в быстром запуске, иначе при компиляции в iup_fb_editor будет наложение EXE(шников). Правильно сделать так: скомпилировать редактор и запустить отдельно.
3) В linux Drag And Drop файлов работает, но перетаскивайте на любые другие виджеты кроме scintilla. Сделано это сознательно, чтобы в scintilla работало перетаскивание текста


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
quiet_snow_losДата: Понедельник, 23.10.2017, 21:26 | Сообщение # 8
Рядовой
Группа: Пользователи
Сообщений: 16
Репутация: 0
Статус: Offline
Скачал посмотрел, 32 битку, быстро потыкал, вроде бы всё работает. Но настраивать конечно каждую такую среду
довольно трудоёмко. Нужно сделать сборку, чтобы 1 раз настроить и не возвращаться к этому вопросу.
- Нужно понять формат пути к компилятору. Можно ли для компиля относительный путь указать.
- Где лежат операторы для подсветки синтаксиса.
- Можно ли зашить шрифт внутрь или опять же только устанавливать.
- Что делает "Convert document in the encoding on the fly" не совсем понятно, да и вообще что происходит
с кодировками, что-то слишком много опций для этого.

Короче надо будет повозиться. Базовое что-нибудь склепать, от чего можно оттолкнуться.
 
haavДата: Вторник, 24.10.2017, 08:00 | Сообщение # 9
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Цитата quiet_snow_los ()
- Нужно понять формат пути к компилятору. Можно ли для компиля относительный путь указать.


Только полный путь

Цитата quiet_snow_los ()
- Где лежат операторы для подсветки синтаксиса.


Все подсвечиваемые слова лежат в папке keywords. Все файлы можно изменять по своему усмотрению. Основной формат: добавлять ключевые слова через пробел, в конце пробела быть не должно. Я разбил команды FB так, как мне удобно и оставил один файл (keywords3) пустым для того, чтобы добавить функции winapi.

Цитата quiet_snow_los ()
- Можно ли зашить шрифт внутрь или опять же только устанавливать.


Шрифты используются системные , то есть берутся из системной папки Windows\Fonts. В linux аналогично, правда в какой папке они лежат, я не интересовался.

Цитата quiet_snow_los ()
- Что делает "Convert document in the encoding on the fly" не совсем понятно


Странно, я ожидал этот вопрос от кого угодно, но только не от тебя. Ведь ты часто смешиваешь ASCII кодировки в одном файле и совсем недавно записывал мне видео на этот счет. Просто в BRED ты это делал с сохраненными файлами , а здесь сохранять не обязательно. Чтобы было понятнее, пример:

1) системная кодировка по умолчанию должна поставлена на "Default System" или ASCII 1251
2) создай новую вкладку , файл сохранять не обязательно
2) вставь туда это:

Цитата
привет мир

ЇаЁўҐв ¬Ёа


3) Нажимай попеременно "Convert document in the encoding on the fly" с кодировками OEM866 и ASCII 1251


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
quiet_snow_losДата: Вторник, 24.10.2017, 21:09 | Сообщение # 10
Рядовой
Группа: Пользователи
Сообщений: 16
Репутация: 0
Статус: Offline
Цитата haav ()
Просто в BRED ты это делал с сохраненными файлами , а здесь сохранять не обязательно.

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

Насколько понял из твоих слов "encoding on the fly" оно только для отображения и не меняет(не конвертирует)
исходные данные(текст, который сейчас загружен в программе).

Цитата haav ()
Только полный путь

Блин ну это вот очень плохо. Просто никогда не любил ставить компиляторы в систему. Патологически не переношу
что-то шаманить с переменными сред. Поэтому portable сборки вида "распаковал и юзаешь" дичайше котирую.
Короче лично для меня юзабилити полностью теряется. Даже не знаю хотел понастраивать, а теперь весь энтузиазм
пропал. Или может всё таки можно как-то, например через "%cd%\..\Compiler\" ?
 
haavДата: Среда, 25.10.2017, 08:09 | Сообщение # 11
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Цитата quiet_snow_los ()
Стас у меня чё-то сейчас соображалка вообще не варит если честно, в такие вопросы надо уходить с головой.
Потому что один раз я себе попортил исходник из-за непонимания работы. Т.е. мне важно понимать что прога
делает с внутренним представлением текста. Т.е. когда она что-то делает тупо для отображения и когда она
меняет именно кодировку внутреннего представления(мультибайтовую или может даже самопальную какую).

Насколько понял из твоих слов "encoding on the fly" оно только для отображения и не меняет(не конвертирует)
исходные данные(текст, который сейчас загружен в программе).


Леха, пока ты не нажмешь Сохранение файла , с твоим текстом на диске никаких операций не происходит. Конвертируй во что хочешь, все что ты делаешь в редакторе, остается только в памяти. Но тут я хочу напомнить, что при компиляции файла, текст автоматически сохраняется, однако это не касается быстрого запуска (F5).

Как работает "encoding on the fly":

1) текст из редактора конвертируется из UTF-8 в кодировку, которая была ему присвоена до использования функции "encoding on the fly" (отображается в Statusbar).
2) Далее текст конвертируется из новой кодировки (которая требуется) в UTF-8. То есть не общается внимание на то, в какой кодировке она была, а подставляется в Iconv значение новой кодировки, как будто бы текст в этой кодировке закодирован. То есть производится практически та же операция "Открыть файл заново в другой кодировке" , но не обращаясь к жесткому диску.

Цитата quiet_snow_los ()
Или может всё таки можно как-то, например через "%cd%\..\Compiler\" ?


Извини я немного попутал. Для компилятора поддерживаются относительные пути. Относительные пути не поддерживаются у файла справки и инструментов. Однако этот минус ты можешь сам устранить за несколько минут. Открой файл callbacks.bi и найди две функции item_tools_custom_callback , item_helps_custom_callback . Перед вызовом IupExecute просто сравнивай в переменной sPath два первых символа например с $A . Если равно, то замени в строке эти два символа на команду exepath. Тогда в путях редактора ты сможешь указывать например так: $A\help\help.chm


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
electrikДата: Среда, 25.10.2017, 18:06 | Сообщение # 12
Полковник
Группа: Друзья
Сообщений: 180
Репутация: 3
Статус: Offline
да, с автозавершением сложно. но есть идеи. поскольку исходник программы состоит чаще не из одного файла, автозавершение идет из тех файлов, которые загружены в проект. тоесть, для нахожждения типов, констант, парсится не файлы из #include "test.bi", а из добавленного файла в проект. таким образом, упрощается задача, распарсивания, не всего что заинклюжено. далее, для винды можно создать файлы в которых будут записаны все windows api функции, структуры, константы, присутствующие в заголовочных файлах FreeBasic. к сожалению, с линуксовым api, такого в заголовочных файлах нет. далее, но это сложнее, заюзать ассоциативные массивы, которых нет во FreeBasic, значит написать модуль на c++ или например на пурике. с пуриком сложнее, ибо у тебя опенсурс. почему ассоциативный?- думаю ты знаешь про такое, в них достаточно быстро можно находить данные. и последнее, самое сложное, распарсить, код файлов загруженных в проект, пусть примитивно но чётко отделить функции, константы, структуры. придется писать явно в 2 потока, юзер написал какое-нибудь слово, нажал пробел или скобку или кавычку, то что является как бы разделителем, и во втором потоке идет переинициализация текущего рабочего файла, и выстраивается новый список подстановки. писать парсер с абстрактными деревьями - это жесть, и я даже не представляю как оно работает.

Добавлено (25.10.2017, 18:06)
---------------------------------------------
поповоду map, можно не писать модуль на c++, а написать библиотеку обёртку, для каждого базового типа свои простые функции, ну по принципу любимого пурика: addMapElement, FindMapElement и т.д.

 
WQДата: Среда, 25.10.2017, 21:05 | Сообщение # 13
Полковник
Группа: Проверенные
Сообщений: 215
Репутация: 7
Статус: Offline
Цитата electrik ()
заюзать ассоциативные массивы, которых нет во FreeBasic

На FB можно все это написать
Хотя бы http://users.freebasic-portal.de/freebasicru/data_structure.html
А я обычно использую хэш-таблицу из IUP, +50 килобайт
 
haavДата: Четверг, 26.10.2017, 10:14 | Сообщение # 14
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Цитата electrik ()
да, с автозавершением сложно. но есть идеи. поскольку исходник программы состоит чаще не из одного файла, автозавершение идет из тех файлов, которые загружены в проект. тоесть, для нахожждения типов, констант, парсится не файлы из #include "test.bi", а из добавленного файла в проект. таким образом, упрощается задача, распарсивания, не всего что заинклюжено. далее, для винды можно создать файлы в которых будут записаны все windows api функции, структуры, константы, присутствующие в заголовочных файлах FreeBasic. к сожалению, с линуксовым api, такого в заголовочных файлах нет. далее, но это сложнее, заюзать ассоциативные массивы, которых нет во FreeBasic, значит написать модуль на c++ или например на пурике. с пуриком сложнее, ибо у тебя опенсурс. почему ассоциативный?- думаю ты знаешь про такое, в них достаточно быстро можно находить данные. и последнее, самое сложное, распарсить, код файлов загруженных в проект, пусть примитивно но чётко отделить функции, константы, структуры. придется писать явно в 2 потока, юзер написал какое-нибудь слово, нажал пробел или скобку или кавычку, то что является как бы разделителем, и во втором потоке идет переинициализация текущего рабочего файла, и выстраивается новый список подстановки. писать парсер с абстрактными деревьями - это жесть, и я даже не представляю как оно работает.

Добавлено (25.10.2017, 18:06)
---------------------------------------------
поповоду map, можно не писать модуль на c++, а написать библиотеку обёртку, для каждого базового типа свои простые функции, ну по принципу любимого пурика: addMapElement, FindMapElement и т.д.


Серега, я все это обдумывал конечно. Однако когда начинаю раскручивать в голове какой нибудь путь решения, голова начинает пухнуть как представлю сколько всего надо учесть. Становится понятно, почему у известных редакторов под FB такие далеко не идеальные реализации. Как ты и сказал, это сложная тема. Я не отчаиваюсь, просто нужно время, иногда даже много времени. Наш мозг похоже так устроен, что если ему дать задачу и постоянно "подталкивать", рано или поздно решение будет найдено.

Цитата WQ ()
А я обычно использую хэш-таблицу из IUP, +50 килобайт


Ну уж нет, если уж использовать ассоциативные массивы, то только на FB. Я уже научен горьким опытом с IupConfig. Тем более, что реализация уже есть на основе красно-черных деревьев (ты сам указал ссылку), чуть подправить только для своих нужд.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
WQДата: Четверг, 26.10.2017, 16:22 | Сообщение # 15
Полковник
Группа: Проверенные
Сообщений: 215
Репутация: 7
Статус: Offline
Цитата haav ()
Ну уж нет, если уж использовать ассоциативные массивы, то только на FB. Я уже научен горьким опытом с IupConfig. Тем более, что реализация уже есть на основе красно-черных деревьев (ты сам указал ссылку), чуть подправить только для своих нужд.
Я оттуда использовал какой-то пример хэш-таблицы, где можно сделать доступ к указателю через строковый ключ - что-то оно было не очень стабильно, возможно, что я все слишком усложнил
И в хэш-таблице из IUP в случае занесения указателей бывали глюки. А вот вариант, где данные - строка и ключ - строка, довольно стабилен, разбирать текстовые данные или удалять повторения в массивах строк очень удобно, хорошо работает даже если ключей сотни тысяч и миллионы. Время доступа по ключу примерно в 100 раз больше, чем время доступа к элементу массива по номеру, но это очень небольшие значения. Скорее всего там какой-нибудь стандартный пример на C 

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

А по IUP_FB_EDITOR:
В fbnp.bas после 
Код
IupSetAttribute(TGlobalVariables->dlg, "RASTERSIZE", IupConfigGetVariableStr(TGlobalVariables->hConfig,"DialogSize","dlgsize"))

добавил 
Код
If IupGetInt(TGlobalVariables->dlg, "RASTERSIZE") >= IupGetInt(NULL, "FULLSIZE") Then
      IupSetAttribute(TGlobalVariables->dlg, "PLACEMENT", "MAXIMIZED")
   EndIf
Иначе, если окно программы было максимизировано до закрытия, при следующем запуске, по крайней мере, у меня, системные кнопки как-то странно немного задвигались за пределы экрана

И еще добавил с помощью LoadKeyboardLayout в Win-варианте раскладку по умолчанию при запуске.
Открыл программу - и сразу, допустим, латиница
 
Форум » Вспомогательное программное обеспечение » Вспомогательные утилиты для программистов » IUP_FB_EDITOR (Редактор для Freebasic написанный на Freebasic)
  • Страница 1 из 7
  • 1
  • 2
  • 3
  • 6
  • 7
  • »
Поиск: