Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > SynUniHighlighter и SynEdit > UniHighlighter 2.0 Beta1


Автор: Vitalik 3.7.2006, 16:26
Внимание!

После восьмимесячного перерыва выпущена таки версия компонента UniHighlighter 2.0 beta1smile

Об основным изменениях можно прочитать начиная с http://forum.vingrad.ru/index.php?showtopic=68206&view=findpost&p=774436 сообщения темы "UniHighlighter 2.0 Alpha", но попытаюсь все таки немного подытожить smile

Основные изменения в компоненте:
  • Возобновлена работа экспорта в HTML
  • Возможность задания подсветки на этапе проектирования формы
  • Проведена частичная адаптация компонента к Delphi 5, C++ Builder 5,6 (загрузка/сохранение для этих версий пока не работает из-за использования TXmlDocument, отсутствующего в этих средах)
  • Работа со встроенными атрибутами (может использоваться к примеру для определения атрибута по местоположению в подсвеченном тексте)
  • Реорганизация всего механизма загрузки/сохранения подсветок (в том числе возможность безпроблемного становления компонента на новый парсер или новый формат файла)
Изменения, связанные с дизайнером (редактором) для компонента
  • Дизайнер от версии 1.8 адаптирован к версии компонента 2.0 (в том числе поддержка CodeFolding и мультитегов)
  • Возможность использования встроенного дизайнера для компонента (на этапе проектирования формы)
  • Возможность использовать дизайнер не только в качестве exe'шника, но и вызывать одной строчкой в программе, передавая ему подсветку.
Некоторые мелкие изменения (все и не вспомнить)
  • Исправлена загрузка файлов версии 1.5 (сделано правильное считывание именно текущей цветовой схемы)
  • Исправлена ошибка при сбросе свойства FileName компонента после загрузки файла
  • Исправлено считывание свойства AllowNoSubs в правилах CodeFolding'а при загрузке из файла подсветки
  • Исправлена ошибка при неправильном считывании булевых свойств правил подсветки (Delphi6)
  • Убраны некоторые Warning'и Hint'ы (но не все, так как некоторые напоминают о некоторых моментах)
  • Исправлен текст Exception'а у LoadFromFile правил при неправильном формате файла
Примечание: модули и классы импорта подсветок из других форматов переименованы из SynUniImport* в SynUniFormat*

Скачать компонент можно, как обычно, здесь: http://www.unihighlighter.com/index.php?download=unihighlighter
Информацию по установке компонента желательно прочитать здесь: http://www.unihighlighter.com/index.php?showpage=install

P.S. В архив компонента входят исходники, установочные пакеты и одна демка UniManager (остальные демки можно взять из архива UniHighlighter 2.0 Alpha)

P.P.S. Я уезжаю на неделю, поэтому своевременно ответить не смогу. Но все же пишите сюда все багрепорты по поводу этой бетки smile  

Автор: miksayer 4.7.2006, 00:19
абудет ли версия для 2006-ых Делфи и Билдера? 

Автор: Sep. 4.7.2006, 13:56
Пока никаких багов не найдено =)
Цитата(Vitalik @  3.7.2006,  16:26 Найти цитируемый пост)
Работа со встроенными атрибутами (может использоваться к примеру для определения атрибута по местоположению в подсвеченном тексте)

Не могу найти как доступ к ним получать =( Может кто знает?

Цитата(Vitalik @  3.7.2006,  16:26 Найти цитируемый пост)
Возможность использовать дизайнер не только в качестве exe'шника, но и вызывать одной строчкой в программе, передавая ему подсветку.

При этом очень надо сбраcывать SynUni.Filename? А то приходится некрасивый код писать =)
Код

  s:= SynUni.FileName;
  if TSynUniDesigner.EditHighlighter(SynUni, 'Syntax Designer', '') then
  SynUni.SaveToFile(s);
  SynUni.FileName:=s;
 

Автор: Vit 5.7.2006, 18:56
Вот письмо пришедшее от одного из пользователей. Он наверняка использует старую версию, но тем ни менее следует тщательно проверить код и заменить все функции UpperCase/LowerCase на соответствующие ANSI

Цитата

 need to change SynUni (Uni Highlighter for SynEdit) to work with a Greek
programming language (taught at highschool in Greece) and it seems it only
supports English when selecting to use ignore-case

