Модераторы: Vitalik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Правила подсветки, Создание, проблемы, обсуждение 
:(
    Опции темы
Vvoland
Дата 30.11.2004, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 30.11.2004

Репутация: нет
Всего: нет



Как сделать выцвечивание 16-х и 8-х чисел, но только с тем отличием, что если в них находятся запрещенные цифры то они выцвечивались как не легальные тобишь для 16-х: все буквы после F, для 8-х: цифры после 7-ки ивсе буквы.
PM MAIL   Вверх
Vitalik
Дата 30.11.2004, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

Репутация: 9
Всего: 12



На сколько я понял, тебе нужно добиться следующего эффекта:
Цитата
HexValue := $123ABC; // Подсветка шестнадцатиричного числа
BadHexValue := $123ABCK // Неправильное шестнадцатиричное число

С существующей идеологией такого эффекта нормально добиться нельзя. Значит нужно что-нибудь придумать/додумать...

У меня были некоторые соображения по этому поводу.
Например, можно расширить правило SymbolSet еще парой параметров: From и To на манер правил Range. Таким образом после открытия правила на символы From будут проверяться последующие символы на соответствие списку допустимых символов и если всё ок, то будет подсвечиваться. Иначе - возврат к символам From и поиск другого подходящего правила...
Правда когда я думал на эту тему, то обнаружил ряд подводных камней. Поэтому эту идею нужно еще хорошенько обдумать... и не только саму идею, но и реализацию... Если кому-нибудь это интересно, напишите, что вы думаете по этому поводу!

Может быть будут еще какие-нибудь предложения? smile
PM MAIL WWW ICQ YIM   Вверх
Vvoland
Дата 1.12.2004, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 30.11.2004

Репутация: нет
Всего: нет



Я еще хуже хочу:
HexValue := $123ABC; // Подсветка шестнадцатиричного числа
BadHexValue := $123ABCK ; // Неправильное шестнадцатиричное число
Согласен что с существующими идеалогией, как ты имел место выразиться smile, добиться этого сложно, но если работать со вложенными правилами оно должно заработать - но не работает.
Вариант: Может завести какой-нить преоритет для правил, чтобы одно не накрыволо другое? ;)
PM MAIL   Вверх
Vitalik
Дата 1.12.2004, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

Репутация: 9
Всего: 12



Хм... Та нет, это не хуже smile Хм... И это теоретически возможно и должно работать...
В любом случае нужно кардинально пересмотреть работу правил... Особенно правила SymbolSet...
Интересно, есть ли желающие помочь мне в этом? smile
PM MAIL WWW ICQ YIM   Вверх
jasny
Дата 2.12.2004, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 30.11.2004

Репутация: нет
Всего: нет



позвольте и мне поучастовать.

я считаю, что если число правильное, то оно должно подсвечиваться (это ежели диапазон правильно определен)

а вот ежели число не правильное, то его подсвечивать вовсе не надо

не хватало чтобы еще компонент, заместо человека разбирался в тексте

не знаю до конца всю идеологию (Виталик ее постоянно правит), но данная промблема решилась бы легко так: для этого диапазоно надо определять не только границами, но и содержимым

т.е. определяем 2 диапазона:
1. Первый диапазон - хекс-число, оно считается правильным, ежели начинается с $ и заканчивается разделителем и содержит только определенные символы (цифры + A+ B+C+)

подсвечивать зеленым

2. Второй диапазон - не хекс-число, ежели начинается с $ и заканчивается разделителем и содержит все что угодно

подсвечивать красным


При этом важен порядок проверки правил (т.е. еще и надо и устанавливать и порядок)

и все, ТЕЛЕМАРКЕТ

PM MAIL   Вверх
Vvoland
Дата 2.12.2004, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 30.11.2004

Репутация: нет
Всего: нет



2jasny
Я вот так и пытался сделать:
Сначала завел(он был) диапазон - хекс-число, оно считается правильным, ежели начинается с $ и заканчивается разделителем, внутри него завел последовательность из неправильных букв и зделал ее другого цвета, но такая фишка не проходит.
Вроде по логтке должно все работать smile

PM MAIL   Вверх
Vitalik
Дата 3.12.2004, 02:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

Репутация: 9
Всего: 12



2jasny
Цитата(jasny @ 2.12.2004, 12:59)
позвольте и мне поучастовать.

Конечно же позволяем smile Спасибо за участие в обсуждении smile А то я уже подумал, что это никому не интересно... smile

Цитата(jasny @ 2.12.2004, 12:59)
я считаю, что если число правильное, то оно должно подсвечиваться (это ежели диапазон правильно определен)
а вот ежели число не правильное, то его подсвечивать вовсе не надо

