83 lines
2.4 KiB
Nix
83 lines
2.4 KiB
Nix
{ common, core, ... } @ libs:
|
|
let
|
|
inherit(common) Amount;
|
|
inherit(core) expression library list string;
|
|
|
|
parseAmount
|
|
= regex:
|
|
text:
|
|
let
|
|
sign = if list.head valid == "-" then -1 else 1;
|
|
text'
|
|
= list.fold
|
|
(
|
|
result:
|
|
digit:
|
|
if result == ""
|
|
-> digit != "0"
|
|
then
|
|
"${result}${digit}"
|
|
else
|
|
""
|
|
)
|
|
""
|
|
(
|
|
string.splitAt'
|
|
"[^0-9]*"
|
|
text
|
|
);
|
|
valid = string.match regex text;
|
|
value
|
|
= if valid != null
|
|
&& text' != ""
|
|
then
|
|
#__trace "> »${text}«"
|
|
#__trace "< »${text'}«"
|
|
sign * (expression.fromJSON text')
|
|
else
|
|
0;
|
|
in
|
|
Amount value;
|
|
|
|
parseDMYdateTime
|
|
= regex:
|
|
date:
|
|
time:
|
|
let
|
|
dateParts = string.match regex date;
|
|
day = list.get dateParts 0;
|
|
month = list.get dateParts 1;
|
|
year = list.get dateParts 2;
|
|
in
|
|
"${year}-${month}-${day}T${time}";
|
|
|
|
trim
|
|
= text:
|
|
string.concatWords
|
|
(
|
|
list.filter
|
|
(part: part != "")
|
|
(string.splitSpaces text)
|
|
);
|
|
|
|
libs'
|
|
= libs
|
|
// {
|
|
helpers
|
|
= {
|
|
inherit parseAmount parseDMYdateTime trim;
|
|
|
|
parseAmountComma = parseAmount "([+-]?)[0-9.]+,[0-9]{2}";
|
|
parseAmountPeriod = parseAmount "([+-]?)[0-9,]+.[0-9]{2}";
|
|
|
|
parseGermanDateTime = parseDMYdateTime "([0-9]{2})[.]([0-9]{2})[.]([0-9]{4})";
|
|
parseBritishDateTime = parseDMYdateTime "([0-9]{2})/([0-9]{2})/([0-9]{4})";
|
|
};
|
|
};
|
|
in
|
|
{
|
|
amex = library.import ./amex.nix libs';
|
|
dkb = library.import ./dkb.nix libs';
|
|
paypal = library.import ./paypal.nix libs';
|
|
}
|