úÎIèDqC      !"#$%&'()*+,-./0123456789:;<=>?@ABNone:All data that is parsed from the TSP statement is in this D type. The parser does not attempt to parse any of the data that is B on Page 1 of the PDF; most of this data all appears elsewhere on D the statement and can be calculated using the data that is in this C type (and besides, the data on Page 1 is in a multi-column format D that would be difficult to parse; since the data is all elsewhere,  it'9s not worth the effort.) One exception is the investment < allocation for future contributions, which does not appear  elsewhere. AIn addition, the statement contains a quarterly account summary. E This also is not parsed because it can be derived from all the data % that is elsewhere on the statement. A single fund in the YOUR TRANSACTION DETAIL BY FUND section  (e.g. the G Fund,  L 2040 Fund, etc.) The name of a fund, eg C Fund . This is a list of words; each # word will not contain any spaces. Represents the entire !YOUR TRANSACTION DETAIL BY SOURCE section. Ending balance in the YOUR TRANSACTION DETAIL BY FUND section. !Gain or Loss This Quarter in the YOUR TRANSACTION DETAIL BY  FUND section. The beginning balance in a YOUR TRANSACTION DETAIL BY FUND  section. A single posting in the YOUR TRANSACTION DETAIL BY FUND section. (!YOUR TRANSACTION DETAIL BY SOURCE Ending Balance. )!YOUR TRANSACTION DETAIL BY SOURCE Gain or Loss This Quarter. *!YOUR TRANSACTION DETAIL BY SOURCE Beginning Balance. ++The TSP statement has several lines in the YOUR TRANSACTION  DETAIL BY SOURCE$ section that contain summary data:  Beginning  Balance, Gain or Loss This Quarter, and Ending Balance. Since : the columns in these lines are all the same they are all 0 represented by this single type. Type synonyms  *, ), and  ( are used as appropriate. <BA list of words that indicates the transaction type. Each string . in this list will not have any spaces in it. ??Any data type that is a number of shares on the TSP statement. @4Any data type that is Dollars on the TSP statement. C A single word in a text column. D>Multiple words in a text column. Separated by a single space. EAParses a single decimal value. Recognizes negative signs. Strips  out dollar signs and commas. Use F rather than G. The Read instance of Decimal  returns an ambiguous parse; F will use the parse that - consumes the entire string if there is one. HParses a single date. I@Runs the given parser. If it fails without consuming any input, @ skip the current line. Keeps running the given parser until it  succeeds. CDo not wrap this parser in the Parsec many or many1 parsers or the D like; it probably will not do what you expect. When it gets to end B of file, it will consume the remaining junk lines, and then fail E after consuming input. This will cause many to fail while consuming C input, and it will not return the items that skipLinesThrough has 2 parsed so far. You can wrap skipLinesThrough in try, but D remember that then the trailing last junk lines will not be parsed ( (which might be what you want anyway.) JBRuns the end parser. If it succeeds, returns all values parsed so D far and the value of the end parser. If it fails without consuming ? any input, runs the main parser. If the main parser succeeds, A recurses. If the main parser fails without consuming any input,  skips a line and recurses. A@Parses a plain text TSP statement. The input must be generated < by the pdftotext program. This library was tested against : pdftotext version 0.18.4, which came with Debian Wheezy. B?Parses a TSP statement from a file. This function relies upon  the  pdftotext5 program. This program must exist somewhere in your B PATH. This library was tested against pdftotext version 0.18.4,  which came with Debian Wheezy. i  !"#$%&'()*+,-./0123456789:;<=>?@KCDLMNEHOPQRSTUVWXYIJZ[\A]B Filename ^_`abcdefghijC  !"#$%&'()*+,-./0123456789:;<=>?@ABC@?< +,-./01*)(23456789:;   !"#$%&'AB=>9   !"#$%&'()*+,-./012 3456789:;<=>?@KCDLMNEHOPQRSTUVWXYIJZ[\A]B^_`abcdefghijk       !"#$%&&'()*+,,-./0123456789:;<=>?@A?@BCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdeftsparse-0.4.0.0TsParse TspStatementtspDetailBySourcetspDetailByFundByFund bfFundNamebfBeginningBal bfPostings bfGainLoss bfEndingBalFundNameBySourcebsBeginningBalbsTxns bsGainLoss bsEndingBalByFundEndingBalbfebSharePrice bfebNumSharesbfebDollarBalanceByFundGainLossbfglDollarBalanceByFundBeginningBalbfbbSharePrice bfbbNumSharesbfbbDollarBalance ByFundPostingbfpPostingDate bfpTxnTypebfpTraditionalbfpRothbfpTotal bfpSharePrice bfpNumSharesBySourceEndingBalBySourceGainLossBySourceBeginningBalBySourceSummarybssTraditionalbssRothbssAuto bssMatchingbssTotalBySourcePostingbspPayrollOfficebspPostingDate bspTxnTypebspTraditionalbspRoth bspAutomatic bspMatchingbspTotalTxnTypePrettyprettySharesDollarsparseTspparseTspFromFilewordwordsdecimalbase Text.Read readMaybereadsdateskipLinesThroughparseLinesThroughisNonSpaceNonControl dollarSignspacedigitssafeRead columnBreaklabel txnBySourcetxnsBySourceSummaryfundName txnByFundbyFundBeginningBalbyFundGainLossbyFundEndingBalskipLinetxnDetailBySourceSectiontxnDetailOneFundtxnDetailsAllFunds readTspFile$fPrettyTspStatement$fPrettyByFund$fPrettyBySource$fPrettyByFundEndingBal$fPrettyByFundGainLoss$fPrettyByFundBeginningBal$fPrettyByFundPosting$fPrettyBySourceSummary$fPrettyBySourcePosting $fPrettyDay $fPretty[] $fPretty[]0$fPrettyDecimalRaw