NAME
    Ledger::Parser - Parse Ledger journals

VERSION
    version 0.01

SYNOPSIS
     use 5.010;
     use Ledger::Parser;
     my $ledgerp = Ledger::Parser->new();

     # parse a file
     my $journal = $ledgerp->parse_file("$ENV{HOME}/money.dat");

     # parse a string
     $journal = $ledgerp->parse(<<EOF);
     ; -*- Mode: ledger -*-
     09/06 dinner
     Expenses:Food          $10.00
     Expenses:Tips        20000.00 IDR
     Assets:Cash:Wallet

     2011/09/07 opening balances
     Assets:Mutual Funds:Mandiri  10,305.1234 MFEQUITY_MANDIRI_IAS
     Equity:Opening Balances

     P 2011/08/01 MFEQUITY_MANDIRI_IAS 1,453.8500 IDR
     P 2011/08/31 MFEQUITY_MANDIRI_IAS 1,514.1800 IDR
     EOF

     # get the transactions
     my @tx = $journal->get_transactions;

     # get the postings of a transaction
     my @postings = $tx[0]->get_postings;

     # get all the mentioned accounts
     my @accts = $journal->get_accounts;

DESCRIPTION
    This module parses Ledger journal into Perl document object. See
    http://ledger-cli.org/ for more on Ledger, the command-line double-entry
    accounting system software.

    This module uses Log::Any logging framework.

    This module uses Moo object system.

ATTRIBUTES
METHODS
  new()
    Create a new parser instance.

  $ledgerp->parse($str | $arrayref | $coderef | $filehandle) => $journal
    Parse ledger journal (which can be contained in a $str, an array of
    lines $arrayref, a subroutine which will be called for chunks until it
    returns undef, or a filehandle).

    Will die if there are parsing errors in journal.

    Returns Ledger::Journal object. The object will contain a series of
    Ledger::Transaction objects, which themselves will be comprised of a
    series of Ledger::Posting objects.

  $orgp->parse_file($filename) => $journal
    Just like parse(), but will load document from file instead.

FAQ
  Why? Ledger is already a command-line program. It even has 'lisp' output.
    I am not trying to reimplement/port Ledger to Perl. This module doesn't
    do reporting or parse expressions or many other Ledger features. I use
    this module mainly to insert/delete/edit transactions to journal file,
    e.g. for programatically reconciling journal with internet banking
    statement.

AUTHOR
    Steven Haryanto <stevenharyanto@gmail.com>

COPYRIGHT AND LICENSE
    This software is copyright (c) 2011 by Steven Haryanto.

    This is free software; you can redistribute it and/or modify it under
    the same terms as the Perl 5 programming language system itself.

