diff --git a/hledger-lib/Hledger/Read/TimedotReader.hs b/hledger-lib/Hledger/Read/TimedotReader.hs index 756e97d1d..0f29a8458 100644 --- a/hledger-lib/Hledger/Read/TimedotReader.hs +++ b/hledger-lib/Hledger/Read/TimedotReader.hs @@ -5,7 +5,9 @@ Example: @ #DATE -#ACCT DOTS # Each dot represents 15m, spaces are ignored +#ACCT DOTS # Each dot represents 15m, spaces are ignored +#ACCT 8 # numbers with or without a following h represent hours +#ACCT 5m # numbers followed by m represent minutes # on 2/1, 1h was spent on FOSS haskell work, 0.25h on research, etc. 2/1 @@ -126,16 +128,26 @@ timedotentryp = do return t timedotdurationp :: JournalParser m Quantity -timedotdurationp = try timedotnumberp <|> timedotdotsp +timedotdurationp = try timedotminutesp <|> try timedothoursp <|> timedotdotsp --- | Parse a duration written as a decimal number of hours (optionally followed by the letter h). +-- | Parse a duration written as a decimal number of minutes followed by the letter m. +-- @ +-- 5m +-- @ +timedotminutesp :: JournalParser m Quantity +timedotminutesp = do + (q, _, _, _) <- lift numberp + char 'm' + lift (many spacenonewline) + return $ q / 60 + +-- | Parse a duration written as a decimal number of hours optionally followed by the letter h. -- @ -- 1.5h -- @ -timedotnumberp :: JournalParser m Quantity -timedotnumberp = do +timedothoursp :: JournalParser m Quantity +timedothoursp = do (q, _, _, _) <- lift numberp - lift (many spacenonewline) optional $ char 'h' lift (many spacenonewline) return q diff --git a/hledger-lib/doc/hledger_timedot.5 b/hledger-lib/doc/hledger_timedot.5 index b90000be7..dda4f7785 100644 --- a/hledger-lib/doc/hledger_timedot.5 +++ b/hledger-lib/doc/hledger_timedot.5 @@ -28,15 +28,19 @@ pairs, one per line. Dates are hledger\-style simple dates (see hledger_journal(5)). Categories are hledger\-style account names, optionally indented. There must be at least two spaces between the category and the quantity. -Quantities can be written in two ways: +Quantities can be written in several ways: .IP "1." 3 -a series of dots (period characters). -Each dot represents "a quarter" \- eg, a quarter hour. -Spaces can be used to group dots into hours, for easier counting. +a series of dots (.). +Each dot represents one quarter unit \- eg, a quarter hour. +Spaces may optionally be used to group dots, for easier counting. .IP "2." 3 -a number (integer or decimal), representing "units" \- eg, hours. -A good alternative when dots are cumbersome. -(A number also can record negative quantities.) +an integral or decimal number optionally followed by the letter h +represents whole units \- eg, hours. +Numbers may be more convenient for large quantities (and can also record +negative quantities). +.IP "3." 3 +an integral or decimal number followed by the letter m represents 1/60th +units \- eg, minutes. .PP Blank lines and lines beginning with #, ; or * are ignored. An example: diff --git a/hledger-lib/doc/hledger_timedot.5.info b/hledger-lib/doc/hledger_timedot.5.info index bead33846..e9e515405 100644 --- a/hledger-lib/doc/hledger_timedot.5.info +++ b/hledger-lib/doc/hledger_timedot.5.info @@ -33,15 +33,18 @@ with a date, and is followed by category/quantity pairs, one per line. Dates are hledger-style simple dates (see hledger_journal(5)). Categories are hledger-style account names, optionally indented. There must be at least two spaces between the category and the quantity. -Quantities can be written in two ways: +Quantities can be written in several ways: - 1. a series of dots (period characters). Each dot represents "a - quarter" - eg, a quarter hour. Spaces can be used to group dots - into hours, for easier counting. + 1. a series of dots (.). Each dot represents one quarter unit - eg, a + quarter hour. Spaces may optionally be used to group dots, for + easier counting. - 2. a number (integer or decimal), representing "units" - eg, hours. A - good alternative when dots are cumbersome. (A number also can - record negative quantities.) + 2. an integral or decimal number optionally followed by the letter h + represents whole units - eg, hours. Numbers may be more convenient + for large quantities (and can also record negative quantities). + + 3. an integral or decimal number followed by the letter m represents + 1/60th units - eg, minutes. Blank lines and lines beginning with #, ; or * are ignored. An example: diff --git a/hledger-lib/doc/hledger_timedot.5.m4.md b/hledger-lib/doc/hledger_timedot.5.m4.md index 0a886dd05..926b9ad40 100644 --- a/hledger-lib/doc/hledger_timedot.5.m4.md +++ b/hledger-lib/doc/hledger_timedot.5.m4.md @@ -31,15 +31,16 @@ A day entry begins with a date, and is followed by category/quantity pairs, one Dates are hledger-style [simple dates](#simple-dates) (see hledger_journal(5)). Categories are hledger-style account names, optionally indented. There must be at least two spaces between the category and the quantity. -Quantities can be written in two ways: +Quantities can be written in several ways: -1. a series of dots (period characters). - Each dot represents "a quarter" - eg, a quarter hour. - Spaces can be used to group dots into hours, for easier counting. +1. a series of dots (.). + Each dot represents one quarter unit - eg, a quarter hour. + Spaces may optionally be used to group dots, for easier counting. -2. a number (integer or decimal), representing "units" - eg, hours. - A good alternative when dots are cumbersome. - (A number also can record negative quantities.) +2. an integral or decimal number optionally followed by the letter h represents whole units - eg, hours. + Numbers may be more convenient for large quantities (and can also record negative quantities). + +3. an integral or decimal number followed by the letter m represents 1/60th units - eg, minutes. Blank lines and lines beginning with #, ; or * are ignored. An example: diff --git a/hledger-lib/doc/hledger_timedot.5.txt b/hledger-lib/doc/hledger_timedot.5.txt index fff81ed61..1c86dba37 100644 --- a/hledger-lib/doc/hledger_timedot.5.txt +++ b/hledger-lib/doc/hledger_timedot.5.txt @@ -25,17 +25,20 @@ FILE FORMAT Dates are hledger-style simple dates (see hledger_journal(5)). Cate- gories are hledger-style account names, optionally indented. There must be at least two spaces between the category and the quantity. - Quantities can be written in two ways: + Quantities can be written in several ways: - 1. a series of dots (period characters). Each dot represents "a quar- - ter" - eg, a quarter hour. Spaces can be used to group dots into - hours, for easier counting. + 1. a series of dots (.). Each dot represents one quarter unit - eg, a + quarter hour. Spaces may optionally be used to group dots, for eas- + ier counting. - 2. a number (integer or decimal), representing "units" - eg, hours. A - good alternative when dots are cumbersome. (A number also can - record negative quantities.) + 2. an integral or decimal number optionally followed by the letter h + represents whole units - eg, hours. Numbers may be more convenient + for large quantities (and can also record negative quantities). - Blank lines and lines beginning with #, ; or * are ignored. An exam- + 3. an integral or decimal number followed by the letter m represents + 1/60th units - eg, minutes. + + Blank lines and lines beginning with #, ; or * are ignored. An exam- ple: # on this day, 6h was spent on client work, 1.5h on haskell FOSS work, etc. @@ -79,7 +82,7 @@ FILE FORMAT ------------++---------------------------------------- || 7.75 2.25 8.00 - I prefer to use period for separating account components. We can make + I prefer to use period for separating account components. We can make this work with an account alias: 2016/2/4 @@ -98,7 +101,7 @@ FILE FORMAT REPORTING BUGS - Report bugs at http://bugs.hledger.org (or on the #hledger IRC channel + Report bugs at http://bugs.hledger.org (or on the #hledger IRC channel or hledger mail list) @@ -112,7 +115,7 @@ COPYRIGHT SEE ALSO - hledger(1), hledger-ui(1), hledger-web(1), hledger-api(1), + hledger(1), hledger-ui(1), hledger-web(1), hledger-api(1), hledger_csv(5), hledger_journal(5), hledger_timeclock(5), hledger_time- dot(5), ledger(1)