Post Reply 
Custom Text Formatting (Previously: Getting long results in a program)
04-08-2024, 05:58 PM (This post was last modified: 04-08-2024 08:35 PM by Tyann.)
Post: #52
RE: Getting long results in Program
Hé komame
En passant à une fonction atextout(...l), je me suis aperçu que la construction avec EXPR pour l'appel de celle-ci n'était plus obligatoire et du coup les ... non plus (je vous joint le code modifié).
En ce qui concerne le 9 ème paramètre, je ne pense pas qu'une valeur par défaut doit être employée pour la raison suivante : tout comme TEXTOUT_P, ATEXTOUT_P doit renvoyer une erreur si la valeur ne correspond pas à une couleur, sauf si vous avez une solution à l'esprit.
Pour ce qui est des attributs, j'étais personnellement parti sur une valeur numérique en ayant à l'esprit que pour ce paramètre qui n'est pas connu de TEXTOUT_P nous devons nous même renvoyer une erreur si la valeur est hors plage, cependant si la même chose est facilement faisable avec une chaîne pas de problème pour moi (on peut même envisager les 2).
Un truc auquel j'ai pensé si nous arrivons dans atextout() et que le paramètre attributs est nul ( 0 ou ""), nous retombons sur un simple TEXTOUT_P, peut être faudra t-il penser à traîter ce cas particulier.
Enfin pour ce qui est de vôtre proposition de semi transparent, je ne vois pas très bien à quoi cela correspond mais pourquoi pas, par contre j'aimerai bien aussi un paramètre 'encadré'.
Concernant le code dans ATEXTSIZE, je n'ai pour l'instant traité que le cas de l'italique.

Hey komame
When I switched to an atextout(...l) function, I realized that the EXPR construction for calling it was no longer mandatory, so neither were the ... (I've attached the modified code).
As for the 9th parameter, I don't think a default value should be used for the following reason: just like TEXTOUT_P, ATEXTOUT_P should return an error if the value doesn't match a color, unless you have a solution in mind.
As far as attributes are concerned, I had personally opted for a numerical value, bearing in mind that for this parameter, which is not known to TEXTOUT_P, we ourselves must return an error if the value is out of range. However, if the same thing can easily be done with a string, no problem for me (we can even consider both).
Something I've been thinking about is that if we go into atextout() and the attributes parameter is null (0 or ""), we end up with a simple TEXTOUT_P. Perhaps we should think about handling this special case.
Finally, as for your semi-transparent proposal, I don't really see what it means, but why not? On the other hand, I'd also like to see a 'framed' parameter.
As for the code in ATEXTSIZE, so far I've only dealt with the case of italics.

Code:
ICON buffer 89504E470D0A1A0A0000000D494844520000014A0000001C01000000002FF2CBF6000000027​4524E5300007693CD3800000018494441547801EDC10109000000C3A0F54FFD1C073580230304B40​001D69772FE0000000049454E44AE426082;
EXPORT ATEXTSIZE(s,p,a)
BEGIN
 LOCAL h,l;
 {'l','h'}:=TEXTSIZE(s,p);
 IF a>31 THEN
  l:=l+CEILING(h/3);
 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);
   ELSE
    l(8):=MIN(GET(ATEXTSIZE(l(1),l(5),l(7)),1),l(8)); 
   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,n,fi,fr,ii;
 {'s','g','x','y','p','c','a','l'}:=par({1,8});
 IF SIZE(par)==9 THEN
  f:=par(9);fr:=1;
 END;

Edit :
J'ai maintenant je pense un code fonctionnel complet, surement très perfectible et dans lequel on peut ajouter vos suggestions.
A noter que la ligne :
Code:
   l(8):=MIN(GET(ATEXTSIZE(l(1),l(5),l(7)),1),l(8));
qui consiste à vérifier que la largeur fournie n'est pas> à la taille du texte est déplacée dans atextout .
Je fais encore quelques tests et vous montre cela ensuite.

I think I now have a complete working code, which can certainly be improved and to which your suggestions can be added.
Note that the line :
Code:
 l(8):=MIN(GET(ATEXTSIZE(l(1),l(5),l(7)),1),l(8));
which consists of checking that the width supplied is not > the text size is moved to atextout .
I'll run a few more tests and then show you how it works.

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-08-2024 05:58 PM
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)