tighten up status: docs and behaviour a bit (fix #227)

A status: query term no longer accepts * as a synonym for 1,
which was a bit confusing since 1 matches both * and !.
For now, it takes a value of 1 (true) or anything else (false).
This commit is contained in:
Simon Michael 2014-12-24 23:48:23 -08:00
parent c138c35d3b
commit 62bad65e5b
3 changed files with 15 additions and 11 deletions

View File

@ -137,9 +137,13 @@ Now let's explore the available journal file syntax in detail.
Each journal entry begins with a [simple date](#simple-dates) in Each journal entry begins with a [simple date](#simple-dates) in
column 0, followed by three optional fields with spaces between them: column 0, followed by three optional fields with spaces between them:
a status flag (`*` or `!` or nothing), a transaction code (eg a check
number), and/or a description; then two or more postings (of some - a status flag, which can be empty or `!` or `*` (meaning "uncleared", "pending" and "cleared", or whatever you want)
amount to some account), each on their own line. - a transaction code (eg a check number),
- and/or a description
then two or more postings (of some amount to some account), each on
their own line.
The posting amounts within a transaction must always balance, ie add up to The posting amounts within a transaction must always balance, ie add up to
0. You can leave one amount blank and it will be inferred. 0. You can leave one amount blank and it will be inferred.
@ -852,7 +856,7 @@ A query term can be any of the following:
- `date2:PERIODEXPR` - as above, but match secondary dates - `date2:PERIODEXPR` - as above, but match secondary dates
- `tag:NAME[=REGEX]` - match by (exact, case sensitive) [tag](#tags) name, and optionally match the tag value by regular expression. Note `tag:` will match a transaction if it or any its postings have the tag, and will match posting if it or its parent transaction has the tag. - `tag:NAME[=REGEX]` - match by (exact, case sensitive) [tag](#tags) name, and optionally match the tag value by regular expression. Note `tag:` will match a transaction if it or any its postings have the tag, and will match posting if it or its parent transaction has the tag.
- `depth:N` - match (or display, depending on command) accounts at or above this [depth](#depth-limiting) - `depth:N` - match (or display, depending on command) accounts at or above this [depth](#depth-limiting)
- `status:1` or `status:0` - match cleared/uncleared transactions - `status:1` or `status:0` - match pending/cleared or uncleared transactions respectively
- `real:1` or `real:0` - match real/virtual-ness - `real:1` or `real:0` - match real/virtual-ness
- `empty:1` or `empty:0` - match if amount is/is not zero - `empty:1` or `empty:0` - match if amount is/is not zero
- `amt:N`, `amt:<N`, `amt:<=N`, `amt:>N`, `amt:>=N` - match postings with a single-commodity - `amt:N`, `amt:<N`, `amt:<=N`, `amt:>N`, `amt:>=N` - match postings with a single-commodity

View File

@ -331,18 +331,18 @@ parseTag s | '=' `elem` s = (n, Just $ tail v)
| otherwise = (s, Nothing) | otherwise = (s, Nothing)
where (n,v) = break (=='=') s where (n,v) = break (=='=') s
-- | Parse the boolean value part of a "status:" query, allowing "*" as -- -- , treating "*" or "!" as synonyms for "1".
-- another way to spell True, similar to the journal file format. -- | Parse the boolean value part of a "status:" query.
parseStatus :: String -> Bool parseStatus :: String -> Bool
parseStatus s = s `elem` (truestrings ++ ["*"]) parseStatus s = s `elem` (truestrings) -- ++ ["*","!"])
-- | Parse the boolean value part of a "status:" query. A true value can -- | Parse the boolean value part of a "status:" query. "1" means true,
-- be spelled as "1", "t" or "true". -- anything else will be parsed as false without error.
parseBool :: String -> Bool parseBool :: String -> Bool
parseBool s = s `elem` truestrings parseBool s = s `elem` truestrings
truestrings :: [String] truestrings :: [String]
truestrings = ["1","t","true"] truestrings = ["1"]
simplifyQuery :: Query -> Query simplifyQuery :: Query -> Query
simplifyQuery q = simplifyQuery q =

View File

@ -120,7 +120,7 @@ reportflags = [
,flagReq ["period","p"] (\s opts -> Right $ setopt "period" s opts) "PERIODEXP" "set start date, end date, and/or reporting interval all at once (overrides the flags above)" ,flagReq ["period","p"] (\s opts -> Right $ setopt "period" s opts) "PERIODEXP" "set start date, end date, and/or reporting interval all at once (overrides the flags above)"
,flagNone ["date2","aux-date"] (setboolopt "date2") "use postings/txns' secondary dates instead" ,flagNone ["date2","aux-date"] (setboolopt "date2") "use postings/txns' secondary dates instead"
,flagNone ["cleared","C"] (setboolopt "cleared") "include only cleared postings/txns" ,flagNone ["cleared","C"] (setboolopt "cleared") "include only pending/cleared postings/txns"
,flagNone ["uncleared","U"] (setboolopt "uncleared") "include only uncleared postings/txns" ,flagNone ["uncleared","U"] (setboolopt "uncleared") "include only uncleared postings/txns"
,flagNone ["real","R"] (setboolopt "real") "include only non-virtual postings" ,flagNone ["real","R"] (setboolopt "real") "include only non-virtual postings"
,flagReq ["depth"] (\s opts -> Right $ setopt "depth" s opts) "N" "hide accounts/postings deeper than N" ,flagReq ["depth"] (\s opts -> Right $ setopt "depth" s opts) "N" "hide accounts/postings deeper than N"