Так-то оно так, но мы ведь должны сделать компонент "на все случаи жизни" smile То есть, чтобы с его помощью можно было подсветить как можно больше разнообразных схем... smile

Цитата(jasny @ 2.12.2004, 12:59)
для этого диапазоно надо определять не только границами, но и содержимым

Хм... А вот это интересная идея!.. Я до этого хотел расширить немного SymbolSet до правила Range, а вот объединение этих правил - это дейтсвительно интресеная мысль!.. По крайней мере до тех пор, пока не лезть в исходники smile
Хм... Вот только интересно, не усложнит ли это идеологию правил подсветок?.. Или может наоборот? smile
smile


Цитата(jasny @ 2.12.2004, 12:59)
При этом важен порядок проверки правил (т.е. еще и надо и устанавливать и порядок)

Да... Надо, надо будеть как-нибудь добавить что-то вроде Drag&Drop в дерево правил...


2Vvoland
Цитата(Vvoland @ 2.12.2004, 15:27)
Я вот так и пытался сделать:
Сначала завел(он был) диапазон - хекс-число, оно считается правильным, ежели начинается с $ и заканчивается разделителем, внутри него завел последовательность из неправильных букв и зделал ее другого цвета, но такая фишка не проходит.
Вроде по логтке должно все работать

Так-то оно так, но не совсем... Дело в том, что сейчас правило SymbolSet (например, цифры или твои "неправильные буквы"), подсвечивается только если составляющие его символы отделяются слева и справа разделителями, которые в свою очередь берутся у родительского диапазона A. Эти же разделители используются для определения закрытия нашего диапазона A при выборе галочки "Закрывать после разделителя", поэтому получается небольшая нестыковка... Мысль ясна?
Частичным решением может быть задание для правила SymbolSet (или его мутанта с правилом Range) нового свойства: могут ли составляющие его символы быть всередине слова (то есть не отделяться разделителями). Например, как сейчас:
Цитата
123 123text Label1
либо
Цитата
123 123text Label1

Нуна это делать, и если делать, то как лучше?
Я об этом уже много дум передумал... Слишком много... Нужен свежий взгляд на проблему smile
PM MAIL WWW ICQ YIM   Вверх
jasny
Дата 3.12.2004, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 30.11.2004

Репутация: нет
Всего: нет



Цитата
Так-то оно так, но мы ведь должны сделать компонент "на все случаи жизни" То есть, чтобы с его помощью можно было подсветить как можно больше разнообразных схем...


с этим я не совсем согласен. надо сделать достаточно гибкий компонент. т.е. не надо напрягаться на предмет всех всевозможных случАев - это приведет к усложнению работы компонента и заодно к замедлению работы.

достаточно - как бы в математическом смысле (см. определение "необхомого" и "достаточного"), чтобы хватало только на те случаи, на которые мы рассчитываем.

если в какой-то момент разработку не остановить, то она пеерйдет в постоянное состояние. это как ремонт, котрорый нельзя закончить, а можно только остановить.

эк меня расколбасило, хватит философии теперь к делу.

внутренняя логика компонента мне видится так.

сокращаем количество видов правил до 2-х: Keyword, Range

Keyword

определятеся заранее заданным списком

в большинстве случаев открывается и закрывается разделителями

но может потребовать и набор выражений для открытия/закрытия

Range

определяется выражениями для открытия/закрытия и списком символов (SymbolSet), которые находятся внутри Range

список символом может и быть не задан (яркий пример строка в кавычках)

Что такое выражение открытия/закрытия?

Набор выражений для открытия/закрытия, например
- Выражение1:
открывается
- символом @
и
закрывается
- разделителем или переводом строки или символом $
- Выражение 2:
открывается
- символом #
и
закрывается
- разделителем или символом $

Выражение1 от Выражения2 отличается порядком применения сначало всегда проверяется Выражение1, а затем Выражение2

приведу более понятный пример выражения открытия/закрытия для определения Range-"Строка"
1. Выражение1:
- открывается '
- закрывается ' или переводом строки
1. Выражение2:
- открывается "
- закрывается " или переводом строки

или вот еще еще пример выражения открытия/закрытия для определения Range-"Строчный Комментарий"
1. Выражение1:
- открывается //
- закрывается переводом строки

===============================
теперь насчет 123 123text Label1

123 - надо подсвечивать (это Range-Цифры, обрамленный разделителями)
123text и Label1 - не надо подсвечивать, так как список символов для Range-Цифры не удовлетворяет

хотя если изменить правило Range-Цифры, что выражение открытия/закрытия содержит не только разделители, но и буквы, тогда получится:

123tex2t





PM MAIL   Вверх
Ciber SLasH
Дата 18.12.2004, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: нет
Всего: 67



