Skip to content

Commit 05f3c69

Browse files
committed
imp: Add ' as possible digit separator
It is used for Swiss Francs: CHF 1'000.
1 parent 440f808 commit 05f3c69

File tree

3 files changed

+20
-3
lines changed

3 files changed

+20
-3
lines changed

Diff for: hledger-lib/Hledger/Read/Common.hs

+3-1
Original file line numberDiff line numberDiff line change
@@ -1077,6 +1077,8 @@ disambiguateNumber msuggestedStyle (AmbiguousNumber grp1 sep grp2) =
10771077
-- Left (AmbiguousNumber "1" ',' "000")
10781078
-- >>> parseTest rawnumberp "1 000"
10791079
-- Right (WithSeparators ' ' ["1","000"] Nothing)
1080+
-- >>> parseTest rawnumberp "1'000"
1081+
-- Right (WithSeparators '\'' ["1","000"] Nothing)
10801082
--
10811083
rawnumberp :: TextParser m (Either AmbiguousNumber RawNumber)
10821084
rawnumberp = label "number" $ do
@@ -1142,7 +1144,7 @@ rawnumberp = label "number" $ do
11421144
pure $ NoSeparators grp1 (Just (decPt, mempty))
11431145

11441146
isDigitSeparatorChar :: Char -> Bool
1145-
isDigitSeparatorChar c = isDecimalMark c || c == ' '
1147+
isDigitSeparatorChar c = isDecimalMark c || c == ' ' || c == '\''
11461148

11471149
-- | Some kinds of number literal we might parse.
11481150
data RawNumber

Diff for: hledger/hledger.m4.md

+4-2
Original file line numberDiff line numberDiff line change
@@ -1184,10 +1184,11 @@ A *decimal mark* can be written as a period or a comma:
11841184

11851185
In the integer part of the quantity (left of the decimal mark), groups
11861186
of digits can optionally be separated by a *digit group mark* - a
1187-
space, comma, or period (different from the decimal mark):
1187+
space, comma, single quote, or period (different from the decimal mark):
11881188

11891189
$1,000,000.00
11901190
EUR 2.000.000,00
1191+
CHF 2'000'000.00
11911192
INR 9,99,99,999.00
11921193
1 000 000.9455
11931194

@@ -2192,9 +2193,10 @@ by 0 or more decimal digits.
21922193

21932194
A few more examples:
21942195
```journal
2195-
# number formats for $, EUR, INR and the no-symbol commodity:
2196+
# number formats for $, EUR, CHF, INR and the no-symbol commodity:
21962197
commodity $1,000.00
21972198
commodity EUR 1.000,00
2199+
commodity CHF 1'000.00
21982200
commodity INR 9,99,99,999.0
21992201
commodity 1 000 000.
22002202
```

Diff for: hledger/test/journal/numbers.test

+13
Original file line numberDiff line numberDiff line change
@@ -234,3 +234,16 @@ Balance changes in 2021:
234234
===++===================================
235235
a || -0.12345678901234567890123456 EUR
236236
>>>=0
237+
238+
# 19. number begins with a separator char
239+
hledger bal -f -
240+
<<<
241+
commodity 1'000.00 CHF
242+
243+
2017/1/1
244+
a 1000 CHF
245+
b -1000 CHF
246+
>>>
247+
1'000.00 CHF a
248+
-1'000.00 CHF b
249+
>>>=0

0 commit comments

Comments
 (0)