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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SynEdit2.0.3stable + CodeFolding(MyStix0.31), совместный пакет 
:(
    Опции темы
Sep.
Дата 25.5.2006, 14:05 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Скрестил SynEdit2.0.3 и CodeFolding из MyStix0.31. Так что теперь возможен градиент на гуттере и indent guides одновременно. Так же в код внесены некоторые изменения:
Исправления:
  • открытие возможности использовать экспорт текста с подсветкой в файлы HTML или RTF. (//###mod export to htm)
  • Закоментирован код, который приводил к выводу нераскрашенных слов к конце каждой строки (//###mod paintlines) ORMADA
  • Показывает свойства CodeFolding в редакторе форм (//###mod formeditor) NaumLeNet
  • Неправильные первоначальные переносы строк по Ctrl-V (//###mod wordwrap) Paul S.
  • Ошибка при наведении мышки на [...] (//###mod access violation)
  • Ошибка при отображении хинта по [...] в некоторых позициях экрана (//###mod access violation)
  • Баг с неправильным фоном иконки ворд-врапа на гутере при включенном фолдинге и градиенте гутера (//###mod wrapglyph)
  • Неверное положение хинта на экране при наведении мышки на [...] (//###mod wrong place on hint over [...])
  • При фолдинге строки добавлять закрывающий тэг в нижнем регистре (//###mod closing token to lowercase)
Улучшения:
  • Переместить [...] между откр. и закр. тегами при фолдинге строки (//###mod pos of [...] to left)
  • Смена шрифта хинта над [...] (//###mod hint font name)
Легкая установка через dpk файл (Vitalik):
1. Скачать архив ниже.
2. Распаковываем только что скачанный архив в какую-нибудь папку. Для условности будем называть её %SynEdit%
3. Открываем настройки Delphi: Tools » Environment options » Library » Library path » [...] » [...], выбираем папку %SynEdit%\Source\. Нажимаем Add, OK, OK.
4. Открываем нужный пакетный файл из папки %SynEdit%\Packages\. Например, если у вас Delphi 6, то имя нужного пакетного файла будет SynEdit_D6.dpk.
5. Нажимаем кнопку Compile. Если выскакивет ошибка по поводу .res файла, то надо нажать Compile еще раз. Если только warning'и и hint'ы - то все нормально.
6. Нажимаем кнопку Install.
7. Закрываем пакетный файл, не сохраняя изменения.

user posted image
Скачать (400 кб)

Если кто отлавливал еще какие то баги, или написал какие-то дополнения в коде - напишите здесь плиз. Родина вас не забудет!   

Это сообщение отредактировал(а) Sep. - 14.6.2006, 09:14
--------------------
Syn - TotalCommander lister plugin |  SynTree - coders sourcebook  
PM MAIL   Вверх
Seldon
Дата 4.6.2006, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Sep, а ты как-нибудь помечал места в коде, которые правил? 
--------------------
MiBEditor v2.Alpha 10 - Программерский редактор
PM MAIL WWW   Вверх
Sep.
Дата 6.6.2006, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



там исправлено в 2-3х местах только. А весь кодфолдинг помечен как
Код
 
      //### Code Folding ###
...
      //### End Code Folding ###

Но надо будет пометить обязательно. Я просто там хотел еще небольшие изменения внести еще. Как сделаю, перезалью с пометками. 
--------------------
Syn - TotalCommander lister plugin |  SynTree - coders sourcebook  
PM MAIL   Вверх
Vit
Дата 11.6.2006, 05:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

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



А небольшой примерчик использования кодфолдинга можно подкинуть... А то что-то вроде с разгону не очень очевидно, а с самим  MyStix авторы нафигачили проект в несколько тысяч строк с многочисленными глюками... я его сначала пол-часа компиллировал, потом ещё час отыскивал их ошибки, потом лазил по коду в поисках полезной информации... В общем крайне неудачный пример какой-то... Я поставил твой пакет, попробовал загрузить highlighter и включил кодефолдинг, только что-то не очень-то это работает... Наверное что-то пропустил. Брось пару строк описания, кода, и желательно пример highlighter'а для тестирования... 


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Sep.
Дата 11.6.2006, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Пример Vitalik тут приводил по свойствам и динамическому созданию.
А если надо из подсветки читать, то она должна быть второй версии. Т.е. те что из мистикса или WDS не подойдут, их надо конвертировать. Привожу подсветку (17кб) для ASP/JS/VBS/WML/CSS/PHP с фолдингом 100% работающюю. Или можно создать самому в дизайнере второй версии. А потом просто:
Код
 
  SynUniSyn1.LoadFromFile('xhtml.hgl');
  SynEdit1.InitCodeFolding;
  SynEdit1.Repaint;

и любуешся на баги =)
Сразу советую вставить SynEdit1.InitCodeFolding в onChange к SynEdit1 что ли. А то положения маркеров относительно текста не всегда обновляет.
Потом в SynEdit.pas на строке 11308 идет функция function TCustomSynEdit.GetLineIndent(Strings: TStrings;
    ALine: Integer): Integer;
в нее добавляем 
Код

  begin
    Result := 0;
    if ALine >= Strings.Count then exit; //добавлено
    Line := PChar(Strings[ALine]);
    repeat

и в SynCompletionProposal.pas коряво написан код вывода подсказки свернутого кода при наведении мышки на [...] и надо
подправить бы на 2362:
Код

    if tmpY + tmpHeight > GetWorkAreaHeight then
    begin
      tmpY := tmpY - tmpHeight -2;// (Form.CurrentEditor  as TCustomSynEdit).LineHeight -2;
      if tmpY < 0 then
        tmpY := 0;
    end;

Эти все исправления я делал просто чтобы что то работало, пока еще не особо копался. Если кто то уже разобрался что да как пишите здесь, и внесем исправления в пакет. 
--------------------
Syn - TotalCommander lister plugin |  SynTree - coders sourcebook  
PM MAIL   Вверх
Sep.
Дата 13.6.2006, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Баг с неправильным фоном иконки ворд-врапа на гутере при включенном фолдинге и градиенте гутера:
SynEdit.pas (2991)
Код

...
      if not fGutter.Gradient then
       Canvas.FillRect(AClip);

//было здесь

        //### Code Folding ###
        if CodeFolding.Enabled then
        begin
            rect2 := AClip;
            rect2.Left := xpos;
            rect2.Right := xpos + Gutter.RightOffset - 4;

            // Paint fold bar
            Canvas.Brush.Color := CodeFolding.FolderBarColor;
            Canvas.FillRect(rect2);
            Canvas.Brush.Color := fGutter.Color;

          // Paint folding bar dividing line
          Canvas.Pen.Color := clBtnShadow;
          Canvas.MoveTo(rect2.Left, rect2.Top);
          Canvas.LineTo(rect2.Left, rect2.Bottom);
        end;
        //### End Code Folding ###

      {$IFDEF SYN_WIN32}
        // draw word wrap glyphs transparently over gradient
        if fGutter.Gradient then
          Canvas.Brush.Style := bsClear;
      {$ENDIF}
      // paint wrapped line glyphs
      if WordWrap and fWordWrapGlyph.Visible then
...

т.е. просто перенести секцию IFDEF SYN_WIN32 
--------------------
Syn - TotalCommander lister plugin |  SynTree - coders sourcebook  
PM MAIL   Вверх
Sep.
Дата 14.6.2006, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Пометил исправления в коде и перезалил по старому адресу. Покопался с багами вывода хинта при наведении мышки на [...] и поисправлял некоторые баги. Хинт выводится средствами CompletionProposal , (т.е. как подсказка параметров функции в дельфи) 
Чтобы поменять что-то в хинте, вы можете посмотреть демку ParamCompletionDemo.dpr чтоб узнать имена параметров. Сами параметры можно настроить в SynEdit.pas (2434), например смена шрифта:
Код
 
  TSynCompletionProposal(fHint).Editor := Self;
  TSynCompletionProposal(fHint).Font.Name := 'lucida console';  //###mod hint font name
//TSynCompletionProposal(fHint).ExecuteEx('', X + 10, Y + Top, ctHint);
  TSynCompletionProposal(fHint).ExecuteEx('', Mouse.CursorPos.X + 10 , Mouse.CursorPos.Y, ctHint); //###mod wrong place on hint over [...]
  TSynCompletionProposal(fHint).Tag := 1;

Это будет распространятся на все хинты к [...], во всех программах которые вы компилируете. Так что может стоит подумать как это вынести в настройки. Хинты при CompletionProposal не затрагиваются.

Исправления:
  • открытие возможности использовать экспорт текста с подсветкой в файлы HTML или RTF. (//###mod export to htm)
  • Закоментирован код, который приводил к выводу нераскрашенных слов к конце каждой строки (//###mod paintlines) ORMADA
  • Показывает свойства CodeFolding в редакторе форм (//###mod formeditor) NaumLeNet
  • Неправильные первоначальные переносы строк по Ctrl-V (//###mod wordwrap) Paul S.
  • Ошибка при наведении мышки на [...] (//###mod access violation)
  • Ошибка при отображении хинта по [...] в некоторых позициях экрана (//###mod access violation)
  • Баг с неправильным фоном иконки ворд-врапа на гутере при включенном фолдинге и градиенте гутера (//###mod wrapglyph)
  • Неверное положение хинта на экране при наведении мышки на [...] (//###mod wrong place on hint over [...])
  • При фолдинге строки добавлять закрывающий тэг в нижнем регистре (//###mod closing token to lowercase)

Улучшения:
  • Переместить [...] между откр. и закр. тегами при фолдинге строки (//###mod pos of [...] to left)
  • Смена шрифта хинта над [...] (//###mod hint font name)

Также исправлен первый пост и его картинка, чтоб это как-то отобразить. 
--------------------
Syn - TotalCommander lister plugin |  SynTree - coders sourcebook  
PM MAIL   Вверх
Quadr0
Дата 25.6.2006, 13:08 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











...

Это сообщение отредактировал(а) Quadr0 - 15.7.2011, 11:28
  Вверх
navykeds
Дата 25.6.2006, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

var
  WheelDone: Boolean = False;

{$IFDEF SYN_CLX}
{$ELSE}

procedure TCustomSynEdit.WMMouseWheel(var Msg: TMessage);
var
  nDelta: integer;
  nWheelClicks: integer;
{$IFNDEF SYN_COMPILER_4_UP}
const
  LinesToScroll = 3;
  WHEEL_DELTA = 120;
  WHEEL_PAGESCROLL = MAXDWORD;
  SPI_GETWHEELSCROLLLINES = 104;
{$ENDIF}
begin
  if csDesigning in ComponentState then
    exit;

{$IFDEF SYN_COMPILER_4_UP}
  // In some occasions Windows will not properly initialize mouse wheel, but
  // will still keep sending WM_MOUSEWHEEL message. Calling inherited procedure
  // will re-initialize related properties (i.e. Mouse.WheelScrollLines)
  if not WheelDone then
    inherited;
  WheelDone := True;
{$ENDIF}

  if GetKeyState(VK_CONTROL) >= 0 then
  begin
{$IFDEF SYN_COMPILER_4_UP}
    nDelta := Mouse.WheelScrollLines
{$ELSE}
    if not SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, @nDelta, 0) then
      nDelta := LinesToScroll;
{$ENDIF}
  end
  else
    nDelta := LinesInWindow shr Ord(eoHalfPageScroll in fOptions);

  Inc(fMouseWheelAccumulator, SmallInt(Msg.wParamHi));
  nWheelClicks := fMouseWheelAccumulator div WHEEL_DELTA;
  fMouseWheelAccumulator := fMouseWheelAccumulator mod WHEEL_DELTA;
  if (nDelta = integer(WHEEL_PAGESCROLL)) or (nDelta > LinesInWindow) then
    nDelta := LinesInWindow;
  TopLine := TopLine - (nDelta * nWheelClicks);
  Update;
  if Assigned(OnScroll) then OnScroll(Self, sbVertical);
end;


Исправление ошибки, которая возникает, если удерживать левую кнопку мыши и одновременно крутить колесом. 
PM MAIL   Вверх
navykeds
Дата 25.6.2006, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



И еще дополнение. Файл SynEditKeyCmds.pas. Там есть надпись, цитирую:

Код

  //****************************************************************************
  // NOTE!  If you add an editor command, you must also update the
  //    EditorCommandStrs constant array in implementation section below, or the
  //    command will not show up in the IDE.
  //****************************************************************************


Итак, нужно добавить строковые константы (в EditorCommandStrs) smile

Код

  //### Code Folding ###
    (Value: ecCollapse; Name: 'ecCollapse'),
    (Value: ecUncollapse; Name: 'ecUncollapse'),
    (Value: ecCollapseLevel; Name: 'ecCollapseLevel'),
    (Value: ecUncollapseLevel; Name: 'ecUncollapseLevel'),
    (Value: ecCollapseAll; Name: 'ecCollapseAll'),
    (Value: ecUncollapseAll; Name: 'ecUncollapseAll'),
    (Value: ecCollapseCurrent; Name: 'ecCollapseCurrent'));
  //### End Code Folding ###
 

+ поправить само объявление:

Код

EditorCommandStrs: array[0..107]
  

Это сообщение отредактировал(а) navykeds - 25.6.2006, 22:23
PM MAIL   Вверх
Vitalik
Дата 29.6.2006, 02:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Гм.. Заметил я одну печальную вещь.. 
CodeFolding немножко не совместим с Delphi5 и C++Builder5.. smile
Завтра буду копать глубже.. 
PM MAIL WWW ICQ YIM   Вверх
Sep.
Дата 29.6.2006, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(navykeds @  25.6.2006,  22:01 Найти цитируемый пост)
Исправление ошибки, которая возникает, если удерживать левую кнопку мыши и одновременно крутить колесом. 

Слушай, а как эту ошибку получить? зажимаю левую, кручу колесо - растягивается выделение и все вроде нормально. До конца файла тоже доходит...
Комманды процессора для кодфолдинга добавлю в след. версии. Но фактически они бесполезны, потому что проще юзать
Код

SynEdit.UncollapseAll;
чем
SynEdit.CommandProcessor(ecUncollapseAll, #0, nil);
 
--------------------
Syn - TotalCommander lister plugin |  SynTree - coders sourcebook  
PM MAIL   Вверх
Vitalik
Дата 30.6.2006, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Vitalik @  29.6.2006,  01:09 Найти цитируемый пост)
CodeFolding немножко не совместим с Delphi5 и C++Builder5.. smile
Завтра буду копать глубже..  

Гм.. Легко эта проблема не поддалась.. smile
Исправил там несколько несовместимостей с 5-ми версиями делфей и билдера, но все равно когда кидаешь компонент на форму почему-то вылетает сообщение "Abstract Error." user posted image

Добавлено @ 14:14 
P.S. SynEdit 2.0.3 без CodeFolding'а ставится исправно smile 
PM MAIL WWW ICQ YIM   Вверх
Sep.
Дата 30.6.2006, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Еще один из багов кодфолдинга:
Закладки при фолдинге региона не перемещаются вместе со строками. 
Так что есть что править =) 
--------------------
Syn - TotalCommander lister plugin |  SynTree - coders sourcebook  
PM MAIL   Вверх
Quadr0
Дата 30.6.2006, 19:05 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











...

Это сообщение отредактировал(а) Quadr0 - 15.7.2011, 11:29
  Вверх
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | SynUniHighlighter и SynEdit | Следующая тема »


 




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


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

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