Напорлся на одни грабли, по ходу они не разрешимы... а очень хотелось бы их разрешить smile .
Есть некий ini-файл, в нём содержатся такие настройки (и соответственно сама подсветка):
Temp.ini: (текущая подсветка)
Цитата

[Shortcuts]
;==[ Команды из меню "Запуск" ]=================================================
F11=705  ; TCFS (Hide interface)
F12=706  ; TCFS (Restore TC)
;===============================================================================

[Selection]
15=*.ico; *.icl; *.jpg; *.jpeg; *.gif; *.png; *.psd; *.pcx; *.tga; *.bmp; *.cur; *.ani; *.avi


А это правильная подсветка:
Temp.ini: (как должно быть)
Цитата

[Shortcuts]
;==[ Команды из меню "Запуск" ]=================================================
F11=705  ; TCFS (Hide interface)
F12=706  ; TCFS (Restore TC)
;===============================================================================

[Selection]
15=*.ico; *.icl; *.jpg; *.jpeg; *.gif; *.png; *.psd; *.pcx; *.tga; *.bmp; *.cur; *.ani; *.avi


Подсветка тут: >>>

Какие будут мысли ?
PM   Вверх
Vitalik
Дата 19.12.2004, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

Репутация: 9
Всего: 12



Ciber SLasH, а по какому принципу нужно отличать точку с запятой в строках F12 (коментарий) и 15 (не коментарий)?..

Один из вариантов (не очень хороший может быть) это после знака равно коментарий начинать не только с символа точки запятой, а еще и с предшествующим ему пробелом, то есть открывающими символами сделать " ;".
PM MAIL WWW ICQ YIM   Вверх
Ciber SLasH
Дата 28.12.2004, 05:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: нет
Всего: 67



Цитата(Vitalik @ 19.12.2004, 01:07)
то есть открывающими символами сделать " ;".

Да, но если вместо первого пробела стоит табуляция, то уже не подсвечивается smile

Возникла ещё одна проблема с другой подсветкой. smile
Есть подсветка для M-файлов (Matlab), в них существует строки начинающиеся и заканчивающиеся на одинарную кавычку ( ' ), но в Matlab'e также могут одинарной кавычой после переменной обозначаться транспонированные матрицы. Вот тут то и начинаются траблы smile

Test.m: (текущая подсветка)
Цитата
dB=cov((A*Aw*x)')-B;    % погрешность корреляционных свойств
[ux,vx]=eig(cov(x'));   % собственные числа и векторы корреляционной матрицы "белого" шума
legend('x1(t)','x2(t)','y(t)','y_{ред.}(t)')
figure('Menubar','None',1);


Test.m: (правильная подсветка)
Цитата
dB=cov((A*Aw*x)')-B;    % погрешность корреляционных свойств
[ux,vx]=eig(cov(x'));   % собственные числа и векторы корреляционной матрицы "белого" шума
legend('x1(t)','x2(t)','y(t)','y_{ред.}(t)')
figure('Menubar','None',1);


Подсветка тут

Как побороть ?

Это сообщение отредактировал(а) Ciber SLasH - 28.12.2004, 05:52
PM   Вверх
Vitalik
Дата 30.12.2004, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

Репутация: 9
Всего: 12



Цитата(Ciber @ 28.12.2004, 05:46)
Да, но если вместо первого пробела стоит табуляция, то уже не подсвечивается

Да, действительно... Ведь получается пока что нет никакой возможности ввести куда-нибудь в правило символ табуляции! smile
Создал по этому поводу отдельную тему: Использование в правилах символа табуляции...
Давай попробуем найти хорошее решение этой проблемы smile

Цитата(Ciber @ 28.12.2004, 05:46)
Есть подсветка для M-файлов (Matlab), в них существует строки начинающиеся и заканчивающиеся на одинарную кавычку ( ' ), но в Matlab'e также могут одинарной кавычой после переменной обозначаться транспонированные матрицы.

Пока что эту "проблему" можно решить следующим образом.
У корневого разделя нужно убрать из разделителей символ одинарной кавычки ( ' ), чтобы парсер считал эту кавычку частью слова и смог её найти только после раздедителя. Таким образом если кавычка будет после буквы, цифры и любого другого символа, не считающимся разделителем, то парсер её пропустит и не откроет диапазон 'строка'.
Также не помешает убрать из разделителей символы закрывающих скобок ( [color=blue]] } )[color] ), потому как одинарная кавычка (апостроф) обозначает транспонирование и после скобок smile

Точно такая же проблема была и у Ильи Папиашвили. И я ему посоветовал такое же решение проблемы. Ниже выкладываю его изменённую подсветку.

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  Matlab.hgl
PM MAIL WWW ICQ YIM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | SynUniHighlighter и SynEdit | Следующая тема »


 




[ Время генерации скрипта: 0.0522 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.