Menu

[r376]: / XALCOL.MPL  Maximize  Restore  History

Download this file

33 lines (23 with data), 1.2 kB

/*
  ALIGN COLUMNS - MPL VERSION
  HTTPS://ROSETTACODE.ORG/WIKI/ALIGN_COLUMNS
*/

##LIBHDR

.0  = "GIVEN$A$TEXT$FILE$OF$MANY$LINES,$WHERE$FIELDS$WITHIN$A$LINE$"
.1  = "ARE$DELINEATED$BY$A$SINGLE$'DOLLAR'$CHARACTER,$WRITE$A$PROGRAM"
.2  = "THAT$ALIGNS$EACH$COLUMN$OF$FIELDS$BY$ENSURING$THAT$WORDS$IN$EACH$"
.3  = "COLUMN$ARE$SEPARATED$BY$AT$LEAST$ONE$SPACE."
.4  = "FURTHER,$ALLOW$FOR$EACH$WORD$IN$A$COLUMN$TO$BE$EITHER$LEFT$"
.5  = "JUSTIFIED,$RIGHT$JUSTIFIED,$OR$CENTER$JUSTIFIED$WITHIN$ITS$COLUMN."

.LINES  = .0,.1,.2,.3,.4,.5,.NIL
MAXLEN  = 0

PAD(L)          [ >L-- @ WRCH('*S') ]
OUT(S,SS,L)     [ >L-- @ WRCH(S%SS++) ]

INIT(S,SS,L)    [ MAXLEN<L ? MAXLEN=L ]
DORT(S,SS,L)    [ PAD(MAXLEN-L); OUT(S,SS,L); WRCH('|') ]
DOLT(S,SS,L)    [ OUT(S,SS,L); PAD(MAXLEN-L); WRCH('|') ]
DOCT(S,SS,L;X)  [ X=MAXLEN-L; PAD(>>X); OUT(S,SS,L); PAD(X->>X); WRCH('|') ]

NEXT(S,I)       [ I<=%S && S%I<>'$' @ ++I; I ]
LINE(FN,S;I,J)  [ I=1; I<=%S @ [ J=NEXT(S,I); FN(S,I,J-I); I=J+1 ] ]
SCAN(FN;S,I)    [ I=0; (S=.LINES!I++) @ [ LINE(FN,S); FN<>INIT ? NEWLINE() ]; NEWLINE() ]

.() [ SCAN(INIT); SCAN(DOLT); SCAN(DORT); SCAN(DOCT); 0 ]

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.