|
Модераторы: Vitalik |
|
Kordub |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 21.2.2005 Репутация: нет Всего: нет |
В общем, поюзал Delphi 8 и обнаружил там классную новую подсветку - когда курсор расположен возле одной из парных скобок, обе скобки выделены голубым бэкграундом. Сильно упрощает чтение выражений со скобками. Реализовано ли это у вас а если нет, то можно ли сделать?
|
|||
|
||||
Vitalik |
|
|||
Опытный Профиль Группа: Координатор проекта Сообщений: 653 Регистрация: 8.11.2004 Где: Ukraine, Kharkov Репутация: 9 Всего: 12 |
Сделать можно. Вот пример кода:
Если есть вопросы по коду - задавай! P.S. Была небольшая опечатка в коде, только что исправил. Это сообщение отредактировал(а) Vitalik - 23.2.2005, 00:12 |
|||
|
||||
Kordub |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 21.2.2005 Репутация: нет Всего: нет |
Не работает, так как не может найти парную скобку. Не работает почему-то GetMatchingBracketEx - все время возвращает нулевую позицию. Pos2 = (0,0) и обработчик события завершается по условию
|
|||
|
||||
Vitalik |
|
|||
Опытный Профиль Группа: Координатор проекта Сообщений: 653 Регистрация: 8.11.2004 Где: Ukraine, Kharkov Репутация: 9 Всего: 12 |
Странно...
А у тебя какая подсветка для SynEdit'а выбрана? |
|||
|
||||
Kordub |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 21.2.2005 Репутация: нет Всего: нет |
SynUniSyn
|
|||
|
||||
Vitalik |
|
|||
Опытный Профиль Группа: Координатор проекта Сообщений: 653 Регистрация: 8.11.2004 Где: Ukraine, Kharkov Репутация: 9 Всего: 12 |
||||
|
||||
Quadr0 |
|
|||
Unregistered |
...
Это сообщение отредактировал(а) Quadr0 - 14.7.2011, 20:13 |
|||
|
||||
Vitalik |
|
|||
Опытный Профиль Группа: Координатор проекта Сообщений: 653 Регистрация: 8.11.2004 Где: Ukraine, Kharkov Репутация: 9 Всего: 12 |
Quadr0, добро пожаловать к нам на огонёк! (я про форум)
Очень рад новому участнику!
Эта процедура только найдёт парную скобку, а Kordub просил сделать подсветку парной скобки при попадании на неё курсора Но всё равно спасибо за попытку помочь! |
|||
|
||||
Quadr0 |
|
|||
Unregistered |
...
Это сообщение отредактировал(а) Quadr0 - 14.7.2011, 20:15 |
|||
|
||||
Vitalik |
|
|||
Опытный Профиль Группа: Координатор проекта Сообщений: 653 Регистрация: 8.11.2004 Где: Ukraine, Kharkov Репутация: 9 Всего: 12 |
А чем не устраивает приведённый мной код? А за демку - спасибо, не замечал её до селе... |
|||
|
||||
Coriolis |
|
|||
Ищущий Профиль Группа: Участник Сообщений: 101 Регистрация: 22.8.2005 Репутация: 1 Всего: 1 |
Нефигасебе здоровый код! Чтобы реализовать эту удобственность...
В смысле это вообще в синэдите не предусмотрено... А ведь такая удобная весчь! Странно. |
|||
|
||||
Coriolis |
|
|||
Ищущий Профиль Группа: Участник Сообщений: 101 Регистрация: 22.8.2005 Репутация: 1 Всего: 1 |
Добавлю, что код Vitalik работает, а из демки - нет.
|
|||
|
||||
ActioN |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 56 Регистрация: 12.4.2005 Репутация: нет Всего: нет |
Quadr0, Vitalik, а у вас случайно нету готового рабочего кода на C++ Builder'e для реализации этой функции?
|
|||
|
||||
miksayer |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 21.11.2004 Репутация: нет Всего: 1 |
угу, у меня тот же вопрос. Не могу перевести
|
|||
|
||||
Coriolis |
|
|||
Ищущий Профиль Группа: Участник Сообщений: 101 Регистрация: 22.8.2005 Репутация: 1 Всего: 1 |
Вот, вернулся к проекту, возникла трябла.
В ключевых словах у меня прописаны операторы. Существуют и переменные с именем оператора. Поэтому возникает ситуация: переменная подсвечивается как оператор. Чтобы избежать этого я начал извращаться: в ключевых словах к операторам добавляю символы, например Операторы: B S M B: M: S: Вот, и ещё создал набор KeyWords, с названием NOToperators, и цветом как обычные символы: B= B, B) M= M, M) S= S, S) т.е. операторы не могут встречаться в тексте рядом с такими символами. Но вот проблема: код для подсветки парных скобок, который привёл Vitalic, не видет такой скобки. Не могу понять - почему. пример: s a=$$abc^abc(1,2,s) Первую скобку видит, а последнюю - нет. Игнорирует. |
|||
|
||||
Vitalik |
|
||||||||
Опытный Профиль Группа: Координатор проекта Сообщений: 653 Регистрация: 8.11.2004 Где: Ukraine, Kharkov Репутация: 9 Всего: 12 |
Coriolis, извини, что не ответил вчера. Сейчас немного не хватает времени... Плюс я немного приболел
А что это за язык такой, если не секрет? Можешь также прислать мне свою подсветку для него? Пиши на highlighters[at]gmail.com
Гм... А по каким правилам определяется является слово переменной или оператором?..
А это всё из-за того, что в приведённом алгоритме скобки будут подсвечиваются только если они в тексте являются отдельными лексемами... (или что-то вроде того)
В принципе можешь удалить эти строчки и проверку... Но тогда получай Bracket1 другим способом... |
||||||||
|
|||||||||
Coriolis |
|
||||||
Ищущий Профиль Группа: Участник Сообщений: 101 Регистрация: 22.8.2005 Репутация: 1 Всего: 1 |
Да брось - не за что. Выздоравливай.
Язык - M, процедурный, идёт вместе с БД. Интерпретируется, программы хранятся на сервере. Чё ещё сказать? О! Cashe - это потомок эМа, просто прикрутили (как кто-то сказал - за уши) объекты. А так - cashe тот же эМ. Конкретно - для СУБД MSM (Micronetic Systems M кажется). а чем переменные отличаются - это от контекста зависит. Для экономии памяти принято сокращать операторы до одной буквы, напр оператор SET (аналог в васике - LET) - s, GOTO - g, DO (аналог в вdвасике GOSUB) - d. вот, напр s s=13 переменной s присваевается значение 13, т.е. SET s=13 Поэтому если перед и после s стоит пробел - это оператор. Если после/перед s запятая или скобка - это переменная (например её передали как параметр) Вот пример кода: ; функция find - чего-то там ищет в файле find(fstr) n str,findfl s findfl="" f d q:((findfl)!($zc)) .s str=$$read() .q:str="" .;s str=$zzup($zzdsp(str,5)) .s:str[fstr findfl=1 q:$zc "" q str (табуляция в начале строки, кста -обязат)
Не понял - куда слать? |
||||||
|
|||||||
Vitalik |
|
||||||
Опытный Профиль Группа: Координатор проекта Сообщений: 653 Регистрация: 8.11.2004 Где: Ukraine, Kharkov Репутация: 9 Всего: 12 |
Ничего себе Бывает же такое! По-моему читабельность программы от этого сильно падает
Это там надо считать, что вместо точек стоит табуляция?
Шли на мыло: highlighters (собачка) gmail.com Или можешь прикрепить здесь к своему сообщению (этот вариант более желателен) |
||||||
|
|||||||
Coriolis |
|
||||||
Ищущий Профиль Группа: Участник Сообщений: 101 Регистрация: 22.8.2005 Репутация: 1 Всего: 1 |
Ага, я тоже так подумал - когда знакомился с языком. Но это позволяет уменьшить память, т.к. текст интерпретируется.
Да не, быстро привыкаешь и без проблем читаешь исходняк, поверь мне.
Нет-нет, точки - это часть синтаксиса, это аналок {} в сях или begin end в паскале - уровень обозначают. А табуляция - именно #9. Сейчас прикреплю, но учти - сырой файл, т.к. "в процессе". Тяяяяк. Не вижу кнопки прикрепит файл. Мож я маленький есчё? Тада шлю на мыло. |
||||||
|
|||||||
GORI |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 29.10.2005 Где: Ukraine, Kharkov Репутация: нет Всего: нет |
Если использовать SynPHPSyn1 то все работает, а если SynUni и подгрузить лайтер для PHP то нет.
В чем причина? |
|||
|
||||
Vitalik |
|
||||||||
Опытный Профиль Группа: Координатор проекта Сообщений: 653 Регистрация: 8.11.2004 Где: Ukraine, Kharkov Репутация: 9 Всего: 12 |
Эта кнопка должна появляться после предварительного просмотра сообщения
Значится так... Coriolis и GORI, можете модифицировать код следующим образом:
Теперь скобки будут подсвечиваться абсолютно везде, где будут найдены Потому как теперь мы будет отталкиваться не от найденной лексемы (Token), а от реальных симоволов в тексте (Lines) Добавлено @ 17:32
Да, письмо получил Когда подсветка будет готова можешь выложить её на сайте www.unihighlighter.com |
||||||||
|
|||||||||
Coriolis |
|
|||
Ищущий Профиль Группа: Участник Сообщений: 101 Регистрация: 22.8.2005 Репутация: 1 Всего: 1 |
Ой, не в ту тему написал! сорри.
Это сообщение отредактировал(а) Coriolis - 31.10.2005, 19:22 |
|||
|
||||
GORI |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 29.10.2005 Где: Ukraine, Kharkov Репутация: нет Всего: нет |
Блин Ну не работает оно с UniHighlighter... Можете примерчик простенький набросать? чтоб именно с загрузкой лайтера из файла...
Виталик самый щедрый на примеры |
|||
|
||||
Vitalik |
|
|||
Опытный Профиль Группа: Координатор проекта Сообщений: 653 Регистрация: 8.11.2004 Где: Ukraine, Kharkov Репутация: 9 Всего: 12 |
||||
|
||||
Vitalik |
|
|||
Опытный Профиль Группа: Координатор проекта Сообщений: 653 Регистрация: 8.11.2004 Где: Ukraine, Kharkov Репутация: 9 Всего: 12 |
А вот вместе с EXE
(жаль нельзя к одному сообщению несколько файлов прикрепить) Присоединённый файл ( Кол-во скачиваний: 57 ) HighlightBrackets_exe.zip 370,59 Kb |
|||
|
||||
Coriolis |
|
|||
Ищущий Профиль Группа: Участник Сообщений: 101 Регистрация: 22.8.2005 Репутация: 1 Всего: 1 |
Ок, спасибо за пример. Я его только поправил - чтобы не светилась скобка, которая находится за перед курсором.
Тут мне Snowy указал на глюк: алгоритм подсветки НЕ игнорирует скобки внутри кавычек. Чего-то не пойму, как это профиксить... |
|||
|
||||
Vitalik |
|
|||
Опытный Профиль Группа: Координатор проекта Сообщений: 653 Регистрация: 8.11.2004 Где: Ukraine, Kharkov Репутация: 9 Всего: 12 |
Гм... Так сходу ничего и получается... Есть как минимум два пути: 1. Переписать метод SynEdit.GetMatchingBracketEx под свои нужды. Например, вставить нужные фильтры. Как то, игнорирование скобок во всех диапазонах или в диапазонах с определёнными именнами или еще что-нить 2. Сделать возможность в компоненте задавать свойство StringAttribute (которое объявлено только для чтения у потомка всех подсветок TCustomHighlighter). Просто в реализации метода SynEdit.GetMatchingBracketEx уже есть фильтрация диапазонов строки и комментария. Нужно лишь реализовать возможность в нашем компоненте задавать какие именно диапазоны (а точнее их атрибуты) являются диапазонами "строки" и "комментария" |
|||
|
||||
zvyagaaa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 13.1.2008 Репутация: нет Всего: нет |
а можно ли как-то сделать, чтобы парные скобки выделялись бы еще и разными цветами.? Как в экселе в строке формул?
поясню, к примеру (((1/2)*2)-2) Это сообщение отредактировал(а) zvyagaaa - 1.6.2009, 05:18 |
|||
|
||||
Coriolis |
|
|||
Ищущий Профиль Группа: Участник Сообщений: 101 Регистрация: 22.8.2005 Репутация: 1 Всего: 1 |
Кстати да, крутая штука.
zvyagaaa, ты если реализовал - поделись пожалуйста) |
|||
|
||||
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | SynUniHighlighter и SynEdit | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |