Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Реализация скриптового движка в Pascal Script: определение исполняемых строк кода в редакторе SynEdit

Delphi , Программа и Интерфейс , IDE и Компилятор

В процессе создания встроенного скриптового движка с использованием Pascal Script от компании RemObjects и редактора SynEdit, перед разработчиками встает задача определения исполняемых строк кода. Это необходимо для отображения в области отступов редактора SynEdit характерных "голубых точек" Delphi.

Проблема

Разработчик, использующий примеры IDE, предоставляемые Pascal Script и SynEdit, не может понять, как запросить у скриптового движка информацию о том, является ли определенная строка исходного кода исполняемой. Это важно для разметки области отступов редактора SynEdit соответствующим образом.

Решение

Исходя из обсуждения в сообществе, было предложено изучить исходный код программы Inno Setup, который использует Pascal Script для компиляции скриптов и отображения исполняемых строк в редакторе. В частности, в модуле CompForm.pas определен тип TLineState, который используется для установки состояния строк.

В Pascal Script для получения информации о позиции исходного кода относительно исполняемого кода можно использовать метод TPSCustomDebugExec.TranslatePositionEx(). Этот метод возвращает информацию о файле исходного кода и номере строки, что позволяет разработчику определить, является ли строка исполняемой.

Пример реализации

Разработчик, столкнувшийся с аналогичной проблемой, предложил следующий подход: добавление функции HasCode в класс TPSCustomDebugExec, которая проверяет, содержит ли определенный файл и строка исполняемый код.

function TPSCustomDebugExec.HasCode(Filename: string; LineNo: integer): boolean;
var
  i, j: integer;
  fi: PFunctionInfo;
  pt: TIfList;
  r: PPositionData;
begin
  Result := False;
  for i := 0 to FDebugDataForProcs.Count - 1 do
  begin
    fi := FDebugDataForProcs[i];
    pt := fi^.FPositionTable;
    for j := 0 to pt.Count - 1 do
    begin
      r := pt[j];
      Result := SameText(r^.FileName, Filename) and (r^.Row = LineNo);
      if Result then
        Exit;
    end;
  end;
end;

Также был изменен обработчик покраски области отступов в редакторе, чтобы отображать различные состояния строк:

procedure Teditor.PaintGutterGlyphs(ACanvas: TCanvas; AClip: TRect;
  FirstLine, LastLine: integer);
var
  a, b: boolean;
  LH, LH2, X, Y, ImgIndex: integer;
begin
  // ...
  while FirstLine <= LastLine do
  begin
    Y := LH2 + LH * (Ed.LineToRow(FirstLine) - Ed.TopLine);
    a := ce.HasBreakPoint(ce.MainFileName, FirstLine);
    b := ce.Exec.HasCode(ce.MainFileName, FirstLine);
    // ...
    if ImgIndex >= 0 then
      imglGutterGlyphs.Draw(ACanvas, X, Y, ImgIndex);
    Inc(FirstLine);
  end;
  // ...
end;

Этот подход позволяет отобразить в редакторе SynEdit различные состояния строк: исполняемые, с точками останова, текущие и другие.

Заключение

Для реализации функционала определения исполняемых строк в редакторе SynEdit можно использовать методы, предоставляемые Pascal Script, и адаптировать их под свои нужды. Примеры кода, приведенные выше, демонстрируют, как можно расширить возможности скриптового движка для отображения информации о состоянии исходного кода в редакторе.

Создано по материалам из источника по ссылке.

В процессе разработки скриптового движка на языке Pascal Script и использования редактора SynEdit требуется определить, какие строки исходного кода являются исполняемыми для корректного отображения в редакторе.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: IDE и Компилятор ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 15:58:00/0.0052919387817383/1