Post Reply 
Custom Text Formatting (Previously: Getting long results in a program)
04-12-2024, 05:21 AM
Post: #64
RE: Getting long results in Program
Bonjour komame

Merci à vous pour toutes explications techniques et vôtre aide plus que précieuse.
J'ai achevé l'écriture du code hier soir et procéder à quelques essais, tout semble fonctionner.
Je joint le code pour que vous puissiez vérifier, corriger et améliorer.
Il reste donc à traiter la transparence, j'ai fait un essai en dur dans le code cela fonctionne très bien.
Il faut voir sous quelle forme nous l'intégrons ?
BLIT_P prend cet argument en dernier et nous oblige donc à transmettre une couleur pour les pixels non visibles, il faut donc mettre une valeur par défaut différente des 2 couleurs que nous pouvons fournir à ATEXTOUT_P (je pensais à une liste locale de 3 couleurs : donc forcément dont une différente ou peut être un calcul).
Pour les arguments je suis resté sur une valeur numérique, mais nous pouvons ajouter la possibilité de mettre une chaîne (je pensais ensuite à convertir la chaîne en équivalent numérique pour n'avoir qu'un seul type de test)

Hello komame

Thank you for all the technical explanations and your invaluable help.
I finished writing the code last night and carried out a few tests, and everything seems to be working.
I'm attaching the code so that you can check, correct and improve it.
All that's left is to deal with the transparency, I've done a hard test in the code and it works very well.
We need to see how we integrate it?
BLIT_P takes this argument last and therefore forces us to send a colour for pixels that are not visible, so we need to set a default value that is different from the 2 colours that we can supply to ATEXTOUT_P (I was thinking of a local list of 3 colours: one of which must be different or perhaps a calculation).
For the arguments, I've stuck with a numerical value, but we can add the option of setting a string (I was then thinking of converting the string into a numerical equivalent so as to have just one type of test).
Code:
ICON buffer 89504E470D0A1A0A0000000D494844520000014A0000001C01000000002FF2CBF6000000027​4524E5300007693CD3800000018494441547801EDC10109000000C3A0F54FFD1C073580230304B40​001D69772FE0000000049454E44AE426082;
EXPORT ATEXTSIZE(s,p,a)
BEGIN
 LOCAL h,l,f;
 {'l','h'}:=TEXTSIZE(s,p);
 IF BITAND(a,8) THEN
  l:=l+CEILING(h/3);
 END;
 IF BITAND(a,16) THEN
  l:=l+1;f:=1;
 END;
 IF BITAND(a,32) THEN
  l:=l+1-f;h:=h+1;
 END;
 {l,h}; 
END;
EXPORT ATEXTOUT_P(...l)
BEGIN
 LOCAL d:=SIZE(l),t:=TYPE(l(2)),i,f;
 CASE
  if 2<d<6  OR (d==6  AND t==8) then
   f:=STRING(l);
   f:="TEXTOUT_P("+SUPPRESS(f,{1,DIM(f)});
   EXPR(f);
  end;
  if 5<d<9 then  
   IF t≠8 THEN 
    l:=INSERT(l,2,G0);
    d:=d+1;
   END;
   IF d<8 THEN
    l(0):=GET(ATEXTSIZE(l(1),l(5),l(7)),1);
   END;
   atextout(l); 
  end;
  if d==9  AND t==8 then
   atextout(l);  
  end;
  default
   Err(0);
 END;
END;
atextout(par)
BEGIN
 LOCAL s,g,x,y,p,c,a,l;
 LOCAL f,i,j:=10,k,n,fi,fr,ii;
 {'s','g','x','y','p','c','a','l'}:=par({1,8});
 LOCAL h,hh,d:=3;
 IF 63<a  OR a<0 THEN
  Err(2);
 END;
 {'k','h'}:=ATEXTSIZE(s,p,a);
 hh:=h;l:=MIN(l,k);
 IF SIZE(par)==9 THEN
  f:=par(9);fr:=1;
 END;
 IF fr THEN
  RECT_P("buffer",0,0,330,28,f);
 ELSE
  BLIT_P("buffer",10,0,g,x,y,x+l,y+h);
 END;
 i:=1;
 REPEAT 
  IF BITAND(a,i) THEN
   CASE
    if i==1 then //barré
     j:=IP(h/2); 
     LINE_P("buffer",10,j,10+l,j,c);
    end;
    if i==2 then //sous ligné
      LINE_P("buffer",10,h-3,10+l,h-3,c);  
    end;
    if i==4 then //encadré
     RECT_P("buffer",10,0,10+l-1,h-1,c,{0,255}); 
    end; 
    if i==8 then //italique 
     h:=h-3;n:=CEILING(h/3);j:=10;
     FOR ii FROM 1 TO n DO
      BLIT_P("buffer",j-1,h-d,"buffer",10,h-d,10+l,h);
      j:=j-1;h:=h-3;d:=MIN(h,3);
     END;
     fi:=1;
    end;
   END;
  END;
  i:=i*2;
 UNTIL i==16;
 TEXTOUT_P(s,"buffer",10,0,p,c,l);
 IF BITAND(a,16) THEN //gras
  TEXTOUT_P(s,"buffer",11,0,p,c,l);
 END;
 IF BITAND(a,32) THEN //relief
  TEXTOUT_P(s,"buffer",11,1,p,c,l);
 END;
 IF fi THEN
  h:=hh;j:=10;d:=3;
  n:=CEILING(h/3);y:=y+h;
  FOR ii FROM 1 TO n DO
   BLIT_P(g,x,y-d,"buffer",j,h-d,j+l,h);
   j:=j-1;y:=y-3;h:=h-3;d:=MIN(h,3);
  END;
 ELSE
  BLIT_P(g,x,y,"buffer",10,0,l+10,h);
 END;
END;

   

Sorry for my english
Find all posts by this user
Quote this message in a reply
Post Reply 


Messages In This Thread
RE: Getting long results in Program - Tyann - 04-12-2024 05:21 AM
RE: Custom Text Formatting - Tyann - 04-15-2024, 06:55 PM
RE: Custom Text Formatting - komame - 04-15-2024, 07:42 PM
RE: Custom Text Formatting - Tyann - 04-16-2024, 04:38 AM
RE: Custom Text Formatting - komame - 04-16-2024, 06:02 AM



User(s) browsing this thread: 70 Guest(s)