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

В самом Блэкбоксе нет команды для перекраски всех букв из одного цвета в другой.

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

Написал небольшой модуль из одной процедуры для перекраски и решил поделиться.

## Код:
```
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 КБ | Просмотров: 29895 ]
