Так как цвет часто используется для разных пометок, то - это реальный инструмент.
В самом Блэкбоксе нет команды для перекраски всех букв из одного цвета в другой.
А у меня взникла такая производственная необходимость при работе с исходниками.
Написал небольшой модуль из одной процедуры для перекраски и решил поделиться.
Код:
MODULE ToolRecolor;
IMPORT DevCommanders, TextMappers, TextModels, Ports, Stores, Models;
PROCEDURE Recolor*;
VAR s: TextMappers.Scanner; ch: CHAR; script: Stores.Operation;
colorToReplace, newColor: Ports.Color;
BEGIN
s.ConnectTo(DevCommanders.par.text);
s.SetPos(DevCommanders.par.beg);
s.rider.ReadChar(ch);
IF ch = 0DX THEN RETURN END;
WHILE ~ s.rider.eot & (ch = " ") DO
s.rider.ReadChar(ch);
IF ch = 0DX THEN RETURN END;
END;
colorToReplace := s.rider.attr.color;
WHILE ~ s.rider.eot & (ch # " ") & (ch # 0DX) DO
s.rider.ReadChar(ch);
IF ch = 0DX THEN RETURN END;
END;
WHILE ~ s.rider.eot & (ch = " ") & (ch # 0DX) DO
s.rider.ReadChar(ch);
IF ch = 0DX THEN RETURN END;
END;
newColor := s.rider.attr.color;
WHILE ~ s.rider.eot & (ch # 0DX) DO
s.rider.ReadChar(ch);
END;
Models.BeginScript(DevCommanders.par.text, "Reaplace color", script);
WHILE ~ s.rider.eot DO
s.rider.ReadChar(ch);
IF (s.rider # NIL) & (s.rider.attr # NIL) THEN
IF s.rider.attr.color = colorToReplace THEN
DevCommanders.par.text.SetAttr(s.rider.Pos()-1, s.rider.Pos(),
TextModels.NewColor(s.rider.attr, newColor))
END
END
END;
Models.EndScript(DevCommanders.par.text, script)
END Recolor;
END ToolRecolor.
Цвета кодируются цветом слов после коммандера в одной строке, и команда применяется к тексту после этой строки.
Вложение:
Снимок экрана от 2021-08-30 00-09-37.png [ 2.5 КБ | Просмотров: 24865 ]