Added new macros: @pad{FAN}{T}

This commit is contained in:
Ianos Gnatiuc 2005-10-26 00:28:43 +00:00
parent c4dfe7c502
commit f97fff8524
2 changed files with 57 additions and 0 deletions

View File

@ -10,6 +10,15 @@ ______________________________________________________________________
Notes for GoldED+ 1.1.5, /snapshot/
______________________________________________________________________
+ Added new macros: @pad{FAN}{T}
Where: F - a fill char, that will be used when length(T) < N
A - type of text alignment (C - center, L - left, R - right)
N - size of pad area (N >= 0)
T - any text and/or macroses without parameters
Example: @pad{=C79}{ @OEcho (@ODesc) }
- Pick string windows will be resized to title length also.
+ Added @daddr to built-in template for netmail areas.

View File

@ -420,6 +420,54 @@ char* TokenXlat(int mode, char* input, GMsg* msg, GMsg* oldmsg, int __origarea)
continue;
}
char *ptr1, *ptr2;
if (strnieql(dst, "@pad{", 5) &&
((ptr1 = strstr(dst+5, "}{")) != NULL) &&
((ptr1-dst-5) > 2) &&
((ptr2 = strchr(ptr1+2, '}')) != NULL)
)
{
char buff[1024];
char token[1024];
char fill = dst[5];
char align = toupper(dst[6]);
int size = atoi(dst+7);
if (strchr("CLR", align))
{
memcpy(token, dst, ptr2-dst+1);
memcpy(buff, ptr1+2, ptr2-ptr1-2);
token[ptr2-dst+1] = buff[ptr2-ptr1-2] = 0;
TokenXlat(mode, buff, msg, oldmsg, __origarea);
buff[size] = 0;
size_t length = strlen(buff);
if (length != size)
{
size_t diff = size - length;
switch (align)
{
case 'C':
memmove(&buff[diff/2], buff, length);
memset(buff, fill, diff/2);
memset(&buff[diff/2+length], fill, diff-diff/2);
break;
case 'L':
memset(&buff[length], fill, diff);
break;
case 'R':
memmove(&buff[diff], buff, length);
memset(buff, fill, diff);
break;
}
}
if (tokenxchg(dst, token, buff))
continue;
}
}
dst++;
}
}