На лабе предложили мне сделать модуль, изменяющий атрибуты текста на жирный. А почему бы не разукрасить его, подумал я от нечего делать? Вот и получилось... правда не совсем то, что задавили
!
Попробуйте сделать меню для вызова функции Color и видоизмените какой-нибудь большой документ (например справку о языке!).
Код:
MODULE MyColorer;
IMPORT TextViews,TextModels,StdLog,Fonts,Math,Ports;
PROCEDURE Ord(x,d:INTEGER):REAL;
BEGIN
RETURN ((Math.Sin(2*Math.Pi()/d*(x MOD d)))+1)/2;
END Ord;
PROCEDURE Round(x:REAL;n,d:INTEGER):INTEGER;
BEGIN
RETURN (SHORT(ENTIER(x*Ord(n,d))));
END Round;
PROCEDURE Color*;
VAR
view:TextViews.View;
model,newmodel:TextModels.Model;
writer:TextModels.Writer;
reader:TextModels.Reader;
i:INTEGER;
attr:TextModels.Attributes;
BEGIN
view:=TextViews.Focus();
IF view#NIL THEN
model:=view.ThisModel();
NEW(attr);
attr.InitFromProp(model.Prop(0,0));
attr:=TextModels.NewWeight(attr, Fonts.bold);
FOR i:=0 TO view.ThisModel().Length()-1 DO
attr:=TextModels.NewSize(attr,100000+Round(100000,i,20)); attr:=TextModels.NewColor(attr,Ports.RGBColor(100+Round(155,i,30),Round(150,i,1000),Round(250,i,100)));
attr:=TextModels.NewOffset(attr,Round(250000,i+30,40));
model.SetAttr(i,i+1, attr);
END;
ELSE
StdLog.String('No active text!');
END;
END Color;
END MyColorer.