I suggest the following change (see //Birb: comment), not sure though at
which Delphi version the AnsiUpperCase function was introduced.

----------

procedure TSynRange.SetCaseSensitive(const Value: boolean);
begin
FCaseSensitive:=Value;
if not Value then
begin
   CaseFunct:=UpCase;
   StringCaseFunct:=AnsiUpperCase; //Birb: not using UpperCase cause it's
only for English
end
else
begin
   CaseFunct:=CaseNone;
   StringCaseFunct:=StringCaseNone;
end;
end;

------------------

Anyway, I may need to write my own function for ignoring punctuation marks
too at comparisons, so instead of having to change SetCaseSensitive to point
to my routine it would be best I think to have some way to callback a user's
event handler from the TSynUni component and either

* pass them either two strings to compare and have an "out" boolean param
for the result (or "var" param for old Delphi versions),

* or pass them a var param with the string value to make uppercase, in which
case they could make it uppercase in a special way that removes punctution
marks, so that both punctuated and unpunctuated strings compare the same

Cheers,
George

P.S. btw, are you interested for feedback regarding UniEdit bugs/problems?
It's a very useful tool but has various GUI issues


  

Автор: Quadr0 6.7.2006, 00:39
...

Автор: Vit 6.7.2006, 15:28
Цитата(Quadr0 @  5.7.2006,  15:39 Найти цитируемый пост)
UpperCase и AnsiUpperCase - суть почти одно и то же. Как он собрался запихнуть греческий алфавит под стандарты ANSI? Тут нужен WideUpperCase, раз уж на то пошло. В любом случае, компонент нужно переписывать для использования с ЮНИКОД'ом, чем я собсно и потихоньку занимаюсь.  



Нет не одно и то же. Опустим юникоды. Просто однобайтовые кодировки. Байты соответствующие русским А и а будут считаться эквивалентными если не Casesensitive при русской кодировке, но не факт что соответствующие им байты при греческой кодировке попадут на прописную и строчную альфы... В общем проблема известна и стара как мир, действительно надо все строковые функции заменить на соответствующие Ansi варианты там где они есть. 

Автор: Vitalik 8.7.2006, 08:29
Всё, я вернулся  smile 

Цитата(miksayer @  3.7.2006,  23:19 Найти цитируемый пост)
а будет ли версия для 2006-ых Делфи и Билдера?  

Если я их себе поставлю, то, возможно, будет smile
А может найдется человек с уже устанновленой такой делфей и поможет smile

Цитата(Sep. @  4.7.2006,  12:56 Найти цитируемый пост)
Не могу найти как доступ к ним получать =( Может кто знает?

Для этого используется метод SynEdit'а GetHighlighterAttriAtRowCol:
Код
var
  Token: string;
  Attri: TSynHighlighterAttributes;
begin
  SynEdit1.GetHighlighterAttriAtRowCol(SynEdit1.CaretXY, Token, Attri);
Он возвращает в Attri "атрибут" текущего текста, а по атрибуту можно узнать его имя. 
Сейчас в качестве имени атрибута просто задается имя правила, но можно придумать что-нибудь по-хитрее smile
Простейший пример использования этого дела вкладываю в сообщение smile

Цитата(Sep. @  4.7.2006,  12:56 Найти цитируемый пост)
При этом очень надо сбраcывать SynUni.Filename? А то приходится некрасивый код писать =)

Действительно оплошность smile
Спасибо, обязательно добавлю при сохранении в родном формате изменение свойства FileName smile

Цитата(Vit @  6.7.2006,  14:28 Найти цитируемый пост)
действительно надо все строковые функции заменить на соответствующие Ansi варианты там где они есть.

Оки, не вопрос, сделаем smile
Вот только как быть с простым UpCase (для одного символа), для него нет соответствующей функции Ansi... 
"Формировать" из одного символа строку и посылать ее функции AnsiUpperCase?

Цитата(George (by Vit) @  5.7.2006,  17:56 Найти цитируемый пост)
Anyway, I may need to write my own function for ignoring punctuation marks
too at comparisons, so instead of having to change SetCaseSensitive to point
to my routine it would be best I think to have some way to callback a user's
event handler from the TSynUni component and either

* pass them either two strings to compare and have an "out" boolean param
for the result (or "var" param for old Delphi versions),

* or pass them a var param with the string value to make uppercase, in which
case they could make it uppercase in a special way that removes punctution
marks, so that both punctuated and unpunctuated strings compare the same

Довольно смутно понял, что он здесь имел в виду.. smile
Но по ходу типа возможность игнорирования не только регистра (верхний/нижний) у токена путем преобразования всех токенов к верхнему регистру, но и произвольное превращения токена для "объединения" каких-то схожих токенов (отличающихся не только по регистру)..
Вот только пунктуация ведь все равно будет разбивать токены на части, а поэтому вряд ли это может его проблеме.. Очень бы хотелось узнать для чего ему это именно нужно, хотя бы примерчик какой-нить smile Тогда можно было бы думать дальше smile

Цитата(George (by Vit) @  5.7.2006,  17:56 Найти цитируемый пост)
P.S. btw, are you interested for feedback regarding UniEdit bugs/problems?
It's a very useful tool but has various GUI issues

А давно он тебе писал? smile
Передай ему, что мы очень даже заинтересованы в "обратной связи" и пригласи, если не сложно, на англиЦкий форум по компоненту smile
Кстати, Vit, а может лучше здесь устроить подфорум для наших англоязычных коллег? Это было бы очень удобно! smile


P.S. А вот файлик для Sep'а:  

Автор: navykeds 8.7.2006, 14:45
Цитата(Vitalik @  8.7.2006,  08:29 Найти цитируемый пост)
Если я их себе поставлю, то, возможно, будет А может найдется человек с уже устанновленой такой делфей и поможет 


На самом деле под 2006 версию все нормально устанавливается. Просто использую пакет для D7.

Цитата(Vitalik @  8.7.2006,  08:29 Найти цитируемый пост)
Оки, не вопрос, сделаем 
Вот только как быть с простым UpCase (для одного символа), для него нет соответствующей функции Ansi... 
"Формировать" из одного символа строку и посылать ее функции AnsiUpperCase?


Так и делается smile 

Автор: admhome 10.7.2006, 20:57
Может я конечно чего-то недогоняю, НО: устанавливаю SynEdit-2.0.3, процесс проходит нормально. Далее unihighlighter 2.0b1. Оно сперва требует SynEditCodeFolding, слили из Mystix031Src. Потом сие чудо выдало:

[Hint] SynUniFormat.pas(44): Value assigned to 'TSynUniFormat.VerifyStream' never used
[Hint] SynUniFormat.pas(54): Value assigned to 'TSynUniFormat.VerifyFileName' never used
[Hint] SynUniFormat.pas(64): Value assigned to 'TSynUniFormat.VerifyEmptyFileName' never used
[Warning] SynUniFormat.pas(71): Return value of function 'TSynUniFormat.ImportFromStream' might be undefined
[Warning] SynUniFormat.pas(75): Return value of function 'TSynUniFormat.ImportFromFile' might be undefined
[Warning] SynUniFormat.pas(79): Return value of function 'TSynUniFormat.ExportToStream' might be undefined
[Warning] SynUniFormat.pas(83): Return value of function 'TSynUniFormat.ExportToFile' might be undefined
[Error] SynUniFormatNativeXml20.pas(537): Undeclared identifier: 'FoldRegions'
[Error] SynUniFormatNativeXml20.pas(557): Undeclared identifier: 'FoldRegions'
[Fatal Error] SynUniHighlighter.pas(120): Could not compile used unit 'SynUniFormatNativeXml20'


Подскажите плиз, как бороться с этим явлением?

P.S.: Delphi 7 

Автор: navykeds 10.7.2006, 21:15
Нужно в файле SynUni\Source\SynUniHighlighter.inc 
заменить строку {$DEFINE CODEFOLDING} на {.$DEFINE CODEFOLDING}.
Эта директива используется, если у тебя установлен пакет с codefolding. 

Автор: Vitalik 10.7.2006, 21:27
Спасибо, navykedsuser posted image

Я могу лишь добавить:

Цитата(Vitalik @  3.7.2006,  15:26 Найти цитируемый пост)
Информацию по установке компонента желательно прочитать здесь: http://www.unihighlighter.com/index.php?showpage=install

smile 

Автор: miksayer 16.7.2006, 00:48
Цитата(navykeds @  8.7.2006,  14:45 Найти цитируемый пост)
На самом деле под 2006 версию все нормально устанавливается. Просто использую пакет для D7.

а для билдера как быть? 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)