Data update
This commit is contained in:
parent
8e4e15fa56
commit
72eb4943cb
1853 changed files with 35514 additions and 9441 deletions
71
Task/Align-columns/Refal/align-columns.refal
Normal file
71
Task/Align-columns/Refal/align-columns.refal
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
$ENTRY Go {
|
||||
, <Arg 1>: e.File
|
||||
, <Arg 2>: e.Alignment
|
||||
, <ReadFile 1 e.File>: e.Lines
|
||||
, <Each (Split ('$')) e.Lines>: e.Parts
|
||||
, <Each (MaxWidth) <Transpose e.Parts>>: e.Cols
|
||||
= <Each (AlignLine (e.Alignment) (e.Cols)) e.Parts>;
|
||||
};
|
||||
|
||||
ReadFile {
|
||||
s.Chan e.File = <Open 'r' s.Chan e.File>
|
||||
<ReadFile (s.Chan)>;
|
||||
(s.Chan), <Get s.Chan>: {
|
||||
0 = <Close s.Chan>;
|
||||
e.Line = (e.Line) <ReadFile (s.Chan)>;
|
||||
};
|
||||
};
|
||||
|
||||
Split {
|
||||
(e.Sep) e.Part e.Sep e.Rest = (e.Part) <Split (e.Sep) e.Rest>;
|
||||
(e.Sep) e.Part = (e.Part);
|
||||
};
|
||||
|
||||
Each {
|
||||
(e.F) = ;
|
||||
(e.F) (e.X) e.Xs = (<Mu e.F e.X>) <Each (e.F) e.Xs>;
|
||||
};
|
||||
|
||||
MaxWidth {
|
||||
(Acc s.W) = s.W;
|
||||
(Acc s.W) (e.P) e.X, <Len e.P>: s.L, <Compare s.L s.W>: {
|
||||
'+' = <MaxWidth (Acc s.L) e.X>;
|
||||
s.C = <MaxWidth (Acc s.W) e.X>;
|
||||
};
|
||||
e.X = <MaxWidth (Acc 0) e.X>;
|
||||
};
|
||||
|
||||
Transpose {
|
||||
e.X, <Each (Head) e.X>: e.L, <Empty e.L>: {
|
||||
True = ;
|
||||
False = (e.L) <Transpose <Each (Tail) e.X>>;
|
||||
};
|
||||
};
|
||||
|
||||
ZipWith {
|
||||
(e.F) () e.Ys = ;
|
||||
(e.F) e.Xs () = ;
|
||||
(e.F) (t.X e.Xs) (t.Y e.Ys) = <Mu e.F t.X t.Y> <ZipWith (e.F) (e.Xs) (e.Ys)>;
|
||||
};
|
||||
|
||||
AlignCell {
|
||||
('left') (e.Cell) (s.Width),
|
||||
<Len e.Cell>: s.L = e.Cell <Rep <Sub s.Width s.L> ' '> ' ';
|
||||
('right') (e.Cell) (s.Width),
|
||||
<Len e.Cell>: s.L = <Rep <Sub s.Width s.L> ' '> e.Cell ' ';
|
||||
('center') (e.Cell) (s.Width),
|
||||
<Divmod <Sub s.Width <Len e.Cell>> 2>: (s.P) s.V,
|
||||
<Rep s.P ' '>: e.LP,
|
||||
<Rep <Add s.P s.V> ' '>: e.RP = e.LP e.Cell e.RP ' ';
|
||||
};
|
||||
|
||||
AlignLine {
|
||||
(e.Alignment) (e.Cols) e.Line =
|
||||
<Prout <ZipWith (AlignCell (e.Alignment)) (e.Line) (e.Cols)>>;
|
||||
};
|
||||
|
||||
Rep { 0 s.C = ; s.N s.C = s.C <Rep <Sub s.N 1> s.C>; };
|
||||
Empty { = True; () e.X = <Empty e.X>; e.X = False; };
|
||||
Len { e.X, <Lenw e.X>: s.L e.X = s.L; };
|
||||
Head { = ; (e.X) e.Xs = e.X; };
|
||||
Tail { = ; (e.X) e.Xs = e.Xs; };
|
||||
Loading…
Add table
Add a link
Reference in a new issue