diff options
Diffstat (limited to 'contrib')
-rw-r--r-- | contrib/CSVReader.cs | 165 | ||||
-rw-r--r-- | contrib/Makefile | 4 | ||||
-rw-r--r-- | contrib/ParseCcStmt.cs | 184 | ||||
-rw-r--r-- | contrib/README | 4 | ||||
-rwxr-xr-x | contrib/bal | 21 | ||||
-rwxr-xr-x | contrib/bal-huquq | 21 | ||||
-rwxr-xr-x | contrib/entry | 16 | ||||
-rwxr-xr-x | contrib/getquote-uk.py | 23 | ||||
-rwxr-xr-x | contrib/getquote.pl | 19 | ||||
-rwxr-xr-x | contrib/ledger-du | 49 | ||||
-rw-r--r-- | contrib/ledger.vim | 46 | ||||
-rw-r--r-- | contrib/ledger.xcodeproj/johnw.mode1 | 1434 | ||||
-rw-r--r-- | contrib/ledger.xcodeproj/johnw.pbxuser | 861 | ||||
-rw-r--r-- | contrib/ledger.xcodeproj/project.pbxproj | 584 | ||||
-rwxr-xr-x | contrib/repl.sh | 13 | ||||
-rwxr-xr-x | contrib/report | 21 | ||||
-rwxr-xr-x | contrib/tc | 7 | ||||
-rwxr-xr-x | contrib/ti | 5 | ||||
-rwxr-xr-x | contrib/to | 3 | ||||
-rwxr-xr-x | contrib/trend | 30 | ||||
-rw-r--r-- | contrib/vim/README | 100 | ||||
-rw-r--r-- | contrib/vim/ftplugin/ledger.vim | 302 | ||||
-rw-r--r-- | contrib/vim/syntax/ledger.vim | 49 |
23 files changed, 1036 insertions, 2925 deletions
diff --git a/contrib/CSVReader.cs b/contrib/CSVReader.cs new file mode 100644 index 00000000..a22eab06 --- /dev/null +++ b/contrib/CSVReader.cs @@ -0,0 +1,165 @@ +// This code is in the public domain. I can't remember where I found it on the Web, but it
+// didn't come with any license.
+
+using System;
+using System.Collections;
+using System.IO;
+using System.Text;
+
+namespace CSVReader {
+
+ /// <summary>
+ /// A data-reader style interface for reading CSV files.
+ /// </summary>
+ public class CSVReader : IDisposable {
+
+ #region Private variables
+
+ private Stream stream;
+ private StreamReader reader;
+
+ #endregion
+
+ /// <summary>
+ /// Create a new reader for the given stream.
+ /// </summary>
+ /// <param name="s">The stream to read the CSV from.</param>
+ public CSVReader(Stream s) : this(s, null) { }
+
+ /// <summary>
+ /// Create a new reader for the given stream and encoding.
+ /// </summary>
+ /// <param name="s">The stream to read the CSV from.</param>
+ /// <param name="enc">The encoding used.</param>
+ public CSVReader(Stream s, Encoding enc) {
+
+ this.stream = s;
+ if (!s.CanRead) {
+ throw new CSVReaderException("Could not read the given CSV stream!");
+ }
+ reader = (enc != null) ? new StreamReader(s, enc) : new StreamReader(s);
+ }
+
+ /// <summary>
+ /// Creates a new reader for the given text file path.
+ /// </summary>
+ /// <param name="filename">The name of the file to be read.</param>
+ public CSVReader(string filename) : this(filename, null) { }
+
+ /// <summary>
+ /// Creates a new reader for the given text file path and encoding.
+ /// </summary>
+ /// <param name="filename">The name of the file to be read.</param>
+ /// <param name="enc">The encoding used.</param>
+ public CSVReader(string filename, Encoding enc)
+ : this(new FileStream(filename, FileMode.Open), enc) { }
+
+ /// <summary>
+ /// Returns the fields for the next row of CSV data (or null if at eof)
+ /// </summary>
+ /// <returns>A string array of fields or null if at the end of file.</returns>
+ public string[] GetCSVLine() {
+
+ string data = reader.ReadLine();
+ if (data == null) return null;
+ if (data.Length == 0) return new string[0];
+
+ ArrayList result = new ArrayList();
+
+ ParseCSVFields(result, data);
+
+ return (string[])result.ToArray(typeof(string));
+ }
+
+ // Parses the CSV fields and pushes the fields into the result arraylist
+ private void ParseCSVFields(ArrayList result, string data) {
+
+ int pos = -1;
+ while (pos < data.Length)
+ result.Add(ParseCSVField(data, ref pos));
+ }
+
+ // Parses the field at the given position of the data, modified pos to match
+ // the first unparsed position and returns the parsed field
+ private string ParseCSVField(string data, ref int startSeparatorPosition) {
+
+ if (startSeparatorPosition == data.Length-1) {
+ startSeparatorPosition++;
+ // The last field is empty
+ return "";
+ }
+
+ int fromPos = startSeparatorPosition + 1;
+
+ // Determine if this is a quoted field
+ if (data[fromPos] == '"') {
+ // If we're at the end of the string, let's consider this a field that
+ // only contains the quote
+ if (fromPos == data.Length-1) {
+ fromPos++;
+ return "\"";
+ }
+
+ // Otherwise, return a string of appropriate length with double quotes collapsed
+ // Note that FSQ returns data.Length if no single quote was found
+ int nextSingleQuote = FindSingleQuote(data, fromPos+1);
+ startSeparatorPosition = nextSingleQuote+1;
+ return data.Substring(fromPos+1, nextSingleQuote-fromPos-1).Replace("\"\"", "\"");
+ }
+
+ // The field ends in the next comma or EOL
+ int nextComma = data.IndexOf(',', fromPos);
+ if (nextComma == -1) {
+ startSeparatorPosition = data.Length;
+ return data.Substring(fromPos);
+ }
+ else {
+ startSeparatorPosition = nextComma;
+ return data.Substring(fromPos, nextComma-fromPos);
+ }
+ }
+
+ // Returns the index of the next single quote mark in the string
+ // (starting from startFrom)
+ private int FindSingleQuote(string data, int startFrom) {
+
+ int i = startFrom-1;
+ while (++i < data.Length)
+ if (data[i] == '"') {
+ // If this is a double quote, bypass the chars
+ if (i < data.Length-1 && data[i+1] == '"') {
+ i++;
+ continue;
+ }
+ else
+ return i;
+ }
+ // If no quote found, return the end value of i (data.Length)
+ return i;
+ }
+
+ /// <summary>
+ /// Disposes the CSVReader. The underlying stream is closed.
+ /// </summary>
+ public void Dispose() {
+ // Closing the reader closes the underlying stream, too
+ if (reader != null) reader.Close();
+ else if (stream != null)
+ stream.Close(); // In case we failed before the reader was constructed
+ GC.SuppressFinalize(this);
+ }
+ }
+
+
+ /// <summary>
+ /// Exception class for CSVReader exceptions.
+ /// </summary>
+ public class CSVReaderException : ApplicationException {
+
+ /// <summary>
+ /// Constructs a new exception object with the given message.
+ /// </summary>
+ /// <param name="message">The exception message.</param>
+ public CSVReaderException(string message) : base(message) { }
+ }
+}
diff --git a/contrib/Makefile b/contrib/Makefile new file mode 100644 index 00000000..6e4d367a --- /dev/null +++ b/contrib/Makefile @@ -0,0 +1,4 @@ +all: ParseCcStmt.exe + +ParseCcStmt.exe: ParseCcStmt.cs CSVReader.cs + gmcs -out:ParseCcStmt.exe ParseCcStmt.cs CSVReader.cs diff --git a/contrib/ParseCcStmt.cs b/contrib/ParseCcStmt.cs new file mode 100644 index 00000000..c9ad1d55 --- /dev/null +++ b/contrib/ParseCcStmt.cs @@ -0,0 +1,184 @@ +/* + * Copyright (c) 2003-2008, John Wiegley. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of New Artisans LLC nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; + +using CSVReader; + +/** + * @file ParseCcStmt.cs + * + * @brief Provides a .NET way to turn a CSV report into Ledger transactions. + * + * I use this code for converting the statements from my own credit card + * issuer. I realize it's strange for this to be in C#, but I wrote it + * during a phase of C# contracting. The code is solid enough now -- + * and the Mono project is portable enough -- that I haven't seen the + * need to rewrite it into another language like Python. + */ + +namespace JohnWiegley +{ + public class Posting + { + public DateTime Date; + public DateTime PostedDate; + public string Code; + public string Payee; + public Decimal Amount; + } + + public interface IStatementConverter + { + List<Posting> ConvertRecords(Stream s); + } + + public class ConvertGoldMasterCardStatement : IStatementConverter + { + public List<Posting> ConvertRecords(Stream s) + { + List<Posting> posts = new List<Posting>(); + + using (CSVReader.CSVReader csv = new CSVReader.CSVReader(s)) { + string[] fields; + while ((fields = csv.GetCSVLine()) != null) { + if (fields[0] == "POSTING DATE") + continue; + + Posting post = new Posting(); + + post.Date = DateTime.ParseEpost(fields[0], "mm/dd/yy", null); + post.PostedDate = DateTime.ParseEpost(fields[1], "mm/dd/yy", null); + post.Payee = fields[2].Trim(); + post.Code = fields[3].Trim(); + post.Amount = Convert.ToDecimal(fields[4].Trim()); + + if (post.Code.Length == 0) + post.Code = null; + + posts.Add(post); + } + } + return posts; + } + } + + public class ConvertMastercardStatement : IStatementConverter + { + public List<Posting> ConvertRecords(Stream s) + { + List<Posting> posts = new List<Posting>(); + + using (CSVReader.CSVReader csv = new CSVReader.CSVReader(s)) { + string[] fields; + while ((fields = csv.GetCSVLine()) != null) { + Posting post = new Posting(); + + post.Date = DateTime.ParseEpost(fields[0], "m/dd/yyyy", null); + post.Payee = fields[2].Trim(); + post.Code = fields[3].Trim(); + post.Amount = - Convert.ToDecimal(fields[4].Trim()); + + if (post.Code.Length == 0) + post.Code = null; + + posts.Add(post); + } + } + return posts; + } + } + + public class PrintPostings + { + public string DefaultAccount(Posting post) { + if (Regex.IsMatch(post.Payee, "IGA")) + return "Expenses:Food"; + return "Expenses:Food"; + } + + public void Print(string AccountName, string PayAccountName, + List<Posting> posts) + { + foreach (Posting post in posts) { + if (post.Amount < 0) { + Console.WriteLine("{0} * {1}{2}", post.Date.ToString("yyyy/mm/dd"), + post.Code != null ? "(" + post.Code + ") " : "", + post.Payee); + Console.WriteLine(" {0,-36}{1,12}", AccountName, + "$" + (- post.Amount).ToString()); + Console.WriteLine(" {0}", PayAccountName); + } else { + Console.WriteLine("{0} {1}{2}", post.Date.ToString("yyyy/mm/dd"), + post.Code != null ? "(" + post.Code + ") " : "", + post.Payee); + Console.WriteLine(" {0,-36}{1,12}", DefaultAccount(post), + "$" + post.Amount.ToString()); + Console.WriteLine(" * {0}", AccountName); + } + Console.WriteLine(); + } + } + } + + public class ParseCcStmt + { + public static int Main(string[] args) + { + StreamReader reader = new StreamReader(args[0]); + string firstLine = reader.ReadLine(); + + string CardAccount = args[1]; + string BankAccount = args[2]; + + IStatementConverter converter; + + if (firstLine.StartsWith("POSTING DATE")) { + converter = new ConvertGoldMasterCardStatement(); + } else { + converter = new ConvertMastercardStatement(); + } + + reader = new StreamReader(args[0]); + List<Posting> posts = converter.ConvertRecords(reader.BaseStream); + + PrintPostings printer = new PrintPostings(); + printer.Print(CardAccount, BankAccount, posts); + + return 0; + } + } +} diff --git a/contrib/README b/contrib/README new file mode 100644 index 00000000..6108afbf --- /dev/null +++ b/contrib/README @@ -0,0 +1,4 @@ +This scripts are provided just to give some ideas. They probably need +to be modified to better suit your environment. Beware! + +John diff --git a/contrib/bal b/contrib/bal new file mode 100755 index 00000000..423e3e41 --- /dev/null +++ b/contrib/bal @@ -0,0 +1,21 @@ +#!/bin/sh + +switch="-c" +limit="-t (/Liabilities/?a<0:Ua>100)&a" + +if [ "$1" = "-C" -o "$1" = "-U" ]; then + switch="$1" + shift +elif [ "$1" = "-b" -o "$1" = "-e" -o "$1" = "-p" ]; then + switch="$1 $2" + shift 2 +fi + +accts="$@" +if [ -z "$accts" ]; then + accts="-Equity -Income -Expenses" +else + limit="" +fi + +ledger -VQ $switch $limit -s -S "-UT" balance $accts diff --git a/contrib/bal-huquq b/contrib/bal-huquq new file mode 100755 index 00000000..fad2854a --- /dev/null +++ b/contrib/bal-huquq @@ -0,0 +1,21 @@ +#!/bin/sh + +switch="-c" +limit="-t (/Liabilities/?(/Huquq/?a/P{2.22AU}<={-1.0}:a<0):Ua>100)&a" + +if [ "$1" = "-C" -o "$1" = "-U" ]; then + switch="$1" + shift +elif [ "$1" = "-b" -o "$1" = "-e" -o "$1" = "-p" ]; then + switch="$1 $2" + shift 2 +fi + +accts="$@" +if [ -z "$accts" ]; then + accts="-Equity -Income -Expenses" +else + limit="" +fi + +ledger -VQ $switch $limit -s -S "-UT" balance $accts diff --git a/contrib/entry b/contrib/entry new file mode 100755 index 00000000..ef1869da --- /dev/null +++ b/contrib/entry @@ -0,0 +1,16 @@ +#!/bin/sh + +if [ -z "$LEDGER" -o ! -r "$LEDGER" ]; then + echo Please set your LEDGER environment variable. +fi + +line=`wc -l $LEDGER | awk '{print $1}'` + +if ledger xact "$@" > /tmp/xact; then + cat /tmp/xact >> $LEDGER +else + echo "$@" >> $LEDGER +fi +rm /tmp/xact + +vi +$line $LEDGER diff --git a/contrib/getquote-uk.py b/contrib/getquote-uk.py new file mode 100755 index 00000000..a69d4e7d --- /dev/null +++ b/contrib/getquote-uk.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import urllib, string, sys + +def download(sym): + url = "http://uk.old.finance.yahoo.com/d/quotes.csv?s=" + url += sym + "&f=sl1d1t1c1ohgv&e=.csv" + f = urllib.urlopen(url, proxies={}) + info = f.read() + f.close() + fields = string.split(info, ',') + result = float(fields[1])/100 + return result + + +sym = sys.argv[1] +sym = sym.replace('_', '.') +if sym == '£': + print '£1.00' +else: + try: print "£" +str(download(sym)) + except: pass diff --git a/contrib/getquote.pl b/contrib/getquote.pl new file mode 100755 index 00000000..8e3bb678 --- /dev/null +++ b/contrib/getquote.pl @@ -0,0 +1,19 @@ +#!/usr/bin/env perl + +$timeout = 60; + +use Finance::Quote; +use POSIX qw(strftime localtime time); + +$q = Finance::Quote->new; +$q->timeout($timeout); +$q->require_labels(qw/price/); + +%quotes = $q->fetch("nasdaq", $ARGV[0]); +if ($quotes{$ARGV[0], "price"}) { + print strftime('%Y/%m/%d %H:%M:%S', localtime(time())); + print " ", $ARGV[0], " "; + print "\$", $quotes{$ARGV[0], "price"}, "\n"; +} else { + exit 1; +} diff --git a/contrib/ledger-du b/contrib/ledger-du new file mode 100755 index 00000000..580e916e --- /dev/null +++ b/contrib/ledger-du @@ -0,0 +1,49 @@ +#!/usr/bin/env python + +import string +import sys +import os +import time + +from stat import * +from os.path import * + +def report_file(path): + dir_elems = string.split(dirname(path), os.sep) + if dir_elems[0] == "." or dir_elems[0] == "": + dir_elems = dir_elems[1 :] + account = string.join(dir_elems, ":") + + info = os.stat(path) + print time.strftime("%Y/%m/%d", time.localtime(info[ST_MTIME])), + + print basename(path) + print " ", account, " ", info[ST_SIZE], "b" + print " Equity:Files" + print + +def find_files(path): + xacts = os.listdir(path) + for xact in xacts: + xact = join(path, xact) + if not islink(xact): + if isdir(xact) and xact != "/proc": + find_files(xact) + else: + report_file(xact) + +args = sys.argv[1:] +if len(args): + paths = args +else: + paths = ["."] + +print """ +C 1.00 Kb = 1024 b +C 1.00 Mb = 1024 Kb +C 1.00 Gb = 1024 Mb +C 1.00 Tb = 1024 Gb +""" + +for path in paths: + find_files(path) diff --git a/contrib/ledger.vim b/contrib/ledger.vim deleted file mode 100644 index df63feb8..00000000 --- a/contrib/ledger.vim +++ /dev/null @@ -1,46 +0,0 @@ -" Vim syntax file -" filetype: ledger -" Version: 0.0.2 -" by Wolfgang Oertl; Use according to the terms of the GPL>=2. -" Revision history -" 2005-02-05 first version (partly copied from ledger.vim 0.0.1) - -if version < 600 - syntax clear -elseif exists("b:current_sytax") - finish -endif - -" for debugging -syntax clear - -" region: a normal transaction -syn region transNorm start=/^\d/ skip=/^\s/ end=/^/ fold keepend transparent contains=transDate -syn match transDate /^\d\S\+/ contained -syn match Comment /^;.*$/ -" highlight default link transNorm Question -highlight default link Comment SpecialKey -highlight default link transDate Question - -" folding: how to represent a transaction in one line. -function! MyFoldText() - let line = strpart(getline(v:foldstart), 0, 65) - " get the amount at the end of the second line - let line2 = getline(v:foldstart+1) - let pos = match(line2, "[0-9.]*$") - let line2 = strpart(line2, pos) - let pad_len = 80 - strlen(line) - strlen(line2) - if (pad_len < 0) then - pad_len = 0 - endif - let pad = strpart(" ", 0, pad_len) - return line . pad . line2 -endfunction -set foldtext=MyFoldText() -set foldmethod=syntax - -" syncinc is easy: search for the first transaction. -syn sync clear -syn sync match ledgerSync grouphere transNorm "^\d" - -let b:current_syntax = "ledger" diff --git a/contrib/ledger.xcodeproj/johnw.mode1 b/contrib/ledger.xcodeproj/johnw.mode1 deleted file mode 100644 index 0c179deb..00000000 --- a/contrib/ledger.xcodeproj/johnw.mode1 +++ /dev/null @@ -1,1434 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>ActivePerspectiveName</key> - <string>Project</string> - <key>AllowedModules</key> - <array> - <dict> - <key>BundleLoadPath</key> - <string></string> - <key>MaxInstances</key> - <string>n</string> - <key>Module</key> - <string>PBXSmartGroupTreeModule</string> - <key>Name</key> - <string>Groups and Files Outline View</string> - </dict> - <dict> - <key>BundleLoadPath</key> - <string></string> - <key>MaxInstances</key> - <string>n</string> - <key>Module</key> - <string>PBXNavigatorGroup</string> - <key>Name</key> - <string>Editor</string> - </dict> - <dict> - <key>BundleLoadPath</key> - <string></string> - <key>MaxInstances</key> - <string>n</string> - <key>Module</key> - <string>XCTaskListModule</string> - <key>Name</key> - <string>Task List</string> - </dict> - <dict> - <key>BundleLoadPath</key> - <string></string> - <key>MaxInstances</key> - <string>n</string> - <key>Module</key> - <string>XCDetailModule</string> - <key>Name</key> - <string>File and Smart Group Detail Viewer</string> - </dict> - <dict> - <key>BundleLoadPath</key> - <string></string> - <key>MaxInstances</key> - <string>1</string> - <key>Module</key> - <string>PBXBuildResultsModule</string> - <key>Name</key> - <string>Detailed Build Results Viewer</string> - </dict> - <dict> - <key>BundleLoadPath</key> - <string></string> - <key>MaxInstances</key> - <string>1</string> - <key>Module</key> - <string>PBXProjectFindModule</string> - <key>Name</key> - <string>Project Batch Find Tool</string> - </dict> - <dict> - <key>BundleLoadPath</key> - <string></string> - <key>MaxInstances</key> - <string>n</string> - <key>Module</key> - <string>PBXRunSessionModule</string> - <key>Name</key> - <string>Run Log</string> - </dict> - <dict> - <key>BundleLoadPath</key> - <string></string> - <key>MaxInstances</key> - <string>n</string> - <key>Module</key> - <string>PBXBookmarksModule</string> - <key>Name</key> - <string>Bookmarks Tool</string> - </dict> - <dict> - <key>BundleLoadPath</key> - <string></string> - <key>MaxInstances</key> - <string>n</string> - <key>Module</key> - <string>PBXClassBrowserModule</string> - <key>Name</key> - <string>Class Browser</string> - </dict> - <dict> - <key>BundleLoadPath</key> - <string></string> - <key>MaxInstances</key> - <string>n</string> - <key>Module</key> - <string>PBXCVSModule</string> - <key>Name</key> - <string>Source Code Control Tool</string> - </dict> - <dict> - <key>BundleLoadPath</key> - <string></string> - <key>MaxInstances</key> - <string>n</string> - <key>Module</key> - <string>PBXDebugBreakpointsModule</string> - <key>Name</key> - <string>Debug Breakpoints Tool</string> - </dict> - <dict> - <key>BundleLoadPath</key> - <string></string> - <key>MaxInstances</key> - <string>n</string> - <key>Module</key> - <string>XCDockableInspector</string> - <key>Name</key> - <string>Inspector</string> - </dict> - <dict> - <key>BundleLoadPath</key> - <string></string> - <key>MaxInstances</key> - <string>n</string> - <key>Module</key> - <string>PBXOpenQuicklyModule</string> - <key>Name</key> - <string>Open Quickly Tool</string> - </dict> - <dict> - <key>BundleLoadPath</key> - <string></string> - <key>MaxInstances</key> - <string>1</string> - <key>Module</key> - <string>PBXDebugSessionModule</string> - <key>Name</key> - <string>Debugger</string> - </dict> - <dict> - <key>BundleLoadPath</key> - <string></string> - <key>MaxInstances</key> - <string>1</string> - <key>Module</key> - <string>PBXDebugCLIModule</string> - <key>Name</key> - <string>Debug Console</string> - </dict> - </array> - <key>Description</key> - <string>DefaultDescriptionKey</string> - <key>DockingSystemVisible</key> - <false/> - <key>Extension</key> - <string>mode1</string> - <key>FavBarConfig</key> - <dict> - <key>PBXProjectModuleGUID</key> - <string>33AD83720B8027C500CF4200</string> - <key>XCBarModuleItemNames</key> - <dict/> - <key>XCBarModuleItems</key> - <array/> - </dict> - <key>FirstTimeWindowDisplayed</key> - <false/> - <key>Identifier</key> - <string>com.apple.perspectives.project.mode1</string> - <key>MajorVersion</key> - <integer>31</integer> - <key>MinorVersion</key> - <integer>1</integer> - <key>Name</key> - <string>Default</string> - <key>Notifications</key> - <array> - <dict> - <key>XCObserverAutoDisconnectKey</key> - <true/> - <key>XCObserverDefintionKey</key> - <dict> - <key>PBXStatusErrorsKey</key> - <integer>0</integer> - </dict> - <key>XCObserverFactoryKey</key> - <string>XCPerspectivesSpecificationIdentifier</string> - <key>XCObserverGUIDKey</key> - <string>XCObserverProjectIdentifier</string> - <key>XCObserverNotificationKey</key> - <string>PBXStatusBuildStateMessageNotification</string> - <key>XCObserverTargetKey</key> - <string>XCMainBuildResultsModuleGUID</string> - <key>XCObserverTriggerKey</key> - <string>awakenModuleWithObserver:</string> - <key>XCObserverValidationKey</key> - <dict> - <key>PBXStatusErrorsKey</key> - <integer>2</integer> - </dict> - </dict> - <dict> - <key>XCObserverAutoDisconnectKey</key> - <true/> - <key>XCObserverDefintionKey</key> - <dict> - <key>PBXStatusWarningsKey</key> - <integer>0</integer> - </dict> - <key>XCObserverFactoryKey</key> - <string>XCPerspectivesSpecificationIdentifier</string> - <key>XCObserverGUIDKey</key> - <string>XCObserverProjectIdentifier</string> - <key>XCObserverNotificationKey</key> - <string>PBXStatusBuildStateMessageNotification</string> - <key>XCObserverTargetKey</key> - <string>XCMainBuildResultsModuleGUID</string> - <key>XCObserverTriggerKey</key> - <string>awakenModuleWithObserver:</string> - <key>XCObserverValidationKey</key> - <dict> - <key>PBXStatusWarningsKey</key> - <integer>2</integer> - </dict> - </dict> - </array> - <key>OpenEditors</key> - <array/> - <key>PerspectiveWidths</key> - <array> - <integer>-1</integer> - <integer>-1</integer> - </array> - <key>Perspectives</key> - <array> - <dict> - <key>ChosenToolbarItems</key> - <array> - <string>active-target-popup</string> - <string>action</string> - <string>NSToolbarFlexibleSpaceItem</string> - <string>buildOrClean</string> - <string>build-and-runOrDebug</string> - <string>com.apple.ide.PBXToolbarStopButton</string> - <string>get-info</string> - <string>toggle-editor</string> - <string>NSToolbarFlexibleSpaceItem</string> - <string>com.apple.pbx.toolbar.searchfield</string> - </array> - <key>ControllerClassBaseName</key> - <string></string> - <key>IconName</key> - <string>WindowOfProjectWithEditor</string> - <key>Identifier</key> - <string>perspective.project</string> - <key>IsVertical</key> - <false/> - <key>Layout</key> - <array> - <dict> - <key>BecomeActive</key> - <true/> - <key>ContentConfiguration</key> - <dict> - <key>PBXBottomSmartGroupGIDs</key> - <array> - <string>1C37FBAC04509CD000000102</string> - <string>1C37FAAC04509CD000000102</string> - <string>1C08E77C0454961000C914BD</string> - <string>1C37FABC05509CD000000102</string> - <string>1C37FABC05539CD112110102</string> - <string>E2644B35053B69B200211256</string> - <string>1C37FABC04509CD000100104</string> - <string>1CC0EA4004350EF90044410B</string> - <string>1CC0EA4004350EF90041110B</string> - </array> - <key>PBXProjectModuleGUID</key> - <string>1CE0B1FE06471DED0097A5F4</string> - <key>PBXProjectModuleLabel</key> - <string>Files</string> - <key>PBXProjectStructureProvided</key> - <string>yes</string> - <key>PBXSmartGroupTreeModuleColumnData</key> - <dict> - <key>PBXSmartGroupTreeModuleColumnWidthsKey</key> - <array> - <real>186</real> - </array> - <key>PBXSmartGroupTreeModuleColumnsKey_v4</key> - <array> - <string>MainColumn</string> - </array> - </dict> - <key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key> - <dict> - <key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key> - <array> - <string>08FB7794FE84155DC02AAC07</string> - <string>08FB7795FE84155DC02AAC07</string> - <string>3332304B0B802B5500C403F5</string> - <string>333230630B802BB200C403F5</string> - <string>3332304F0B802B6500C403F5</string> - <string>333230590B802B8E00C403F5</string> - <string>C6859E8C029090F304C91782</string> - <string>33B8460F0BD0A60100472F4E</string> - <string>1AB674ADFE9D54B511CA2CBB</string> - <string>1C37FBAC04509CD000000102</string> - <string>1C37FAAC04509CD000000102</string> - <string>1C37FABC05509CD000000102</string> - </array> - <key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key> - <array> - <array> - <integer>0</integer> - </array> - </array> - <key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key> - <string>{{0, 0}, {186, 764}}</string> - </dict> - <key>PBXTopSmartGroupGIDs</key> - <array/> - <key>XCIncludePerspectivesSwitch</key> - <true/> - <key>XCSharingToken</key> - <string>com.apple.Xcode.GFSharingToken</string> - </dict> - <key>GeometryConfiguration</key> - <dict> - <key>Frame</key> - <string>{{0, 0}, {203, 782}}</string> - <key>GroupTreeTableConfiguration</key> - <array> - <string>MainColumn</string> - <real>186</real> - </array> - <key>RubberWindowFrame</key> - <string>206 55 1041 823 0 0 1440 878 </string> - </dict> - <key>Module</key> - <string>PBXSmartGroupTreeModule</string> - <key>Proportion</key> - <string>203pt</string> - </dict> - <dict> - <key>Dock</key> - <array> - <dict> - <key>ContentConfiguration</key> - <dict> - <key>PBXProjectModuleGUID</key> - <string>1CE0B20306471E060097A5F4</string> - <key>PBXProjectModuleLabel</key> - <string>amount.cc</string> - <key>PBXSplitModuleInNavigatorKey</key> - <dict> - <key>Split0</key> - <dict> - <key>PBXProjectModuleGUID</key> - <string>1CE0B20406471E060097A5F4</string> - <key>PBXProjectModuleLabel</key> - <string>amount.cc</string> - <key>_historyCapacity</key> - <integer>0</integer> - <key>bookmark</key> - <string>3357D0BB0BD4A651004B3223</string> - <key>history</key> - <array> - <string>333230340B802B2C00C403F5</string> - <string>333230760B802C3300C403F5</string> - <string>3332307B0B802C4100C403F5</string> - <string>3332308E0B802C7A00C403F5</string> - <string>333230960B802C9A00C403F5</string> - <string>333230A30B802D4000C403F5</string> - <string>333230A40B802D4000C403F5</string> - <string>333230A70B802D4000C403F5</string> - <string>333230A80B802D4000C403F5</string> - <string>333230A90B802D4000C403F5</string> - <string>333230AA0B802D4000C403F5</string> - <string>333230AB0B802D4000C403F5</string> - <string>333230AC0B802D4000C403F5</string> - <string>333230AD0B802D4000C403F5</string> - <string>333230AF0B802D4000C403F5</string> - <string>333231000B802FF000C403F5</string> - <string>33B8460B0BD0A5CC00472F4E</string> - <string>33B846130BD0A63200472F4E</string> - <string>33B846400BD0A6EB00472F4E</string> - <string>3357D0B80BD4A651004B3223</string> - <string>3357D0B90BD4A651004B3223</string> - </array> - <key>prevStack</key> - <array> - <string>333230360B802B2C00C403F5</string> - <string>333230700B802C1B00C403F5</string> - <string>333230740B802C2700C403F5</string> - <string>333230780B802C3300C403F5</string> - <string>3332307D0B802C4100C403F5</string> - <string>3332307E0B802C4100C403F5</string> - <string>333230820B802C4D00C403F5</string> - <string>333230860B802C6100C403F5</string> - <string>3332308B0B802C7100C403F5</string> - <string>3332308C0B802C7100C403F5</string> - <string>333230900B802C7A00C403F5</string> - <string>333230940B802C8B00C403F5</string> - <string>333230990B802C9A00C403F5</string> - <string>3332309A0B802C9A00C403F5</string> - <string>333230B20B802D4000C403F5</string> - <string>333230B40B802D4000C403F5</string> - <string>333230BA0B802D4000C403F5</string> - <string>333230BE0B802D4000C403F5</string> - <string>333230C00B802D4000C403F5</string> - <string>333230C20B802D4000C403F5</string> - <string>33B8460D0BD0A5CC00472F4E</string> - <string>3357D0BA0BD4A651004B3223</string> - </array> - </dict> - <key>SplitCount</key> - <string>1</string> - </dict> - <key>StatusBarVisibility</key> - <true/> - </dict> - <key>GeometryConfiguration</key> - <dict> - <key>Frame</key> - <string>{{0, 0}, {833, 544}}</string> - <key>RubberWindowFrame</key> - <string>206 55 1041 823 0 0 1440 878 </string> - </dict> - <key>Module</key> - <string>PBXNavigatorGroup</string> - <key>Proportion</key> - <string>544pt</string> - </dict> - <dict> - <key>ContentConfiguration</key> - <dict> - <key>PBXProjectModuleGUID</key> - <string>1CE0B20506471E060097A5F4</string> - <key>PBXProjectModuleLabel</key> - <string>Detail</string> - </dict> - <key>GeometryConfiguration</key> - <dict> - <key>Frame</key> - <string>{{0, 549}, {833, 233}}</string> - <key>RubberWindowFrame</key> - <string>206 55 1041 823 0 0 1440 878 </string> - </dict> - <key>Module</key> - <string>XCDetailModule</string> - <key>Proportion</key> - <string>233pt</string> - </dict> - </array> - <key>Proportion</key> - <string>833pt</string> - </dict> - </array> - <key>Name</key> - <string>Project</string> - <key>ServiceClasses</key> - <array> - <string>XCModuleDock</string> - <string>PBXSmartGroupTreeModule</string> - <string>XCModuleDock</string> - <string>PBXNavigatorGroup</string> - <string>XCDetailModule</string> - </array> - <key>TableOfContents</key> - <array> - <string>3357D0950BD4A3DB004B3223</string> - <string>1CE0B1FE06471DED0097A5F4</string> - <string>3357D0960BD4A3DB004B3223</string> - <string>1CE0B20306471E060097A5F4</string> - <string>1CE0B20506471E060097A5F4</string> - </array> - <key>ToolbarConfiguration</key> - <string>xcode.toolbar.config.default</string> - </dict> - <dict> - <key>ControllerClassBaseName</key> - <string></string> - <key>IconName</key> - <string>WindowOfProject</string> - <key>Identifier</key> - <string>perspective.morph</string> - <key>IsVertical</key> - <integer>0</integer> - <key>Layout</key> - <array> - <dict> - <key>BecomeActive</key> - <integer>1</integer> - <key>ContentConfiguration</key> - <dict> - <key>PBXBottomSmartGroupGIDs</key> - <array> - <string>1C37FBAC04509CD000000102</string> - <string>1C37FAAC04509CD000000102</string> - <string>1C08E77C0454961000C914BD</string> - <string>1C37FABC05509CD000000102</string> - <string>1C37FABC05539CD112110102</string> - <string>E2644B35053B69B200211256</string> - <string>1C37FABC04509CD000100104</string> - <string>1CC0EA4004350EF90044410B</string> - <string>1CC0EA4004350EF90041110B</string> - </array> - <key>PBXProjectModuleGUID</key> - <string>11E0B1FE06471DED0097A5F4</string> - <key>PBXProjectModuleLabel</key> - <string>Files</string> - <key>PBXProjectStructureProvided</key> - <string>yes</string> - <key>PBXSmartGroupTreeModuleColumnData</key> - <dict> - <key>PBXSmartGroupTreeModuleColumnWidthsKey</key> - <array> - <real>186</real> - </array> - <key>PBXSmartGroupTreeModuleColumnsKey_v4</key> - <array> - <string>MainColumn</string> - </array> - </dict> - <key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key> - <dict> - <key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key> - <array> - <string>29B97314FDCFA39411CA2CEA</string> - <string>1C37FABC05509CD000000102</string> - </array> - <key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key> - <array> - <array> - <integer>0</integer> - </array> - </array> - <key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key> - <string>{{0, 0}, {186, 337}}</string> - </dict> - <key>PBXTopSmartGroupGIDs</key> - <array/> - <key>XCIncludePerspectivesSwitch</key> - <integer>1</integer> - <key>XCSharingToken</key> - <string>com.apple.Xcode.GFSharingToken</string> - </dict> - <key>GeometryConfiguration</key> - <dict> - <key>Frame</key> - <string>{{0, 0}, {203, 355}}</string> - <key>GroupTreeTableConfiguration</key> - <array> - <string>MainColumn</string> - <real>186</real> - </array> - <key>RubberWindowFrame</key> - <string>373 269 690 397 0 0 1440 878 </string> - </dict> - <key>Module</key> - <string>PBXSmartGroupTreeModule</string> - <key>Proportion</key> - <string>100%</string> - </dict> - </array> - <key>Name</key> - <string>Morph</string> - <key>PreferredWidth</key> - <integer>300</integer> - <key>ServiceClasses</key> - <array> - <string>XCModuleDock</string> - <string>PBXSmartGroupTreeModule</string> - </array> - <key>TableOfContents</key> - <array> - <string>11E0B1FE06471DED0097A5F4</string> - </array> - <key>ToolbarConfiguration</key> - <string>xcode.toolbar.config.default.short</string> - </dict> - </array> - <key>PerspectivesBarVisible</key> - <false/> - <key>ShelfIsVisible</key> - <false/> - <key>SourceDescription</key> - <string>file at '/System/Library/PrivateFrameworks/DevToolsInterface.framework/Versions/A/Resources/XCPerspectivesSpecificationMode1.xcperspec'</string> - <key>StatusbarIsVisible</key> - <true/> - <key>TimeStamp</key> - <real>198485585.74654299</real> - <key>ToolbarDisplayMode</key> - <integer>1</integer> - <key>ToolbarIsVisible</key> - <true/> - <key>ToolbarSizeMode</key> - <integer>1</integer> - <key>Type</key> - <string>Perspectives</string> - <key>UpdateMessage</key> - <string>The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'?</string> - <key>WindowJustification</key> - <integer>5</integer> - <key>WindowOrderList</key> - <array> - <string>/Volumes/Users/johnw/Projects/local/ledger/trunk/ledger.xcodeproj</string> - <string>33AD83730B8027C500CF4200</string> - </array> - <key>WindowString</key> - <string>206 55 1041 823 0 0 1440 878 </string> - <key>WindowTools</key> - <array> - <dict> - <key>FirstTimeWindowDisplayed</key> - <false/> - <key>Identifier</key> - <string>windowTool.build</string> - <key>IsVertical</key> - <true/> - <key>Layout</key> - <array> - <dict> - <key>Dock</key> - <array> - <dict> - <key>ContentConfiguration</key> - <dict> - <key>PBXProjectModuleGUID</key> - <string>1CD0528F0623707200166675</string> - <key>PBXProjectModuleLabel</key> - <string>amount.cc</string> - <key>StatusBarVisibility</key> - <true/> - </dict> - <key>GeometryConfiguration</key> - <dict> - <key>Frame</key> - <string>{{0, 0}, {730, 268}}</string> - <key>RubberWindowFrame</key> - <string>397 238 730 550 0 0 1440 878 </string> - </dict> - <key>Module</key> - <string>PBXNavigatorGroup</string> - <key>Proportion</key> - <string>268pt</string> - </dict> - <dict> - <key>BecomeActive</key> - <true/> - <key>ContentConfiguration</key> - <dict> - <key>PBXBuildLogShowsTranscriptDefaultKey</key> - <string>{{0, 93}, {730, 143}}</string> - <key>PBXProjectModuleGUID</key> - <string>XCMainBuildResultsModuleGUID</string> - <key>PBXProjectModuleLabel</key> - <string>Build</string> - <key>XCBuildResultsTrigger_Collapse</key> - <integer>1022</integer> - <key>XCBuildResultsTrigger_Open</key> - <integer>1013</integer> - </dict> - <key>GeometryConfiguration</key> - <dict> - <key>Frame</key> - <string>{{0, 273}, {730, 236}}</string> - <key>RubberWindowFrame</key> - <string>397 238 730 550 0 0 1440 878 </string> - </dict> - <key>Module</key> - <string>PBXBuildResultsModule</string> - <key>Proportion</key> - <string>236pt</string> - </dict> - </array> - <key>Proportion</key> - <string>509pt</string> - </dict> - </array> - <key>Name</key> - <string>Build Results</string> - <key>ServiceClasses</key> - <array> - <string>PBXBuildResultsModule</string> - </array> - <key>StatusbarIsVisible</key> - <true/> - <key>TableOfContents</key> - <array> - <string>33AD83730B8027C500CF4200</string> - <string>3357D0990BD4A3E5004B3223</string> - <string>1CD0528F0623707200166675</string> - <string>XCMainBuildResultsModuleGUID</string> - </array> - <key>ToolbarConfiguration</key> - <string>xcode.toolbar.config.build</string> - <key>WindowString</key> - <string>397 238 730 550 0 0 1440 878 </string> - <key>WindowToolGUID</key> - <string>33AD83730B8027C500CF4200</string> - <key>WindowToolIsVisible</key> - <true/> - </dict> - <dict> - <key>FirstTimeWindowDisplayed</key> - <false/> - <key>Identifier</key> - <string>windowTool.debugger</string> - <key>IsVertical</key> - <true/> - <key>Layout</key> - <array> - <dict> - <key>Dock</key> - <array> - <dict> - <key>ContentConfiguration</key> - <dict> - <key>Debugger</key> - <dict> - <key>HorizontalSplitView</key> - <dict> - <key>_collapsingFrameDimension</key> - <real>0.0</real> - <key>_indexOfCollapsedView</key> - <integer>0</integer> - <key>_percentageOfCollapsedView</key> - <real>0.0</real> - <key>isCollapsed</key> - <string>yes</string> - <key>sizes</key> - <array> - <string>{{0, 0}, {377, 331}}</string> - <string>{{377, 0}, {489, 331}}</string> - </array> - </dict> - <key>VerticalSplitView</key> - <dict> - <key>_collapsingFrameDimension</key> - <real>0.0</real> - <key>_indexOfCollapsedView</key> - <integer>0</integer> - <key>_percentageOfCollapsedView</key> - <real>0.0</real> - <key>isCollapsed</key> - <string>yes</string> - <key>sizes</key> - <array> - <string>{{0, 0}, {866, 331}}</string> - <string>{{0, 331}, {866, 416}}</string> - </array> - </dict> - </dict> - <key>LauncherConfigVersion</key> - <string>8</string> - <key>PBXProjectModuleGUID</key> - <string>1C162984064C10D400B95A72</string> - <key>PBXProjectModuleLabel</key> - <string>Debug - GLUTExamples (Underwater)</string> - </dict> - <key>GeometryConfiguration</key> - <dict> - <key>DebugConsoleDrawerSize</key> - <string>{100, 120}</string> - <key>DebugConsoleVisible</key> - <string>None</string> - <key>DebugConsoleWindowFrame</key> - <string>{{200, 200}, {500, 300}}</string> - <key>DebugSTDIOWindowFrame</key> - <string>{{200, 200}, {500, 300}}</string> - <key>Frame</key> - <string>{{0, 0}, {866, 747}}</string> - <key>RubberWindowFrame</key> - <string>106 71 866 788 0 0 1440 878 </string> - </dict> - <key>Module</key> - <string>PBXDebugSessionModule</string> - <key>Proportion</key> - <string>747pt</string> - </dict> - </array> - <key>Proportion</key> - <string>747pt</string> - </dict> - </array> - <key>Name</key> - <string>Debugger</string> - <key>ServiceClasses</key> - <array> - <string>PBXDebugSessionModule</string> - </array> - <key>StatusbarIsVisible</key> - <true/> - <key>TableOfContents</key> - <array> - <string>1CD10A99069EF8BA00B06720</string> - <string>3332303A0B802B2C00C403F5</string> - <string>1C162984064C10D400B95A72</string> - <string>3332303B0B802B2C00C403F5</string> - <string>3332303C0B802B2C00C403F5</string> - <string>3332303D0B802B2C00C403F5</string> - <string>3332303E0B802B2C00C403F5</string> - <string>3332303F0B802B2C00C403F5</string> - <string>333230400B802B2C00C403F5</string> - </array> - <key>ToolbarConfiguration</key> - <string>xcode.toolbar.config.debug</string> - <key>WindowString</key> - <string>106 71 866 788 0 0 1440 878 </string> - <key>WindowToolGUID</key> - <string>1CD10A99069EF8BA00B06720</string> - <key>WindowToolIsVisible</key> - <false/> - </dict> - <dict> - <key>FirstTimeWindowDisplayed</key> - <false/> - <key>Identifier</key> - <string>windowTool.find</string> - <key>IsVertical</key> - <true/> - <key>Layout</key> - <array> - <dict> - <key>Dock</key> - <array> - <dict> - <key>Dock</key> - <array> - <dict> - <key>ContentConfiguration</key> - <dict> - <key>PBXProjectModuleGUID</key> - <string>1CDD528C0622207200134675</string> - <key>PBXProjectModuleLabel</key> - <string></string> - <key>StatusBarVisibility</key> - <true/> - </dict> - <key>GeometryConfiguration</key> - <dict> - <key>Frame</key> - <string>{{0, 0}, {781, 212}}</string> - <key>RubberWindowFrame</key> - <string>227 385 781 470 0 0 1440 878 </string> - </dict> - <key>Module</key> - <string>PBXNavigatorGroup</string> - <key>Proportion</key> - <string>781pt</string> - </dict> - </array> - <key>Proportion</key> - <string>212pt</string> - </dict> - <dict> - <key>ContentConfiguration</key> - <dict> - <key>PBXProjectModuleGUID</key> - <string>1CD0528E0623707200166675</string> - <key>PBXProjectModuleLabel</key> - <string>Project Find</string> - </dict> - <key>GeometryConfiguration</key> - <dict> - <key>Frame</key> - <string>{{0, 217}, {781, 212}}</string> - <key>RubberWindowFrame</key> - <string>227 385 781 470 0 0 1440 878 </string> - </dict> - <key>Module</key> - <string>PBXProjectFindModule</string> - <key>Proportion</key> - <string>212pt</string> - </dict> - </array> - <key>Proportion</key> - <string>429pt</string> - </dict> - </array> - <key>Name</key> - <string>Project Find</string> - <key>ServiceClasses</key> - <array> - <string>PBXProjectFindModule</string> - </array> - <key>StatusbarIsVisible</key> - <true/> - <key>TableOfContents</key> - <array> - <string>1C530D57069F1CE1000CFCEE</string> - <string>3332309E0B802CA500C403F5</string> - <string>3332309F0B802CA500C403F5</string> - <string>1CDD528C0622207200134675</string> - <string>1CD0528E0623707200166675</string> - </array> - <key>WindowString</key> - <string>227 385 781 470 0 0 1440 878 </string> - <key>WindowToolGUID</key> - <string>1C530D57069F1CE1000CFCEE</string> - <key>WindowToolIsVisible</key> - <false/> - </dict> - <dict> - <key>Identifier</key> - <string>MENUSEPARATOR</string> - </dict> - <dict> - <key>FirstTimeWindowDisplayed</key> - <false/> - <key>Identifier</key> - <string>windowTool.debuggerConsole</string> - <key>IsVertical</key> - <true/> - <key>Layout</key> - <array> - <dict> - <key>Dock</key> - <array> - <dict> - <key>BecomeActive</key> - <true/> - <key>ContentConfiguration</key> - <dict> - <key>PBXProjectModuleGUID</key> - <string>1C78EAAC065D492600B07095</string> - <key>PBXProjectModuleLabel</key> - <string>Debugger Console</string> - </dict> - <key>GeometryConfiguration</key> - <dict> - <key>Frame</key> - <string>{{0, 0}, {440, 358}}</string> - <key>RubberWindowFrame</key> - <string>127 436 440 400 0 0 1440 878 </string> - </dict> - <key>Module</key> - <string>PBXDebugCLIModule</string> - <key>Proportion</key> - <string>358pt</string> - </dict> - </array> - <key>Proportion</key> - <string>359pt</string> - </dict> - </array> - <key>Name</key> - <string>Debugger Console</string> - <key>ServiceClasses</key> - <array> - <string>PBXDebugCLIModule</string> - </array> - <key>StatusbarIsVisible</key> - <true/> - <key>TableOfContents</key> - <array> - <string>333230D00B802DB800C403F5</string> - <string>333230D10B802DB800C403F5</string> - <string>1C78EAAC065D492600B07095</string> - </array> - <key>WindowString</key> - <string>127 436 440 400 0 0 1440 878 </string> - <key>WindowToolGUID</key> - <string>333230D00B802DB800C403F5</string> - <key>WindowToolIsVisible</key> - <false/> - </dict> - <dict> - <key>Identifier</key> - <string>windowTool.run</string> - <key>Layout</key> - <array> - <dict> - <key>Dock</key> - <array> - <dict> - <key>ContentConfiguration</key> - <dict> - <key>LauncherConfigVersion</key> - <string>3</string> - <key>PBXProjectModuleGUID</key> - <string>1CD0528B0623707200166675</string> - <key>PBXProjectModuleLabel</key> - <string>Run</string> - <key>Runner</key> - <dict> - <key>HorizontalSplitView</key> - <dict> - <key>_collapsingFrameDimension</key> - <real>0.0</real> - <key>_indexOfCollapsedView</key> - <integer>0</integer> - <key>_percentageOfCollapsedView</key> - <real>0.0</real> - <key>isCollapsed</key> - <string>yes</string> - <key>sizes</key> - <array> - <string>{{0, 0}, {493, 167}}</string> - <string>{{0, 176}, {493, 267}}</string> - </array> - </dict> - <key>VerticalSplitView</key> - <dict> - <key>_collapsingFrameDimension</key> - <real>0.0</real> - <key>_indexOfCollapsedView</key> - <integer>0</integer> - <key>_percentageOfCollapsedView</key> - <real>0.0</real> - <key>isCollapsed</key> - <string>yes</string> - <key>sizes</key> - <array> - <string>{{0, 0}, {405, 443}}</string> - <string>{{414, 0}, {514, 443}}</string> - </array> - </dict> - </dict> - </dict> - <key>GeometryConfiguration</key> - <dict> - <key>Frame</key> - <string>{{0, 0}, {460, 159}}</string> - <key>RubberWindowFrame</key> - <string>316 696 459 200 0 0 1280 1002 </string> - </dict> - <key>Module</key> - <string>PBXRunSessionModule</string> - <key>Proportion</key> - <string>159pt</string> - </dict> - </array> - <key>Proportion</key> - <string>159pt</string> - </dict> - </array> - <key>Name</key> - <string>Run Log</string> - <key>ServiceClasses</key> - <array> - <string>PBXRunSessionModule</string> - </array> - <key>StatusbarIsVisible</key> - <integer>1</integer> - <key>TableOfContents</key> - <array> - <string>1C0AD2B3069F1EA900FABCE6</string> - <string>1C0AD2B4069F1EA900FABCE6</string> - <string>1CD0528B0623707200166675</string> - <string>1C0AD2B5069F1EA900FABCE6</string> - </array> - <key>ToolbarConfiguration</key> - <string>xcode.toolbar.config.run</string> - <key>WindowString</key> - <string>316 696 459 200 0 0 1280 1002 </string> - <key>WindowToolGUID</key> - <string>1C0AD2B3069F1EA900FABCE6</string> - <key>WindowToolIsVisible</key> - <integer>0</integer> - </dict> - <dict> - <key>FirstTimeWindowDisplayed</key> - <false/> - <key>Identifier</key> - <string>windowTool.scm</string> - <key>IsVertical</key> - <true/> - <key>Layout</key> - <array> - <dict> - <key>Dock</key> - <array> - <dict> - <key>ContentConfiguration</key> - <dict> - <key>PBXProjectModuleGUID</key> - <string>1C78EAB2065D492600B07095</string> - <key>PBXProjectModuleLabel</key> - <string></string> - <key>StatusBarVisibility</key> - <true/> - </dict> - <key>GeometryConfiguration</key> - <dict> - <key>Frame</key> - <string>{{0, 0}, {452, 0}}</string> - <key>RubberWindowFrame</key> - <string>227 547 452 308 0 0 1440 878 </string> - </dict> - <key>Module</key> - <string>PBXNavigatorGroup</string> - <key>Proportion</key> - <string>0pt</string> - </dict> - <dict> - <key>BecomeActive</key> - <true/> - <key>ContentConfiguration</key> - <dict> - <key>PBXProjectModuleGUID</key> - <string>1CD052920623707200166675</string> - <key>PBXProjectModuleLabel</key> - <string>SCM Results</string> - </dict> - <key>GeometryConfiguration</key> - <dict> - <key>Frame</key> - <string>{{0, 5}, {452, 262}}</string> - <key>RubberWindowFrame</key> - <string>227 547 452 308 0 0 1440 878 </string> - </dict> - <key>Module</key> - <string>PBXCVSModule</string> - <key>Proportion</key> - <string>262pt</string> - </dict> - </array> - <key>Proportion</key> - <string>267pt</string> - </dict> - </array> - <key>Name</key> - <string>SCM</string> - <key>ServiceClasses</key> - <array> - <string>PBXCVSModule</string> - </array> - <key>StatusbarIsVisible</key> - <true/> - <key>TableOfContents</key> - <array> - <string>333230D30B802DD900C403F5</string> - <string>333230D40B802DD900C403F5</string> - <string>1C78EAB2065D492600B07095</string> - <string>1CD052920623707200166675</string> - </array> - <key>ToolbarConfiguration</key> - <string>xcode.toolbar.config.scm</string> - <key>WindowString</key> - <string>227 547 452 308 0 0 1440 878 </string> - <key>WindowToolGUID</key> - <string>333230D30B802DD900C403F5</string> - <key>WindowToolIsVisible</key> - <false/> - </dict> - <dict> - <key>FirstTimeWindowDisplayed</key> - <false/> - <key>Identifier</key> - <string>windowTool.breakpoints</string> - <key>IsVertical</key> - <false/> - <key>Layout</key> - <array> - <dict> - <key>Dock</key> - <array> - <dict> - <key>ContentConfiguration</key> - <dict> - <key>PBXBottomSmartGroupGIDs</key> - <array> - <string>1C77FABC04509CD000000102</string> - </array> - <key>PBXProjectModuleGUID</key> - <string>1CE0B1FE06471DED0097A5F4</string> - <key>PBXProjectModuleLabel</key> - <string>Files</string> - <key>PBXProjectStructureProvided</key> - <string>no</string> - <key>PBXSmartGroupTreeModuleColumnData</key> - <dict> - <key>PBXSmartGroupTreeModuleColumnWidthsKey</key> - <array> - <real>168</real> - </array> - <key>PBXSmartGroupTreeModuleColumnsKey_v4</key> - <array> - <string>MainColumn</string> - </array> - </dict> - <key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key> - <dict> - <key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key> - <array> - <string>1C77FABC04509CD000000102</string> - </array> - <key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key> - <array> - <array> - <integer>0</integer> - </array> - </array> - <key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key> - <string>{{0, 0}, {168, 350}}</string> - </dict> - <key>PBXTopSmartGroupGIDs</key> - <array/> - <key>XCIncludePerspectivesSwitch</key> - <false/> - </dict> - <key>GeometryConfiguration</key> - <dict> - <key>Frame</key> - <string>{{0, 0}, {185, 368}}</string> - <key>GroupTreeTableConfiguration</key> - <array> - <string>MainColumn</string> - <real>168</real> - </array> - <key>RubberWindowFrame</key> - <string>127 427 744 409 0 0 1440 878 </string> - </dict> - <key>Module</key> - <string>PBXSmartGroupTreeModule</string> - <key>Proportion</key> - <string>185pt</string> - </dict> - <dict> - <key>BecomeActive</key> - <true/> - <key>ContentConfiguration</key> - <dict> - <key>PBXProjectModuleGUID</key> - <string>1CA1AED706398EBD00589147</string> - <key>PBXProjectModuleLabel</key> - <string>Detail</string> - </dict> - <key>GeometryConfiguration</key> - <dict> - <key>Frame</key> - <string>{{190, 0}, {554, 368}}</string> - <key>RubberWindowFrame</key> - <string>127 427 744 409 0 0 1440 878 </string> - </dict> - <key>Module</key> - <string>XCDetailModule</string> - <key>Proportion</key> - <string>554pt</string> - </dict> - </array> - <key>Proportion</key> - <string>368pt</string> - </dict> - </array> - <key>MajorVersion</key> - <integer>2</integer> - <key>MinorVersion</key> - <integer>0</integer> - <key>Name</key> - <string>Breakpoints</string> - <key>ServiceClasses</key> - <array> - <string>PBXSmartGroupTreeModule</string> - <string>XCDetailModule</string> - </array> - <key>StatusbarIsVisible</key> - <true/> - <key>TableOfContents</key> - <array> - <string>333230F90B802FDD00C403F5</string> - <string>333230FA0B802FDD00C403F5</string> - <string>1CE0B1FE06471DED0097A5F4</string> - <string>1CA1AED706398EBD00589147</string> - </array> - <key>ToolbarConfiguration</key> - <string>xcode.toolbar.config.breakpoints</string> - <key>WindowString</key> - <string>127 427 744 409 0 0 1440 878 </string> - <key>WindowToolGUID</key> - <string>333230F90B802FDD00C403F5</string> - <key>WindowToolIsVisible</key> - <false/> - </dict> - <dict> - <key>Identifier</key> - <string>windowTool.debugAnimator</string> - <key>Layout</key> - <array> - <dict> - <key>Dock</key> - <array> - <dict> - <key>Module</key> - <string>PBXNavigatorGroup</string> - <key>Proportion</key> - <string>100%</string> - </dict> - </array> - <key>Proportion</key> - <string>100%</string> - </dict> - </array> - <key>Name</key> - <string>Debug Visualizer</string> - <key>ServiceClasses</key> - <array> - <string>PBXNavigatorGroup</string> - </array> - <key>StatusbarIsVisible</key> - <integer>1</integer> - <key>ToolbarConfiguration</key> - <string>xcode.toolbar.config.debugAnimator</string> - <key>WindowString</key> - <string>100 100 700 500 0 0 1280 1002 </string> - </dict> - <dict> - <key>Identifier</key> - <string>windowTool.bookmarks</string> - <key>Layout</key> - <array> - <dict> - <key>Dock</key> - <array> - <dict> - <key>Module</key> - <string>PBXBookmarksModule</string> - <key>Proportion</key> - <string>100%</string> - </dict> - </array> - <key>Proportion</key> - <string>100%</string> - </dict> - </array> - <key>Name</key> - <string>Bookmarks</string> - <key>ServiceClasses</key> - <array> - <string>PBXBookmarksModule</string> - </array> - <key>StatusbarIsVisible</key> - <integer>0</integer> - <key>WindowString</key> - <string>538 42 401 187 0 0 1280 1002 </string> - </dict> - <dict> - <key>FirstTimeWindowDisplayed</key> - <false/> - <key>Identifier</key> - <string>windowTool.classBrowser</string> - <key>IsVertical</key> - <true/> - <key>Layout</key> - <array> - <dict> - <key>Dock</key> - <array> - <dict> - <key>ContentConfiguration</key> - <dict> - <key>OptionsSetName</key> - <string>Hierarchy, project classes</string> - <key>PBXProjectModuleGUID</key> - <string>1CA6456E063B45B4001379D8</string> - <key>PBXProjectModuleLabel</key> - <string>Class Browser - value_t</string> - </dict> - <key>GeometryConfiguration</key> - <dict> - <key>ClassesFrame</key> - <string>{{0, 0}, {378, 96}}</string> - <key>ClassesTreeTableConfiguration</key> - <array> - <string>PBXClassNameColumnIdentifier</string> - <real>208</real> - <string>PBXClassBookColumnIdentifier</string> - <real>22</real> - </array> - <key>Frame</key> - <string>{{0, 0}, {630, 332}}</string> - <key>MembersFrame</key> - <string>{{0, 101}, {378, 231}}</string> - <key>MembersTreeTableConfiguration</key> - <array> - <string>PBXMemberTypeIconColumnIdentifier</string> - <real>22</real> - <string>PBXMemberNameColumnIdentifier</string> - <real>216</real> - <string>PBXMemberTypeColumnIdentifier</string> - <real>101</real> - <string>PBXMemberBookColumnIdentifier</string> - <real>22</real> - </array> - <key>RubberWindowFrame</key> - <string>227 503 630 352 0 0 1440 878 </string> - </dict> - <key>Module</key> - <string>PBXClassBrowserModule</string> - <key>Proportion</key> - <string>332pt</string> - </dict> - </array> - <key>Proportion</key> - <string>332pt</string> - </dict> - </array> - <key>Name</key> - <string>Class Browser</string> - <key>ServiceClasses</key> - <array> - <string>PBXClassBrowserModule</string> - </array> - <key>StatusbarIsVisible</key> - <false/> - <key>TableOfContents</key> - <array> - <string>1C0AD2AF069F1E9B00FABCE6</string> - <string>333230E20B802E8300C403F5</string> - <string>1CA6456E063B45B4001379D8</string> - </array> - <key>ToolbarConfiguration</key> - <string>xcode.toolbar.config.classbrowser</string> - <key>WindowString</key> - <string>227 503 630 352 0 0 1440 878 </string> - <key>WindowToolGUID</key> - <string>1C0AD2AF069F1E9B00FABCE6</string> - <key>WindowToolIsVisible</key> - <false/> - </dict> - </array> -</dict> -</plist> diff --git a/contrib/ledger.xcodeproj/johnw.pbxuser b/contrib/ledger.xcodeproj/johnw.pbxuser deleted file mode 100644 index d3c3754b..00000000 --- a/contrib/ledger.xcodeproj/johnw.pbxuser +++ /dev/null @@ -1,861 +0,0 @@ -// !$*UTF8*$! -{ - 08FB7793FE84155DC02AAC07 /* Project object */ = { - activeBuildConfigurationName = Debug; - activeExecutable = 33AD82D60B80262200CF4200 /* ledger */; - activeTarget = 8DD76F620486A84900D96B5E /* ledger */; - addToTargets = ( - 8DD76F620486A84900D96B5E /* ledger */, - ); - breakpoints = ( - 333230A20B802D3E00C403F5 /* xpath.h:768 */, - ); - breakpointsGroup = 333231030B802FF000C403F5 /* XCBreakpointsBucket */; - codeSenseManager = 33AD82DB0B80264000CF4200 /* Code sense */; - executables = ( - 33AD82D60B80262200CF4200 /* ledger */, - ); - perUserDictionary = { - "PBXConfiguration.PBXBreakpointsDataSource.v1:1CA1AED706398EBD00589147" = { - PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; - PBXFileTableDataSourceColumnSortingKey = PBXBreakpointsDataSource_BreakpointID; - PBXFileTableDataSourceColumnWidthsKey = ( - 20, - 20, - 210, - 20, - 110, - 109, - 20, - ); - PBXFileTableDataSourceColumnsKey = ( - PBXBreakpointsDataSource_ActionID, - PBXBreakpointsDataSource_TypeID, - PBXBreakpointsDataSource_BreakpointID, - PBXBreakpointsDataSource_UseID, - PBXBreakpointsDataSource_LocationID, - PBXBreakpointsDataSource_ConditionID, - PBXBreakpointsDataSource_ContinueID, - ); - }; - PBXConfiguration.PBXFileTableDataSource3.PBXExecutablesDataSource = { - PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; - PBXFileTableDataSourceColumnSortingKey = PBXExecutablesDataSource_NameID; - PBXFileTableDataSourceColumnWidthsKey = ( - 22, - 300, - 481.5835, - ); - PBXFileTableDataSourceColumnsKey = ( - PBXExecutablesDataSource_ActiveFlagID, - PBXExecutablesDataSource_NameID, - PBXExecutablesDataSource_CommentsID, - ); - }; - PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { - PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; - PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; - PBXFileTableDataSourceColumnWidthsKey = ( - 20, - 594, - 20, - 48, - 43, - 43, - 20, - ); - PBXFileTableDataSourceColumnsKey = ( - PBXFileDataSource_FiletypeID, - PBXFileDataSource_Filename_ColumnID, - PBXFileDataSource_Built_ColumnID, - PBXFileDataSource_ObjectSize_ColumnID, - PBXFileDataSource_Errors_ColumnID, - PBXFileDataSource_Warnings_ColumnID, - PBXFileDataSource_Target_ColumnID, - ); - }; - PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = { - PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; - PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; - PBXFileTableDataSourceColumnWidthsKey = ( - 20, - 200, - 63, - 20, - 48, - 43, - 43, - ); - PBXFileTableDataSourceColumnsKey = ( - PBXFileDataSource_FiletypeID, - PBXFileDataSource_Filename_ColumnID, - PBXTargetDataSource_PrimaryAttribute, - PBXFileDataSource_Built_ColumnID, - PBXFileDataSource_ObjectSize_ColumnID, - PBXFileDataSource_Errors_ColumnID, - PBXFileDataSource_Warnings_ColumnID, - ); - }; - PBXPerProjectTemplateStateSaveDate = 198484953; - PBXWorkspaceStateSaveDate = 198484953; - }; - perUserProjectItems = { - 333230340B802B2C00C403F5 /* PBXTextBookmark */ = 333230340B802B2C00C403F5 /* PBXTextBookmark */; - 333230360B802B2C00C403F5 /* PBXTextBookmark */ = 333230360B802B2C00C403F5 /* PBXTextBookmark */; - 333230700B802C1B00C403F5 /* PBXTextBookmark */ = 333230700B802C1B00C403F5 /* PBXTextBookmark */; - 333230740B802C2700C403F5 /* PBXTextBookmark */ = 333230740B802C2700C403F5 /* PBXTextBookmark */; - 333230760B802C3300C403F5 /* PBXTextBookmark */ = 333230760B802C3300C403F5 /* PBXTextBookmark */; - 333230780B802C3300C403F5 /* PBXTextBookmark */ = 333230780B802C3300C403F5 /* PBXTextBookmark */; - 3332307B0B802C4100C403F5 /* PBXTextBookmark */ = 3332307B0B802C4100C403F5 /* PBXTextBookmark */; - 3332307D0B802C4100C403F5 /* PBXTextBookmark */ = 3332307D0B802C4100C403F5 /* PBXTextBookmark */; - 3332307E0B802C4100C403F5 /* PBXTextBookmark */ = 3332307E0B802C4100C403F5 /* PBXTextBookmark */; - 333230820B802C4D00C403F5 /* PBXTextBookmark */ = 333230820B802C4D00C403F5 /* PBXTextBookmark */; - 333230860B802C6100C403F5 /* PBXTextBookmark */ = 333230860B802C6100C403F5 /* PBXTextBookmark */; - 3332308B0B802C7100C403F5 /* PBXTextBookmark */ = 3332308B0B802C7100C403F5 /* PBXTextBookmark */; - 3332308C0B802C7100C403F5 /* PBXTextBookmark */ = 3332308C0B802C7100C403F5 /* PBXTextBookmark */; - 3332308E0B802C7A00C403F5 /* PBXTextBookmark */ = 3332308E0B802C7A00C403F5 /* PBXTextBookmark */; - 333230900B802C7A00C403F5 /* PBXTextBookmark */ = 333230900B802C7A00C403F5 /* PBXTextBookmark */; - 333230940B802C8B00C403F5 /* PBXTextBookmark */ = 333230940B802C8B00C403F5 /* PBXTextBookmark */; - 333230960B802C9A00C403F5 /* PBXTextBookmark */ = 333230960B802C9A00C403F5 /* PBXTextBookmark */; - 333230990B802C9A00C403F5 /* PBXTextBookmark */ = 333230990B802C9A00C403F5 /* PBXTextBookmark */; - 3332309A0B802C9A00C403F5 /* PBXTextBookmark */ = 3332309A0B802C9A00C403F5 /* PBXTextBookmark */; - 333230A30B802D4000C403F5 /* PBXTextBookmark */ = 333230A30B802D4000C403F5 /* PBXTextBookmark */; - 333230A40B802D4000C403F5 /* PBXTextBookmark */ = 333230A40B802D4000C403F5 /* PBXTextBookmark */; - 333230A70B802D4000C403F5 /* PBXTextBookmark */ = 333230A70B802D4000C403F5 /* PBXTextBookmark */; - 333230A80B802D4000C403F5 /* PBXTextBookmark */ = 333230A80B802D4000C403F5 /* PBXTextBookmark */; - 333230A90B802D4000C403F5 /* PBXTextBookmark */ = 333230A90B802D4000C403F5 /* PBXTextBookmark */; - 333230AA0B802D4000C403F5 /* PBXTextBookmark */ = 333230AA0B802D4000C403F5 /* PBXTextBookmark */; - 333230AB0B802D4000C403F5 /* PBXTextBookmark */ = 333230AB0B802D4000C403F5 /* PBXTextBookmark */; - 333230AC0B802D4000C403F5 /* PBXTextBookmark */ = 333230AC0B802D4000C403F5 /* PBXTextBookmark */; - 333230AD0B802D4000C403F5 /* PBXTextBookmark */ = 333230AD0B802D4000C403F5 /* PBXTextBookmark */; - 333230AF0B802D4000C403F5 /* PBXTextBookmark */ = 333230AF0B802D4000C403F5 /* PBXTextBookmark */; - 333230B20B802D4000C403F5 /* PBXTextBookmark */ = 333230B20B802D4000C403F5 /* PBXTextBookmark */; - 333230B40B802D4000C403F5 /* PBXTextBookmark */ = 333230B40B802D4000C403F5 /* PBXTextBookmark */; - 333230BA0B802D4000C403F5 /* PBXTextBookmark */ = 333230BA0B802D4000C403F5 /* PBXTextBookmark */; - 333230BE0B802D4000C403F5 /* PBXTextBookmark */ = 333230BE0B802D4000C403F5 /* PBXTextBookmark */; - 333230C00B802D4000C403F5 /* PBXTextBookmark */ = 333230C00B802D4000C403F5 /* PBXTextBookmark */; - 333230C20B802D4000C403F5 /* PBXTextBookmark */ = 333230C20B802D4000C403F5 /* PBXTextBookmark */; - 333231000B802FF000C403F5 /* PBXTextBookmark */ = 333231000B802FF000C403F5 /* PBXTextBookmark */; - 3357D0B80BD4A651004B3223 /* PBXTextBookmark */ = 3357D0B80BD4A651004B3223 /* PBXTextBookmark */; - 3357D0B90BD4A651004B3223 /* PBXTextBookmark */ = 3357D0B90BD4A651004B3223 /* PBXTextBookmark */; - 3357D0BA0BD4A651004B3223 /* PBXTextBookmark */ = 3357D0BA0BD4A651004B3223 /* PBXTextBookmark */; - 3357D0BB0BD4A651004B3223 /* PBXTextBookmark */ = 3357D0BB0BD4A651004B3223 /* PBXTextBookmark */; - 33B8460B0BD0A5CC00472F4E /* PBXTextBookmark */ = 33B8460B0BD0A5CC00472F4E /* PBXTextBookmark */; - 33B8460D0BD0A5CC00472F4E /* PBXTextBookmark */ = 33B8460D0BD0A5CC00472F4E /* PBXTextBookmark */; - 33B846130BD0A63200472F4E /* PBXTextBookmark */ = 33B846130BD0A63200472F4E /* PBXTextBookmark */; - 33B846400BD0A6EB00472F4E /* PBXTextBookmark */ = 33B846400BD0A6EB00472F4E /* PBXTextBookmark */; - }; - sourceControlManager = 33AD82DA0B80264000CF4200 /* Source Control */; - userBuildSettings = { - }; - }; - 333230340B802B2C00C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD82F00B80269C00CF4200 /* format.cc */; - name = "format.cc: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 808; - vrLoc = 0; - }; - 333230360B802B2C00C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD82F00B80269C00CF4200 /* format.cc */; - name = "format.cc: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 808; - vrLoc = 0; - }; - 333230700B802C1B00C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3356EA090B8029FA00EC228D /* option.cc */; - name = "option.cc: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 794; - vrLoc = 0; - }; - 333230740B802C2700C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD83750B80280B00CF4200 /* acconf.h */; - name = "acconf.h: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 1172; - vrLoc = 0; - }; - 333230760B802C3300C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD83050B80269C00CF4200 /* quotes.cc */; - name = "quotes.cc: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 1072; - vrLoc = 0; - }; - 333230780B802C3300C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD83050B80269C00CF4200 /* quotes.cc */; - name = "quotes.cc: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 1072; - vrLoc = 0; - }; - 3332307B0B802C4100C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD82DD0B80269C00CF4200 /* amount.h */; - name = "TRACE_CTOR(\"amount_t()\");"; - rLen = 30; - rLoc = 920; - rType = 0; - vrLen = 645; - vrLoc = 0; - }; - 3332307D0B802C4100C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD82E40B80269C00CF4200 /* datetime.cc */; - name = "static std::time_t base = -1;"; - rLen = 39; - rLoc = 595; - rType = 0; - vrLen = 740; - vrLoc = 0; - }; - 3332307E0B802C4100C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD82DD0B80269C00CF4200 /* amount.h */; - name = "TRACE_CTOR(\"amount_t()\");"; - rLen = 30; - rLoc = 920; - rType = 0; - vrLen = 645; - vrLoc = 0; - }; - 333230820B802C4D00C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD82DC0B80269C00CF4200 /* amount.cc */; - name = "amount.cc: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 801; - vrLoc = 0; - }; - 333230860B802C6100C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD82F40B80269C00CF4200 /* journal.cc */; - name = "journal.cc: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 723; - vrLoc = 0; - }; - 3332308B0B802C7100C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD82E00B80269C00CF4200 /* binary.cc */; - name = "binary.cc: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 1013; - vrLoc = 0; - }; - 3332308C0B802C7100C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD83180B80269C00CF4200 /* xml.cc */; - name = "xml.cc: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 912; - vrLoc = 0; - }; - 3332308E0B802C7A00C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD831A0B80269C00CF4200 /* xmlparse.cc */; - name = "xmlparse.cc: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 946; - vrLoc = 0; - }; - 333230900B802C7A00C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD831A0B80269C00CF4200 /* xmlparse.cc */; - name = "xmlparse.cc: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 946; - vrLoc = 0; - }; - 333230940B802C8B00C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD83070B80269C00CF4200 /* reconcile.cc */; - name = "reconcile.cc: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 0; - vrLoc = 0; - }; - 333230960B802C9A00C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD83090B80269C00CF4200 /* report.cc */; - name = "report.cc: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 1023; - vrLoc = 0; - }; - 333230990B802C9A00C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD83090B80269C00CF4200 /* report.cc */; - name = "report.cc: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 1023; - vrLoc = 0; - }; - 3332309A0B802C9A00C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD82E20B80269C00CF4200 /* csv.cc */; - name = "csv.cc: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 0; - vrLoc = 0; - }; - 333230A20B802D3E00C403F5 /* xpath.h:768 */ = { - isa = PBXFileBreakpoint; - actions = ( - ); - breakpointStyle = 0; - continueAfterActions = 0; - delayBeforeContinue = 0; - fileReference = 33AD831D0B80269C00CF4200 /* xpath.h */; - functionName = "operator()"; - hitCount = 1; - lineNumber = 768; - location = main.ob; - modificationTime = 192950207.974497; - state = 1; - }; - 333230A30B802D4000C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD82EF0B80269C00CF4200 /* fdstream.hpp */; - name = "fdstream.hpp: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 1154; - vrLoc = 0; - }; - 333230A40B802D4000C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD82F60B80269C00CF4200 /* ledger.h */; - name = "ledger.h: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 775; - vrLoc = 0; - }; - 333230A70B802D4000C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD82F40B80269C00CF4200 /* journal.cc */; - name = "journal.cc: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 723; - vrLoc = 0; - }; - 333230A80B802D4000C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD82E10B80269C00CF4200 /* binary.h */; - name = "binary.h: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 839; - vrLoc = 0; - }; - 333230A90B802D4000C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD82E00B80269C00CF4200 /* binary.cc */; - name = "binary.cc: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 1013; - vrLoc = 0; - }; - 333230AA0B802D4000C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD83180B80269C00CF4200 /* xml.cc */; - name = "xml.cc: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 912; - vrLoc = 0; - }; - 333230AB0B802D4000C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD83070B80269C00CF4200 /* reconcile.cc */; - name = "reconcile.cc: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 0; - vrLoc = 0; - }; - 333230AC0B802D4000C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD82E80B80269C00CF4200 /* derive.cc */; - name = "derive.cc: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 934; - vrLoc = 0; - }; - 333230AD0B802D4000C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD82E20B80269C00CF4200 /* csv.cc */; - name = "csv.cc: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 0; - vrLoc = 0; - }; - 333230AF0B802D4000C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3356EA090B8029FA00EC228D /* option.cc */; - name = "option.cc: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 794; - vrLoc = 0; - }; - 333230B20B802D4000C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD82EF0B80269C00CF4200 /* fdstream.hpp */; - name = "fdstream.hpp: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 1154; - vrLoc = 0; - }; - 333230B40B802D4000C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD82F60B80269C00CF4200 /* ledger.h */; - name = "ledger.h: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 775; - vrLoc = 0; - }; - 333230BA0B802D4000C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD82E10B80269C00CF4200 /* binary.h */; - name = "binary.h: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 839; - vrLoc = 0; - }; - 333230BE0B802D4000C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD82E80B80269C00CF4200 /* derive.cc */; - name = "derive.cc: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 934; - vrLoc = 0; - }; - 333230C00B802D4000C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3356EA000B80299700EC228D /* main.cc */; - name = "main.cc: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 696; - vrLoc = 0; - }; - 333230C20B802D4000C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD83190B80269C00CF4200 /* xml.h */; - name = "}"; - rLen = 4; - rLoc = 1896; - rType = 0; - vrLen = 1033; - vrLoc = 1373; - }; - 333231000B802FF000C403F5 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 3356EA000B80299700EC228D /* main.cc */; - name = "ledger::tracing_active = true;"; - rLen = 35; - rLoc = 10634; - rType = 0; - vrLen = 718; - vrLoc = 10521; - }; - 333231030B802FF000C403F5 /* XCBreakpointsBucket */ = { - isa = XCBreakpointsBucket; - name = "Project Breakpoints"; - objects = ( - 333230A20B802D3E00C403F5 /* xpath.h:768 */, - ); - }; - 3356EA000B80299700EC228D /* main.cc */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {825, 8910}}"; - sepNavSelRange = "{10634, 0}"; - sepNavVisRect = "{{0, 7305}, {825, 384}}"; - }; - }; - 3356EA090B8029FA00EC228D /* option.cc */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {767, 5202}}"; - sepNavSelRange = "{2917, 0}"; - sepNavVisRect = "{{0, 2231}, {689, 236}}"; - }; - }; - 3357D0B80BD4A651004B3223 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD82E40B80269C00CF4200 /* datetime.cc */; - name = "static std::time_t base = -1;"; - rLen = 32; - rLoc = 550; - rType = 0; - vrLen = 473; - vrLoc = 240; - }; - 3357D0B90BD4A651004B3223 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - comments = "warning: control reaches end of non-void function"; - fRef = 33AD82DC0B80269C00CF4200 /* amount.cc */; - rLen = 1; - rLoc = 1226; - rType = 1; - }; - 3357D0BA0BD4A651004B3223 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD82E40B80269C00CF4200 /* datetime.cc */; - name = "static std::time_t base = -1;"; - rLen = 32; - rLoc = 550; - rType = 0; - vrLen = 473; - vrLoc = 240; - }; - 3357D0BB0BD4A651004B3223 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD82DC0B80269C00CF4200 /* amount.cc */; - name = "amount.cc: 2046"; - rLen = 0; - rLoc = 51254; - rType = 0; - vrLen = 580; - vrLoc = 29938; - }; - 33AD82D60B80262200CF4200 /* ledger */ = { - isa = PBXExecutable; - activeArgIndex = 0; - activeArgIndices = ( - YES, - YES, - YES, - ); - argumentStrings = ( - "-f", - /home/johnw/doc/Finances/ledger.dat, - xml, - ); - autoAttachOnCrash = 1; - configStateDict = { - }; - customDataFormattersEnabled = 1; - debuggerPlugin = GDBDebugging; - disassemblyDisplayState = 0; - dylibVariantSuffix = ""; - enableDebugStr = 1; - environmentEntries = ( - ); - executableSystemSymbolLevel = 0; - executableUserSymbolLevel = 0; - libgmallocEnabled = 0; - name = ledger; - savedGlobals = { - }; - sourceDirectories = ( - ); - variableFormatDictionary = { - }; - }; - 33AD82DA0B80264000CF4200 /* Source Control */ = { - isa = PBXSourceControlManager; - fallbackIsa = XCSourceControlManager; - isSCMEnabled = 0; - scmConfiguration = { - SubversionToolPath = /usr/local/bin/svn; - }; - scmType = ""; - }; - 33AD82DB0B80264000CF4200 /* Code sense */ = { - isa = PBXCodeSenseManager; - indexTemplatePath = ""; - }; - 33AD82DC0B80269C00CF4200 /* amount.cc */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {794, 36828}}"; - sepNavSelRange = "{51254, 0}"; - sepNavVisRect = "{{0, 21942}, {689, 236}}"; - }; - }; - 33AD82DD0B80269C00CF4200 /* amount.h */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {792, 11178}}"; - sepNavSelRange = "{920, 30}"; - sepNavVisRect = "{{0, 0}, {792, 745}}"; - }; - }; - 33AD82DF0B80269C00CF4200 /* balance.h */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {686, 17244}}"; - sepNavSelRange = "{206, 16}"; - sepNavVisRect = "{{0, 0}, {337, 199}}"; - }; - }; - 33AD82E00B80269C00CF4200 /* binary.cc */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {792, 18378}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRect = "{{0, 0}, {792, 745}}"; - }; - }; - 33AD82E10B80269C00CF4200 /* binary.h */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {792, 4662}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRect = "{{0, 0}, {792, 745}}"; - }; - }; - 33AD82E20B80269C00CF4200 /* csv.cc */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {792, 745}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRect = "{{0, 0}, {792, 745}}"; - }; - }; - 33AD82E40B80269C00CF4200 /* datetime.cc */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {792, 10368}}"; - sepNavSelRange = "{550, 32}"; - sepNavVisRect = "{{0, 219}, {792, 512}}"; - }; - }; - 33AD82E80B80269C00CF4200 /* derive.cc */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {792, 3294}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRect = "{{0, 0}, {792, 745}}"; - }; - }; - 33AD82EF0B80269C00CF4200 /* fdstream.hpp */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {792, 3330}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRect = "{{0, 0}, {792, 745}}"; - }; - }; - 33AD82F00B80269C00CF4200 /* format.cc */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {792, 4770}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRect = "{{0, 0}, {792, 745}}"; - }; - }; - 33AD82F20B80269C00CF4200 /* gnucash.cc */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {749, 6912}}"; - sepNavSelRange = "{11616, 0}"; - sepNavVisRect = "{{0, 6522}, {459, 186}}"; - }; - }; - 33AD82F40B80269C00CF4200 /* journal.cc */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {776, 18828}}"; - sepNavSelRange = "{14713, 0}"; - sepNavVisRect = "{{41, 10857}, {459, 186}}"; - }; - }; - 33AD82F60B80269C00CF4200 /* ledger.h */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {792, 846}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRect = "{{0, 0}, {792, 745}}"; - }; - }; - 33AD83050B80269C00CF4200 /* quotes.cc */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {792, 1566}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRect = "{{0, 0}, {792, 745}}"; - }; - }; - 33AD83070B80269C00CF4200 /* reconcile.cc */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {792, 745}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRect = "{{0, 0}, {792, 745}}"; - }; - }; - 33AD83090B80269C00CF4200 /* report.cc */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {792, 3852}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRect = "{{0, 0}, {792, 745}}"; - }; - }; - 33AD830D0B80269C00CF4200 /* textual.cc */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {830, 16146}}"; - sepNavSelRange = "{13898, 0}"; - sepNavVisRect = "{{0, 10086}, {459, 186}}"; - }; - }; - 33AD83160B80269C00CF4200 /* value.cc */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {776, 47790}}"; - sepNavSelRange = "{51277, 0}"; - sepNavVisRect = "{{0, 33738}, {459, 186}}"; - }; - }; - 33AD83170B80269C00CF4200 /* value.h */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {722, 10170}}"; - sepNavSelRange = "{702, 14}"; - sepNavVisRect = "{{0, 360}, {337, 199}}"; - }; - }; - 33AD83180B80269C00CF4200 /* xml.cc */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {812, 8442}}"; - sepNavSelRange = "{7071, 0}"; - sepNavVisRect = "{{0, 5687}, {689, 236}}"; - }; - }; - 33AD83190B80269C00CF4200 /* xml.h */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {792, 6048}}"; - sepNavSelRange = "{1896, 4}"; - sepNavVisRect = "{{0, 1463}, {792, 512}}"; - }; - }; - 33AD831A0B80269C00CF4200 /* xmlparse.cc */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {740, 8514}}"; - sepNavSelRange = "{5476, 0}"; - sepNavVisRect = "{{0, 3545}, {689, 236}}"; - }; - }; - 33AD831C0B80269C00CF4200 /* xpath.cc */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {749, 45954}}"; - sepNavSelRange = "{46916, 0}"; - sepNavVisRect = "{{0, 35124}, {459, 186}}"; - }; - }; - 33AD831D0B80269C00CF4200 /* xpath.h */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {785, 13968}}"; - sepNavSelRange = "{7507, 0}"; - sepNavVisRect = "{{0, 5550}, {459, 186}}"; - }; - }; - 33AD83750B80280B00CF4200 /* acconf.h */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {792, 1674}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRect = "{{0, 0}, {792, 512}}"; - }; - }; - 33B8460B0BD0A5CC00472F4E /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD831D0B80269C00CF4200 /* xpath.h */; - name = "xpath.h: 774"; - rLen = 0; - rLoc = 18463; - rType = 0; - vrLen = 613; - vrLoc = 17535; - }; - 33B8460D0BD0A5CC00472F4E /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD831D0B80269C00CF4200 /* xpath.h */; - name = "xpath.h: 774"; - rLen = 0; - rLoc = 18463; - rType = 0; - vrLen = 613; - vrLoc = 17535; - }; - 33B846130BD0A63200472F4E /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD83750B80280B00CF4200 /* acconf.h */; - name = "acconf.h: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 840; - vrLoc = 0; - }; - 33B846400BD0A6EB00472F4E /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 33AD83190B80269C00CF4200 /* xml.h */; - name = "}"; - rLen = 4; - rLoc = 1896; - rType = 0; - vrLen = 613; - vrLoc = 1552; - }; - 8DD76F620486A84900D96B5E /* ledger */ = { - activeExec = 0; - executables = ( - 33AD82D60B80262200CF4200 /* ledger */, - ); - }; - C6859E8B029090EE04C91782 /* ledger.1 */ = { - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {821, 1422}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRect = "{{0, 0}, {792, 512}}"; - }; - }; -} diff --git a/contrib/ledger.xcodeproj/project.pbxproj b/contrib/ledger.xcodeproj/project.pbxproj deleted file mode 100644 index 1cdfe32b..00000000 --- a/contrib/ledger.xcodeproj/project.pbxproj +++ /dev/null @@ -1,584 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 42; - objects = { - -/* Begin PBXBuildFile section */ - 3356EA010B80299700EC228D /* main.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3356EA000B80299700EC228D /* main.cc */; }; - 3356EA0A0B8029FA00EC228D /* option.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3356EA090B8029FA00EC228D /* option.cc */; }; - 3357D09C0BD4A3FD004B3223 /* libgmp.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 3357D09B0BD4A3FD004B3223 /* libgmp.dylib */; }; - 3357D09E0BD4A40E004B3223 /* libexpat.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 3357D09D0BD4A40E004B3223 /* libexpat.dylib */; }; - 33AD831E0B80269C00CF4200 /* amount.cc in Sources */ = {isa = PBXBuildFile; fileRef = 33AD82DC0B80269C00CF4200 /* amount.cc */; }; - 33AD831F0B80269C00CF4200 /* amount.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AD82DD0B80269C00CF4200 /* amount.h */; }; - 33AD83200B80269C00CF4200 /* balance.cc in Sources */ = {isa = PBXBuildFile; fileRef = 33AD82DE0B80269C00CF4200 /* balance.cc */; }; - 33AD83210B80269C00CF4200 /* balance.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AD82DF0B80269C00CF4200 /* balance.h */; }; - 33AD83220B80269C00CF4200 /* binary.cc in Sources */ = {isa = PBXBuildFile; fileRef = 33AD82E00B80269C00CF4200 /* binary.cc */; }; - 33AD83230B80269C00CF4200 /* binary.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AD82E10B80269C00CF4200 /* binary.h */; }; - 33AD83240B80269C00CF4200 /* csv.cc in Sources */ = {isa = PBXBuildFile; fileRef = 33AD82E20B80269C00CF4200 /* csv.cc */; }; - 33AD83250B80269C00CF4200 /* csv.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AD82E30B80269C00CF4200 /* csv.h */; }; - 33AD83260B80269C00CF4200 /* datetime.cc in Sources */ = {isa = PBXBuildFile; fileRef = 33AD82E40B80269C00CF4200 /* datetime.cc */; }; - 33AD83270B80269C00CF4200 /* datetime.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AD82E50B80269C00CF4200 /* datetime.h */; }; - 33AD83280B80269C00CF4200 /* debug.cc in Sources */ = {isa = PBXBuildFile; fileRef = 33AD82E60B80269C00CF4200 /* debug.cc */; }; - 33AD83290B80269C00CF4200 /* debug.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AD82E70B80269C00CF4200 /* debug.h */; }; - 33AD832A0B80269C00CF4200 /* derive.cc in Sources */ = {isa = PBXBuildFile; fileRef = 33AD82E80B80269C00CF4200 /* derive.cc */; }; - 33AD832B0B80269C00CF4200 /* derive.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AD82E90B80269C00CF4200 /* derive.h */; }; - 33AD832E0B80269C00CF4200 /* emacs.cc in Sources */ = {isa = PBXBuildFile; fileRef = 33AD82EC0B80269C00CF4200 /* emacs.cc */; }; - 33AD832F0B80269C00CF4200 /* emacs.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AD82ED0B80269C00CF4200 /* emacs.h */; }; - 33AD83300B80269C00CF4200 /* error.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AD82EE0B80269C00CF4200 /* error.h */; }; - 33AD83310B80269C00CF4200 /* fdstream.hpp in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AD82EF0B80269C00CF4200 /* fdstream.hpp */; }; - 33AD83320B80269C00CF4200 /* format.cc in Sources */ = {isa = PBXBuildFile; fileRef = 33AD82F00B80269C00CF4200 /* format.cc */; }; - 33AD83330B80269C00CF4200 /* format.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AD82F10B80269C00CF4200 /* format.h */; }; - 33AD83340B80269C00CF4200 /* gnucash.cc in Sources */ = {isa = PBXBuildFile; fileRef = 33AD82F20B80269C00CF4200 /* gnucash.cc */; }; - 33AD83350B80269C00CF4200 /* gnucash.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AD82F30B80269C00CF4200 /* gnucash.h */; }; - 33AD83360B80269C00CF4200 /* journal.cc in Sources */ = {isa = PBXBuildFile; fileRef = 33AD82F40B80269C00CF4200 /* journal.cc */; }; - 33AD83370B80269C00CF4200 /* journal.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AD82F50B80269C00CF4200 /* journal.h */; }; - 33AD83380B80269C00CF4200 /* ledger.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AD82F60B80269C00CF4200 /* ledger.h */; }; - 33AD83390B80269C00CF4200 /* mask.cc in Sources */ = {isa = PBXBuildFile; fileRef = 33AD82F70B80269C00CF4200 /* mask.cc */; }; - 33AD833A0B80269C00CF4200 /* mask.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AD82F80B80269C00CF4200 /* mask.h */; }; - 33AD833D0B80269C00CF4200 /* option.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AD82FB0B80269C00CF4200 /* option.h */; }; - 33AD833E0B80269C00CF4200 /* parser.cc in Sources */ = {isa = PBXBuildFile; fileRef = 33AD82FC0B80269C00CF4200 /* parser.cc */; }; - 33AD833F0B80269C00CF4200 /* parser.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AD82FD0B80269C00CF4200 /* parser.h */; }; - 33AD83450B80269C00CF4200 /* qif.cc in Sources */ = {isa = PBXBuildFile; fileRef = 33AD83030B80269C00CF4200 /* qif.cc */; }; - 33AD83460B80269C00CF4200 /* qif.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AD83040B80269C00CF4200 /* qif.h */; }; - 33AD83470B80269C00CF4200 /* quotes.cc in Sources */ = {isa = PBXBuildFile; fileRef = 33AD83050B80269C00CF4200 /* quotes.cc */; }; - 33AD83480B80269C00CF4200 /* quotes.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AD83060B80269C00CF4200 /* quotes.h */; }; - 33AD83490B80269C00CF4200 /* reconcile.cc in Sources */ = {isa = PBXBuildFile; fileRef = 33AD83070B80269C00CF4200 /* reconcile.cc */; }; - 33AD834A0B80269C00CF4200 /* reconcile.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AD83080B80269C00CF4200 /* reconcile.h */; }; - 33AD834B0B80269C00CF4200 /* report.cc in Sources */ = {isa = PBXBuildFile; fileRef = 33AD83090B80269C00CF4200 /* report.cc */; }; - 33AD834C0B80269C00CF4200 /* report.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AD830A0B80269C00CF4200 /* report.h */; }; - 33AD834D0B80269C00CF4200 /* session.cc in Sources */ = {isa = PBXBuildFile; fileRef = 33AD830B0B80269C00CF4200 /* session.cc */; }; - 33AD834E0B80269C00CF4200 /* session.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AD830C0B80269C00CF4200 /* session.h */; }; - 33AD834F0B80269C00CF4200 /* textual.cc in Sources */ = {isa = PBXBuildFile; fileRef = 33AD830D0B80269C00CF4200 /* textual.cc */; }; - 33AD83500B80269C00CF4200 /* textual.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AD830E0B80269C00CF4200 /* textual.h */; }; - 33AD83510B80269C00CF4200 /* timing.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AD830F0B80269C00CF4200 /* timing.h */; }; - 33AD83520B80269C00CF4200 /* trace.cc in Sources */ = {isa = PBXBuildFile; fileRef = 33AD83100B80269C00CF4200 /* trace.cc */; }; - 33AD83530B80269C00CF4200 /* trace.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AD83110B80269C00CF4200 /* trace.h */; }; - 33AD83540B80269C00CF4200 /* transform.cc in Sources */ = {isa = PBXBuildFile; fileRef = 33AD83120B80269C00CF4200 /* transform.cc */; }; - 33AD83550B80269C00CF4200 /* transform.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AD83130B80269C00CF4200 /* transform.h */; }; - 33AD83560B80269C00CF4200 /* util.cc in Sources */ = {isa = PBXBuildFile; fileRef = 33AD83140B80269C00CF4200 /* util.cc */; }; - 33AD83570B80269C00CF4200 /* util.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AD83150B80269C00CF4200 /* util.h */; }; - 33AD83580B80269C00CF4200 /* value.cc in Sources */ = {isa = PBXBuildFile; fileRef = 33AD83160B80269C00CF4200 /* value.cc */; }; - 33AD83590B80269C00CF4200 /* value.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AD83170B80269C00CF4200 /* value.h */; }; - 33AD835A0B80269C00CF4200 /* xml.cc in Sources */ = {isa = PBXBuildFile; fileRef = 33AD83180B80269C00CF4200 /* xml.cc */; }; - 33AD835B0B80269C00CF4200 /* xml.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AD83190B80269C00CF4200 /* xml.h */; }; - 33AD835C0B80269C00CF4200 /* xmlparse.cc in Sources */ = {isa = PBXBuildFile; fileRef = 33AD831A0B80269C00CF4200 /* xmlparse.cc */; }; - 33AD835D0B80269C00CF4200 /* xmlparse.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AD831B0B80269C00CF4200 /* xmlparse.h */; }; - 33AD835E0B80269C00CF4200 /* xpath.cc in Sources */ = {isa = PBXBuildFile; fileRef = 33AD831C0B80269C00CF4200 /* xpath.cc */; }; - 33AD835F0B80269C00CF4200 /* xpath.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AD831D0B80269C00CF4200 /* xpath.h */; }; - 33AD83760B80280B00CF4200 /* acconf.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 33AD83750B80280B00CF4200 /* acconf.h */; }; - 33B846080BD0A5B200472F4E /* libpcre.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 33B846060BD0A5B200472F4E /* libpcre.dylib */; }; - 8DD76F6A0486A84900D96B5E /* ledger.1 in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6859E8B029090EE04C91782 /* ledger.1 */; }; -/* End PBXBuildFile section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 8DD76F690486A84900D96B5E /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 8; - dstPath = /usr/share/man/man1/; - dstSubfolderSpec = 0; - files = ( - 8DD76F6A0486A84900D96B5E /* ledger.1 in CopyFiles */, - 33AD831F0B80269C00CF4200 /* amount.h in CopyFiles */, - 33AD83210B80269C00CF4200 /* balance.h in CopyFiles */, - 33AD83230B80269C00CF4200 /* binary.h in CopyFiles */, - 33AD83250B80269C00CF4200 /* csv.h in CopyFiles */, - 33AD83270B80269C00CF4200 /* datetime.h in CopyFiles */, - 33AD83290B80269C00CF4200 /* debug.h in CopyFiles */, - 33AD832B0B80269C00CF4200 /* derive.h in CopyFiles */, - 33AD832F0B80269C00CF4200 /* emacs.h in CopyFiles */, - 33AD83300B80269C00CF4200 /* error.h in CopyFiles */, - 33AD83310B80269C00CF4200 /* fdstream.hpp in CopyFiles */, - 33AD83330B80269C00CF4200 /* format.h in CopyFiles */, - 33AD83350B80269C00CF4200 /* gnucash.h in CopyFiles */, - 33AD83370B80269C00CF4200 /* journal.h in CopyFiles */, - 33AD83380B80269C00CF4200 /* ledger.h in CopyFiles */, - 33AD833A0B80269C00CF4200 /* mask.h in CopyFiles */, - 33AD833D0B80269C00CF4200 /* option.h in CopyFiles */, - 33AD833F0B80269C00CF4200 /* parser.h in CopyFiles */, - 33AD83460B80269C00CF4200 /* qif.h in CopyFiles */, - 33AD83480B80269C00CF4200 /* quotes.h in CopyFiles */, - 33AD834A0B80269C00CF4200 /* reconcile.h in CopyFiles */, - 33AD834C0B80269C00CF4200 /* report.h in CopyFiles */, - 33AD834E0B80269C00CF4200 /* session.h in CopyFiles */, - 33AD83500B80269C00CF4200 /* textual.h in CopyFiles */, - 33AD83510B80269C00CF4200 /* timing.h in CopyFiles */, - 33AD83530B80269C00CF4200 /* trace.h in CopyFiles */, - 33AD83550B80269C00CF4200 /* transform.h in CopyFiles */, - 33AD83570B80269C00CF4200 /* util.h in CopyFiles */, - 33AD83590B80269C00CF4200 /* value.h in CopyFiles */, - 33AD835B0B80269C00CF4200 /* xml.h in CopyFiles */, - 33AD835D0B80269C00CF4200 /* xmlparse.h in CopyFiles */, - 33AD835F0B80269C00CF4200 /* xpath.h in CopyFiles */, - 33AD83760B80280B00CF4200 /* acconf.h in CopyFiles */, - ); - runOnlyForDeploymentPostprocessing = 1; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 3356EA000B80299700EC228D /* main.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = main.cc; sourceTree = "<group>"; }; - 3356EA090B8029FA00EC228D /* option.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = option.cc; sourceTree = "<group>"; }; - 3357D09B0BD4A3FD004B3223 /* libgmp.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libgmp.dylib; path = /sw/lib/libgmp.dylib; sourceTree = "<absolute>"; }; - 3357D09D0BD4A40E004B3223 /* libexpat.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libexpat.dylib; path = /usr/local/lib/libexpat.dylib; sourceTree = "<absolute>"; }; - 33AD82DC0B80269C00CF4200 /* amount.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = amount.cc; sourceTree = "<group>"; }; - 33AD82DD0B80269C00CF4200 /* amount.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = amount.h; sourceTree = "<group>"; }; - 33AD82DE0B80269C00CF4200 /* balance.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = balance.cc; sourceTree = "<group>"; }; - 33AD82DF0B80269C00CF4200 /* balance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = balance.h; sourceTree = "<group>"; }; - 33AD82E00B80269C00CF4200 /* binary.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = binary.cc; sourceTree = "<group>"; }; - 33AD82E10B80269C00CF4200 /* binary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = binary.h; sourceTree = "<group>"; }; - 33AD82E20B80269C00CF4200 /* csv.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = csv.cc; sourceTree = "<group>"; }; - 33AD82E30B80269C00CF4200 /* csv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = csv.h; sourceTree = "<group>"; }; - 33AD82E40B80269C00CF4200 /* datetime.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = datetime.cc; sourceTree = "<group>"; }; - 33AD82E50B80269C00CF4200 /* datetime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = datetime.h; sourceTree = "<group>"; }; - 33AD82E60B80269C00CF4200 /* debug.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = debug.cc; sourceTree = "<group>"; }; - 33AD82E70B80269C00CF4200 /* debug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = debug.h; sourceTree = "<group>"; }; - 33AD82E80B80269C00CF4200 /* derive.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = derive.cc; sourceTree = "<group>"; }; - 33AD82E90B80269C00CF4200 /* derive.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = derive.h; sourceTree = "<group>"; }; - 33AD82EC0B80269C00CF4200 /* emacs.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = emacs.cc; sourceTree = "<group>"; }; - 33AD82ED0B80269C00CF4200 /* emacs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = emacs.h; sourceTree = "<group>"; }; - 33AD82EE0B80269C00CF4200 /* error.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = error.h; sourceTree = "<group>"; }; - 33AD82EF0B80269C00CF4200 /* fdstream.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = fdstream.hpp; sourceTree = "<group>"; }; - 33AD82F00B80269C00CF4200 /* format.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = format.cc; sourceTree = "<group>"; }; - 33AD82F10B80269C00CF4200 /* format.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = format.h; sourceTree = "<group>"; }; - 33AD82F20B80269C00CF4200 /* gnucash.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gnucash.cc; sourceTree = "<group>"; }; - 33AD82F30B80269C00CF4200 /* gnucash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gnucash.h; sourceTree = "<group>"; }; - 33AD82F40B80269C00CF4200 /* journal.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = journal.cc; sourceTree = "<group>"; }; - 33AD82F50B80269C00CF4200 /* journal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = journal.h; sourceTree = "<group>"; }; - 33AD82F60B80269C00CF4200 /* ledger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ledger.h; sourceTree = "<group>"; }; - 33AD82F70B80269C00CF4200 /* mask.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mask.cc; sourceTree = "<group>"; }; - 33AD82F80B80269C00CF4200 /* mask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mask.h; sourceTree = "<group>"; }; - 33AD82FB0B80269C00CF4200 /* option.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = option.h; sourceTree = "<group>"; }; - 33AD82FC0B80269C00CF4200 /* parser.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = parser.cc; sourceTree = "<group>"; }; - 33AD82FD0B80269C00CF4200 /* parser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = parser.h; sourceTree = "<group>"; }; - 33AD83030B80269C00CF4200 /* qif.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = qif.cc; sourceTree = "<group>"; }; - 33AD83040B80269C00CF4200 /* qif.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = qif.h; sourceTree = "<group>"; }; - 33AD83050B80269C00CF4200 /* quotes.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = quotes.cc; sourceTree = "<group>"; }; - 33AD83060B80269C00CF4200 /* quotes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = quotes.h; sourceTree = "<group>"; }; - 33AD83070B80269C00CF4200 /* reconcile.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reconcile.cc; sourceTree = "<group>"; }; - 33AD83080B80269C00CF4200 /* reconcile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reconcile.h; sourceTree = "<group>"; }; - 33AD83090B80269C00CF4200 /* report.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = report.cc; sourceTree = "<group>"; }; - 33AD830A0B80269C00CF4200 /* report.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = report.h; sourceTree = "<group>"; }; - 33AD830B0B80269C00CF4200 /* session.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = session.cc; sourceTree = "<group>"; }; - 33AD830C0B80269C00CF4200 /* session.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = session.h; sourceTree = "<group>"; }; - 33AD830D0B80269C00CF4200 /* textual.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = textual.cc; sourceTree = "<group>"; }; - 33AD830E0B80269C00CF4200 /* textual.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = textual.h; sourceTree = "<group>"; }; - 33AD830F0B80269C00CF4200 /* timing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = timing.h; sourceTree = "<group>"; }; - 33AD83100B80269C00CF4200 /* trace.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = trace.cc; sourceTree = "<group>"; }; - 33AD83110B80269C00CF4200 /* trace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = trace.h; sourceTree = "<group>"; }; - 33AD83120B80269C00CF4200 /* transform.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = transform.cc; sourceTree = "<group>"; }; - 33AD83130B80269C00CF4200 /* transform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = transform.h; sourceTree = "<group>"; }; - 33AD83140B80269C00CF4200 /* util.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = util.cc; sourceTree = "<group>"; }; - 33AD83150B80269C00CF4200 /* util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = util.h; sourceTree = "<group>"; }; - 33AD83160B80269C00CF4200 /* value.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = value.cc; sourceTree = "<group>"; }; - 33AD83170B80269C00CF4200 /* value.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = value.h; sourceTree = "<group>"; }; - 33AD83180B80269C00CF4200 /* xml.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xml.cc; sourceTree = "<group>"; }; - 33AD83190B80269C00CF4200 /* xml.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xml.h; sourceTree = "<group>"; }; - 33AD831A0B80269C00CF4200 /* xmlparse.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xmlparse.cc; sourceTree = "<group>"; }; - 33AD831B0B80269C00CF4200 /* xmlparse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xmlparse.h; sourceTree = "<group>"; }; - 33AD831C0B80269C00CF4200 /* xpath.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xpath.cc; sourceTree = "<group>"; }; - 33AD831D0B80269C00CF4200 /* xpath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xpath.h; sourceTree = "<group>"; }; - 33AD83750B80280B00CF4200 /* acconf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = acconf.h; sourceTree = "<group>"; }; - 33B846060BD0A5B200472F4E /* libpcre.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libpcre.dylib; path = /usr/local/lib/libpcre.dylib; sourceTree = "<absolute>"; }; - 8DD76F6C0486A84900D96B5E /* ledger */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "compiled.mach-o.executable"; path = ledger; sourceTree = BUILT_PRODUCTS_DIR; }; - C6859E8B029090EE04C91782 /* ledger.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = ledger.1; sourceTree = "<group>"; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 8DD76F660486A84900D96B5E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 33B846080BD0A5B200472F4E /* libpcre.dylib in Frameworks */, - 3357D09C0BD4A3FD004B3223 /* libgmp.dylib in Frameworks */, - 3357D09E0BD4A40E004B3223 /* libexpat.dylib in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 08FB7794FE84155DC02AAC07 /* ledger */ = { - isa = PBXGroup; - children = ( - 08FB7795FE84155DC02AAC07 /* Source */, - C6859E8C029090F304C91782 /* Documentation */, - 33B8460F0BD0A60100472F4E /* Dependencies */, - 1AB674ADFE9D54B511CA2CBB /* Products */, - ); - name = ledger; - sourceTree = "<group>"; - }; - 08FB7795FE84155DC02AAC07 /* Source */ = { - isa = PBXGroup; - children = ( - 333230420B802B3A00C403F5 /* Utility code */, - 333230470B802B4700C403F5 /* Core numerics */, - 3332304B0B802B5500C403F5 /* Journal representation */, - 3332304F0B802B6500C403F5 /* XML meta-representation */, - 333230530B802B7400C403F5 /* Transformations */, - 333230570B802B8200C403F5 /* Reporting */, - 333230590B802B8E00C403F5 /* Command-line driver */, - 3332305B0B802B9E00C403F5 /* Python scripting */, - ); - name = Source; - sourceTree = "<group>"; - }; - 1AB674ADFE9D54B511CA2CBB /* Products */ = { - isa = PBXGroup; - children = ( - 8DD76F6C0486A84900D96B5E /* ledger */, - ); - name = Products; - sourceTree = "<group>"; - }; - 333230420B802B3A00C403F5 /* Utility code */ = { - isa = PBXGroup; - children = ( - 33AD82F60B80269C00CF4200 /* ledger.h */, - 33AD83140B80269C00CF4200 /* util.cc */, - 33AD83150B80269C00CF4200 /* util.h */, - 33AD83750B80280B00CF4200 /* acconf.h */, - 33AD82E60B80269C00CF4200 /* debug.cc */, - 33AD82E70B80269C00CF4200 /* debug.h */, - 33AD82EE0B80269C00CF4200 /* error.h */, - 33AD830F0B80269C00CF4200 /* timing.h */, - 33AD83100B80269C00CF4200 /* trace.cc */, - 33AD83110B80269C00CF4200 /* trace.h */, - ); - name = "Utility code"; - sourceTree = "<group>"; - }; - 333230470B802B4700C403F5 /* Core numerics */ = { - isa = PBXGroup; - children = ( - 3332306A0B802BC800C403F5 /* Common data types */, - 333230670B802BC800C403F5 /* Amounts and values */, - ); - name = "Core numerics"; - sourceTree = "<group>"; - }; - 3332304B0B802B5500C403F5 /* Journal representation */ = { - isa = PBXGroup; - children = ( - 33AD82F40B80269C00CF4200 /* journal.cc */, - 33AD82F50B80269C00CF4200 /* journal.h */, - 33AD82FC0B80269C00CF4200 /* parser.cc */, - 33AD82FD0B80269C00CF4200 /* parser.h */, - 333230630B802BB200C403F5 /* Input formats */, - ); - name = "Journal representation"; - sourceTree = "<group>"; - }; - 3332304F0B802B6500C403F5 /* XML meta-representation */ = { - isa = PBXGroup; - children = ( - 33AD83180B80269C00CF4200 /* xml.cc */, - 33AD83190B80269C00CF4200 /* xml.h */, - 33AD831C0B80269C00CF4200 /* xpath.cc */, - 33AD831D0B80269C00CF4200 /* xpath.h */, - ); - name = "XML meta-representation"; - sourceTree = "<group>"; - }; - 333230530B802B7400C403F5 /* Transformations */ = { - isa = PBXGroup; - children = ( - 33AD83070B80269C00CF4200 /* reconcile.cc */, - 33AD83080B80269C00CF4200 /* reconcile.h */, - 33AD83120B80269C00CF4200 /* transform.cc */, - 33AD83130B80269C00CF4200 /* transform.h */, - ); - name = Transformations; - sourceTree = "<group>"; - }; - 333230570B802B8200C403F5 /* Reporting */ = { - isa = PBXGroup; - children = ( - 33AD82E80B80269C00CF4200 /* derive.cc */, - 33AD82E90B80269C00CF4200 /* derive.h */, - 33AD82F00B80269C00CF4200 /* format.cc */, - 33AD82F10B80269C00CF4200 /* format.h */, - 33AD83090B80269C00CF4200 /* report.cc */, - 33AD830A0B80269C00CF4200 /* report.h */, - 3332305F0B802BAA00C403F5 /* Output formats */, - ); - name = Reporting; - sourceTree = "<group>"; - }; - 333230590B802B8E00C403F5 /* Command-line driver */ = { - isa = PBXGroup; - children = ( - 3356EA000B80299700EC228D /* main.cc */, - 3356EA090B8029FA00EC228D /* option.cc */, - 33AD82FB0B80269C00CF4200 /* option.h */, - 33AD830B0B80269C00CF4200 /* session.cc */, - 33AD830C0B80269C00CF4200 /* session.h */, - 33AD82EF0B80269C00CF4200 /* fdstream.hpp */, - ); - name = "Command-line driver"; - sourceTree = "<group>"; - }; - 3332305B0B802B9E00C403F5 /* Python scripting */ = { - isa = PBXGroup; - children = ( - ); - name = "Python scripting"; - sourceTree = "<group>"; - }; - 3332305F0B802BAA00C403F5 /* Output formats */ = { - isa = PBXGroup; - children = ( - 33AD82E20B80269C00CF4200 /* csv.cc */, - 33AD82E30B80269C00CF4200 /* csv.h */, - 33AD82EC0B80269C00CF4200 /* emacs.cc */, - 33AD82ED0B80269C00CF4200 /* emacs.h */, - ); - name = "Output formats"; - sourceTree = "<group>"; - }; - 333230630B802BB200C403F5 /* Input formats */ = { - isa = PBXGroup; - children = ( - 33AD82E00B80269C00CF4200 /* binary.cc */, - 33AD82E10B80269C00CF4200 /* binary.h */, - 33AD82F20B80269C00CF4200 /* gnucash.cc */, - 33AD82F30B80269C00CF4200 /* gnucash.h */, - 33AD83030B80269C00CF4200 /* qif.cc */, - 33AD83040B80269C00CF4200 /* qif.h */, - 33AD830D0B80269C00CF4200 /* textual.cc */, - 33AD830E0B80269C00CF4200 /* textual.h */, - 33AD831A0B80269C00CF4200 /* xmlparse.cc */, - 33AD831B0B80269C00CF4200 /* xmlparse.h */, - ); - name = "Input formats"; - sourceTree = "<group>"; - }; - 333230670B802BC800C403F5 /* Amounts and values */ = { - isa = PBXGroup; - children = ( - 33AD82DC0B80269C00CF4200 /* amount.cc */, - 33AD82DD0B80269C00CF4200 /* amount.h */, - 33AD82DE0B80269C00CF4200 /* balance.cc */, - 33AD82DF0B80269C00CF4200 /* balance.h */, - 33AD83160B80269C00CF4200 /* value.cc */, - 33AD83170B80269C00CF4200 /* value.h */, - 33AD83050B80269C00CF4200 /* quotes.cc */, - 33AD83060B80269C00CF4200 /* quotes.h */, - ); - name = "Amounts and values"; - sourceTree = "<group>"; - }; - 3332306A0B802BC800C403F5 /* Common data types */ = { - isa = PBXGroup; - children = ( - 33AD82E40B80269C00CF4200 /* datetime.cc */, - 33AD82E50B80269C00CF4200 /* datetime.h */, - 33AD82F70B80269C00CF4200 /* mask.cc */, - 33AD82F80B80269C00CF4200 /* mask.h */, - ); - name = "Common data types"; - sourceTree = "<group>"; - }; - 33B8460F0BD0A60100472F4E /* Dependencies */ = { - isa = PBXGroup; - children = ( - 3357D09D0BD4A40E004B3223 /* libexpat.dylib */, - 3357D09B0BD4A3FD004B3223 /* libgmp.dylib */, - 33B846060BD0A5B200472F4E /* libpcre.dylib */, - ); - name = Dependencies; - sourceTree = "<group>"; - }; - C6859E8C029090F304C91782 /* Documentation */ = { - isa = PBXGroup; - children = ( - C6859E8B029090EE04C91782 /* ledger.1 */, - ); - name = Documentation; - sourceTree = "<group>"; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 8DD76F620486A84900D96B5E /* ledger */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "ledger" */; - buildPhases = ( - 8DD76F640486A84900D96B5E /* Sources */, - 8DD76F660486A84900D96B5E /* Frameworks */, - 8DD76F690486A84900D96B5E /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = ledger; - productInstallPath = "$(HOME)/bin"; - productName = ledger; - productReference = 8DD76F6C0486A84900D96B5E /* ledger */; - productType = "com.apple.product-type.tool"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 08FB7793FE84155DC02AAC07 /* Project object */ = { - isa = PBXProject; - buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "ledger" */; - hasScannedForEncodings = 1; - mainGroup = 08FB7794FE84155DC02AAC07 /* ledger */; - projectDirPath = ""; - targets = ( - 8DD76F620486A84900D96B5E /* ledger */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXSourcesBuildPhase section */ - 8DD76F640486A84900D96B5E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 33AD831E0B80269C00CF4200 /* amount.cc in Sources */, - 33AD83200B80269C00CF4200 /* balance.cc in Sources */, - 33AD83220B80269C00CF4200 /* binary.cc in Sources */, - 33AD83240B80269C00CF4200 /* csv.cc in Sources */, - 33AD83260B80269C00CF4200 /* datetime.cc in Sources */, - 33AD83280B80269C00CF4200 /* debug.cc in Sources */, - 33AD832A0B80269C00CF4200 /* derive.cc in Sources */, - 33AD832E0B80269C00CF4200 /* emacs.cc in Sources */, - 33AD83320B80269C00CF4200 /* format.cc in Sources */, - 33AD83340B80269C00CF4200 /* gnucash.cc in Sources */, - 33AD83360B80269C00CF4200 /* journal.cc in Sources */, - 33AD83390B80269C00CF4200 /* mask.cc in Sources */, - 33AD833E0B80269C00CF4200 /* parser.cc in Sources */, - 33AD83450B80269C00CF4200 /* qif.cc in Sources */, - 33AD83470B80269C00CF4200 /* quotes.cc in Sources */, - 33AD83490B80269C00CF4200 /* reconcile.cc in Sources */, - 33AD834B0B80269C00CF4200 /* report.cc in Sources */, - 33AD834D0B80269C00CF4200 /* session.cc in Sources */, - 33AD834F0B80269C00CF4200 /* textual.cc in Sources */, - 33AD83520B80269C00CF4200 /* trace.cc in Sources */, - 33AD83540B80269C00CF4200 /* transform.cc in Sources */, - 33AD83560B80269C00CF4200 /* util.cc in Sources */, - 33AD83580B80269C00CF4200 /* value.cc in Sources */, - 33AD835A0B80269C00CF4200 /* xml.cc in Sources */, - 33AD835C0B80269C00CF4200 /* xmlparse.cc in Sources */, - 33AD835E0B80269C00CF4200 /* xpath.cc in Sources */, - 3356EA010B80299700EC228D /* main.cc in Sources */, - 3356EA0A0B8029FA00EC228D /* option.cc in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 1DEB923208733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 3.0; - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_MODEL_TUNING = ""; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG_LEVEL=4", - "HAVE_EXPAT=1", - ); - HEADER_SEARCH_PATHS = /usr/local/include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - /usr/local/lib, - /sw/lib, - ); - PRODUCT_NAME = ledger; - ZERO_LINK = YES; - }; - name = Debug; - }; - 1DEB923308733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = ( - ppc, - i386, - ); - CURRENT_PROJECT_VERSION = 3.0; - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_MODEL_TUNING = ""; - HEADER_SEARCH_PATHS = /usr/local/include; - INSTALL_PATH = "$(HOME)/bin"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - /usr/local/lib, - /sw/lib, - ); - PRODUCT_NAME = ledger; - }; - name = Release; - }; - 1DEB923608733DC60010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = ( - /usr/local/include, - /sw/include, - ); - LIBRARY_SEARCH_PATHS = ( - /usr/local/lib, - /sw/lib, - ); - PREBINDING = NO; - SDKROOT = ""; - }; - name = Debug; - }; - 1DEB923708733DC60010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = ( - /usr/local/include, - /sw/include, - ); - LIBRARY_SEARCH_PATHS = ( - /usr/local/lib, - /sw/lib, - ); - PREBINDING = NO; - SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "ledger" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1DEB923208733DC60010E9CD /* Debug */, - 1DEB923308733DC60010E9CD /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "ledger" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1DEB923608733DC60010E9CD /* Debug */, - 1DEB923708733DC60010E9CD /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 08FB7793FE84155DC02AAC07 /* Project object */; -} diff --git a/contrib/repl.sh b/contrib/repl.sh new file mode 100755 index 00000000..42fb54c6 --- /dev/null +++ b/contrib/repl.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +EXEC=$(which ledger) +if [[ -z "$EXEC" ]]; then + EXEC=$HOME/Products/ledger/ledger +fi + +if [[ ! -x "$EXEC" ]]; then + echo Cannot find Ledger executable + exit 1 +fi + +LESS=--quit-if-one-screen exec $EXEC --pager less "$@" diff --git a/contrib/report b/contrib/report new file mode 100755 index 00000000..24418cdc --- /dev/null +++ b/contrib/report @@ -0,0 +1,21 @@ +#!/bin/sh + +# This script facilities plotting of a ledger register report. If you +# use OS/X, and have AquaTerm installed, you will probably want to set +# LEDGER_TERM to "aqua". +# +# Examples of use: +# +# report -j -M reg food # plot monthly food costs +# report -J reg checking # plot checking account balance + +if [ -z "$LEDGER_TERM" ]; then + LEDGER_TERM="x11 persist" +fi + +(cat <<EOF; ledger "$@") | gnuplot + set terminal $LEDGER_TERM + set xdata time + set timefmt "%Y/%m/%d" + plot "-" using 1:2 with lines +EOF diff --git a/contrib/tc b/contrib/tc new file mode 100755 index 00000000..c24be99a --- /dev/null +++ b/contrib/tc @@ -0,0 +1,7 @@ +#!/bin/sh + +timeclock out + +proj="$1" +shift +timeclock in "$proj" "$@" diff --git a/contrib/ti b/contrib/ti new file mode 100755 index 00000000..a7214e65 --- /dev/null +++ b/contrib/ti @@ -0,0 +1,5 @@ +#!/bin/sh + +proj="$1" +shift +timeclock in "$proj" "$@" diff --git a/contrib/to b/contrib/to new file mode 100755 index 00000000..3198db3c --- /dev/null +++ b/contrib/to @@ -0,0 +1,3 @@ +#!/bin/sh + +timeclock out "$@" diff --git a/contrib/trend b/contrib/trend new file mode 100755 index 00000000..3c189c0b --- /dev/null +++ b/contrib/trend @@ -0,0 +1,30 @@ +#!/bin/sh + +# This script requires Python support. +# +# To use, just run "trend" with the accounts to compute the trend for: +# +# trend dining +# +# The trend values are not terribly meaningful, but this gives an +# example of how Python can be used to create more complex reports. + +ledger --import-stdin -T "@rdev()" reg "$@" <<EOF +import ledger + +mean = ledger.parse_value_expr ("AT") +last_mean = None +last_dev = None + +def rdev (details): + global last_mean, last_dev + mval = mean.compute (details) + if last_mean is None: + dev = ledger.Value () + else: + dev = mval - last_mean + dev = (last_dev + dev) / 2 + last_mean = mval + last_dev = dev + return dev +EOF diff --git a/contrib/vim/README b/contrib/vim/README new file mode 100644 index 00000000..4da73ea6 --- /dev/null +++ b/contrib/vim/README @@ -0,0 +1,100 @@ + +This is the ledger filetype for vim. +Copy each file to the corresponding directory in your ~/.vim directory. +Then include the following line in your .vimrc or in ~/.vim/filetype.vim + au BufNewFile,BufRead *.ldg,*.ledger setf ledger +You can also use a modeline like this in every ledger file + vim:filetype=ledger + +Configuration +====================================================================== +Include the following let-statements somewhere in your .vimrc +to modify the behaviour of the ledger filetype. + +* Number of colums that will be used to display the foldtext. + Set this when you think that the amount is too far off to the right. + let g:ledger_maxwidth = 80 + +* String that will be used to fill the space between account name + and amount in the foldtext. Set this to get some kind of lines + or visual aid. + let g:ledger_fillstring = ' -' + My special tip is to use so-called digraphs: + Press <C-K> followed by the two-characters key sequence below. + (in insert-mode) + '. = ˙ or ': = ¨ --> ˙˙˙˙˙˙ or ¨¨¨¨¨¨ + ', = ¸ --> ¸¸¸¸¸¸ + .M = · --> ······ + >> = » --> »»»»»» + All those look rather unobstrusive + and provide a good visual aid to find the correct amount. + +* If you want the account completion to be sorted by level of detail/depth + instead of alphabetical, include the following line: + let g:ledger_detailed_first = 1 + +Completion +====================================================================== +Omni completion is implemented for account names and tags. + +Accounts +---------------------------------------------------------------------- +Account names are matched by the start of every sub-level. +When you insert an account name like this: + Asse<C-X><C-O> +You will get a list of top-level accounts that start like this. + +Go ahead and try something like: + As:Ban:Che<C-X><C-O> +When you have an account like this, 'Assets:Bank:Checking' should show up. + +When you want to complete on a virtual transaction, +it's currently best to keep the cursor in front of the closing bracket. +Of course you can insert the closing bracket after calling the completion, too. + +Tags +---------------------------------------------------------------------- +The support for completing tags is pretty basic right now +but it's useful to keep the spelling of your tags consistent. +You can call the completion after the ';' to get a list of all tags. +When you have a list of tags (:like: :this:) you can call +the completion too and everything up to the last ':' (excluding whitespace) +will be considered the beginning of the tag to search for. + +Revision history (major changes) +====================================================================== + 2009-06-23 & 2009-06-25 + J. Klähn: Omni-Completion for account names and tags + 2009-06-17 J. Klähn: Highlight account text + Updated documentation and added fillstring option. + 2009-06-15 J. Klähn: Split into multiple files + 2009-06-12 J. Klähn: Use all available columns for foldtext + Also rewrote foldtext generation. + 2009-03-25 J. Klähn: Allow Metadata + in transactions and postings (Ledger 3.0) + Also fixed alignment for multi-byte-characters + 2009-01-28 S.Karrmann: minor fixes + 2009-01-27 third version by S.Karrmann. + better extraction of the amount of the posting + decimal separator can be one of '.' and ','. + 2005-02-05 first version (partly copied from ledger.vim 0.0.1) + +License +====================================================================== +Copyright 2009 by Johann Klähn +Copyright 2009 by Stefan Karrmann +Copyright 2005 by Wolfgang Oertl + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. + diff --git a/contrib/vim/ftplugin/ledger.vim b/contrib/vim/ftplugin/ledger.vim new file mode 100644 index 00000000..d75a6869 --- /dev/null +++ b/contrib/vim/ftplugin/ledger.vim @@ -0,0 +1,302 @@ +" Vim filetype plugin file +" filetype: ledger +" Version: 0.1.0 +" by Johann Klähn; Use according to the terms of the GPL>=2. +" vim:ts=2:sw=2:sts=2:foldmethod=marker + +if exists("b:did_ftplugin") + finish +endif + +let b:did_ftplugin = 1 + +let b:undo_ftplugin = "setlocal ". + \ "foldmethod< foldtext< ". + \ "include< comments< omnifunc< " + +" don't fill fold lines --> cleaner look +setl fillchars="fold: " +setl foldtext=LedgerFoldText() +setl foldmethod=syntax +setl include=^!include +setl comments=b:; +setl omnifunc=LedgerComplete + +" You can set a maximal number of columns the fold text (excluding amount) +" will use by overriding g:ledger_maxwidth in your .vimrc. +" When maxwidth is zero, the amount will be displayed at the far right side +" of the screen. +if !exists('g:ledger_maxwidth') + let g:ledger_maxwidth = 0 +endif + +if !exists('g:ledger_fillstring') + let g:ledger_fillstring = ' ' +endif + +" If enabled this will list the most detailed matches at the top {{{ +" of the completion list. +" For example when you have some accounts like this: +" A:Ba:Bu +" A:Bu:Bu +" and you complete on A:B:B normal behaviour may be the following +" A:B:B +" A:Bu:Bu +" A:Bu +" A:Ba:Bu +" A:Ba +" A +" with this option turned on it will be +" A:B:B +" A:Bu:Bu +" A:Ba:Bu +" A:Bu +" A:Ba +" A +" }}} +if !exists('g:ledger_detailed_first') + let g:ledger_detailed_first = 0 +endif + +let s:rx_amount = '\('. + \ '\%([0-9]\+\)'. + \ '\%([,.][0-9]\+\)*'. + \ '\|'. + \ '[,.][0-9]\+'. + \ '\)'. + \ '\s*\%([[:alpha:]¢$€£]\+\s*\)\?'. + \ '\%(\s*;.*\)\?$' + +function! LedgerFoldText() "{{{1 + " find amount + let amount = "" + let lnum = v:foldstart + while lnum <= v:foldend + let line = getline(lnum) + + " Skip metadata/leading comment + if line !~ '^\%(\s\+;\|\d\)' + " No comment, look for amount... + let groups = matchlist(line, s:rx_amount) + if ! empty(groups) + let amount = groups[1] + break + endif + endif + let lnum += 1 + endwhile + + let fmt = '%s %s ' + " strip whitespace at beginning and end of line + let foldtext = substitute(getline(v:foldstart), + \ '\(^\s\+\|\s\+$\)', '', 'g') + + " number of columns foldtext can use + let columns = s:get_columns(0) + if g:ledger_maxwidth + let columns = min([columns, g:ledger_maxwidth]) + endif + let columns -= s:multibyte_strlen(printf(fmt, '', amount)) + + " add spaces so the text is always long enough when we strip it + " to a certain width (fake table) + if strlen(g:ledger_fillstring) + " add extra spaces so fillstring aligns + let filen = s:multibyte_strlen(g:ledger_fillstring) + let folen = s:multibyte_strlen(foldtext) + let foldtext .= repeat(' ', filen - (folen%filen)) + + let foldtext .= repeat(g:ledger_fillstring, + \ s:get_columns(0)/filen) + else + let foldtext .= repeat(' ', s:get_columns(0)) + endif + + " we don't use slices[:5], because that messes up multibyte characters + let foldtext = substitute(foldtext, '.\{'.columns.'}\zs.*$', '', '') + + return printf(fmt, foldtext, amount) +endfunction "}}} + +function! LedgerComplete(findstart, base) "{{{1 + if a:findstart + let lnum = line('.') + let line = getline('.') + let lastcol = col('.') - 2 + if line =~ '^\d' "{{{2 (date / payee / description) + let b:compl_context = 'payee' + return -1 + elseif line =~ '^\s\+;' "{{{2 (metadata / tags) + let b:compl_context = 'meta-tag' + let first_possible = matchend(line, '^\s\+;') + + " find first column of text to be replaced + let firstcol = lastcol + while firstcol >= 0 + if firstcol <= first_possible + " Stop before the ';' don't ever include it + let firstcol = first_possible + break + elseif line[firstcol] =~ ':' + " Stop before first ':' + let firstcol += 1 + break + endif + + let firstcol -= 1 + endwhile + + " strip whitespace starting from firstcol + let end_of_whitespace = matchend(line, '^\s\+', firstcol) + if end_of_whitespace != -1 + let firstcol = end_of_whitespace + endif + + return firstcol + elseif line =~ '^\s\+' "{{{2 (account) + let b:compl_context = 'account' + if matchend(line, '^\s\+\%(\S \S\|\S\)\+') <= lastcol + " only allow completion when in or at end of account name + return -1 + endif + " the start of the first non-blank character + " (excluding virtual-transaction-marks) + " is the beginning of the account name + return matchend(line, '^\s\+[\[(]\?') + else "}}} + return -1 + endif + else + if b:compl_context == 'account' "{{{2 (account) + unlet! b:compl_context + let hierarchy = split(a:base, ':') + if a:base =~ ':$' + call add(hierarchy, '') + endif + + let results = LedgerFindInTree(LedgerGetAccountHierarchy(), hierarchy) + " sort by alphabet and reverse because it will get reversed one more time + let results = reverse(sort(results)) + if g:ledger_detailed_first + let results = sort(results, 's:sort_accounts_by_depth') + endif + call add(results, a:base) + return reverse(results) + elseif b:compl_context == 'meta-tag' "{{{2 + unlet! b:compl_context + let results = [a:base] + call extend(results, sort(s:filter_items(keys(LedgerGetTags()), a:base))) + return results + else "}}} + unlet! b:compl_context + return [] + endif + endif +endf "}}} + +function! LedgerFindInTree(tree, levels) "{{{1 + if empty(a:levels) + return [] + endif + let results = [] + let currentlvl = a:levels[0] + let nextlvls = a:levels[1:] + let branches = s:filter_items(keys(a:tree), currentlvl) + for branch in branches + call add(results, branch) + if !empty(nextlvls) + for result in LedgerFindInTree(a:tree[branch], nextlvls) + call add(results, branch.':'.result) + endfor + endif + endfor + return results +endf "}}} + +function! LedgerGetAccountHierarchy() "{{{1 + let hierarchy = {} + let accounts = s:grep_buffer('^\s\+\zs[^[:blank:];]\%(\S \S\|\S\)\+\ze') + for name in accounts + " remove virtual-transaction-marks + let name = substitute(name, '\%(^\s*[\[(]\?\|[\])]\?\s*$\)', '', 'g') + let last = hierarchy + for part in split(name, ':') + let last[part] = get(last, part, {}) + let last = last[part] + endfor + endfor + return hierarchy +endf "}}} + +function! LedgerGetTags() "{{{1 + let alltags = {} + let metalines = s:grep_buffer('^\s\+;\s*\zs.*$') + for line in metalines + " (spaces at beginning are stripped by matchstr!) + if line[0] == ':' + " multiple tags + for val in split(line, ':') + if val !~ '^\s*$' + let name = s:strip_spaces(val) + let alltags[name] = get(alltags, name, []) + endif + endfor + elseif line =~ '^.*:.*$' + " line with tag=value + let name = s:strip_spaces(split(line, ':')[0]) + let val = s:strip_spaces(join(split(line, ':')[1:], ':')) + let values = get(alltags, name, []) + call add(values, val) + let alltags[name] = values + endif + endfor + return alltags +endf "}}} + +" Helper functions {{{1 + +" return length of string with fix for multibyte characters +function! s:multibyte_strlen(text) "{{{2 + return strlen(substitute(a:text, ".", "x", "g")) +endfunction "}}} + +" get # of visible/usable columns in current window +function! s:get_columns(win) "{{{2 + " As long as vim doesn't provide a command natively, + " we have to compute the available columns. + " see :help todo.txt -> /Add argument to winwidth()/ + " FIXME: Although this will propably never be used with debug mode enabled + " this should take the signs column into account (:help sign.txt) + let columns = (winwidth(a:win) == 0 ? 80 : winwidth(a:win)) - &foldcolumn + if &number + " line('w$') is the line number of the last line + let columns -= max([len(line('w$'))+1, &numberwidth]) + endif + return columns +endfunction "}}} + +" remove spaces at start and end of string +function! s:strip_spaces(text) "{{{2 + return matchstr(a:text, '^\s*\zs\S\%(.*\S\)\?\ze\s*$') +endf "}}} + +" return only those items that start with a specified keyword +function! s:filter_items(list, keyword) "{{{2 + return filter(a:list, 'v:val =~ ''^\V'.substitute(a:keyword, '\\', '\\\\', 'g').'''') +endf "}}} + +" return all lines matching an expression, returning only the matched part +function! s:grep_buffer(expression) "{{{2 + let lines = map(getline(1, '$'), 'matchstr(v:val, '''.a:expression.''')') + return filter(lines, 'v:val != ""') +endf "}}} + +function! s:sort_accounts_by_depth(name1, name2) "{{{2 + let depth1 = s:count_expression(a:name1, ':') + let depth2 = s:count_expression(a:name2, ':') + return depth1 == depth2 ? 0 : depth1 > depth2 ? 1 : -1 +endf "}}} + +function! s:count_expression(text, expression) "{{{2 + return len(split(a:text, a:expression, 1))-1 +endf "}}} diff --git a/contrib/vim/syntax/ledger.vim b/contrib/vim/syntax/ledger.vim new file mode 100644 index 00000000..8914cf2a --- /dev/null +++ b/contrib/vim/syntax/ledger.vim @@ -0,0 +1,49 @@ +" Vim syntax file +" filetype: ledger +" Version: 0.1.0 +" by Johann Klähn; Use according to the terms of the GPL>=2. +" by Stefan Karrmann; Use according to the terms of the GPL>=2. +" by Wolfgang Oertl; Use according to the terms of the GPL>=2. +" Revision history +" 2009-06-12 J. Klähn: Use all available columns for foldtext +" 2009-03-25 J. Klähn: Allow Metadata +" in transactions and postings (Ledger 3.0) +" Also fixed alignment for multi-byte-characters +" 2009-01-28 S.Karrmann: minor fixes +" 2009-01-27 third version by S.Karrmann. +" better extraction of the amount of the posting +" decimal separator can be one of '.' and ','. +" 2005-02-05 first version (partly copied from ledger.vim 0.0.1) +" vim:ts=2:sw=2:sts=2:foldmethod=marker + +if version < 600 + syntax clear +elseif exists("b:current_sytax") + finish +endif + +" for debugging +syntax clear + +" region: a transaction containing postings +syn region transNorm start=/^[[:digit:]~]/ skip=/^\s/ end=/^/ + \ fold keepend transparent contains=transDate, Metadata, Posting +syn match transDate /^\d\S\+/ contained +syn match Metadata /^\s\+;.*/ contained +syn match Comment /^;.*$/ +" every space in an account name shall be surrounded by two non-spaces +" every account name ends with a tab, two spaces or the end of the line +syn match Account /^\s\+\zs\%(\S \S\|\S\)\+\ze\%([ ]\{2,}\|\t\s*\|\s*$\)/ contained +syn match Posting /^\s\+[^[:blank:];].*$/ contained transparent contains=Account + + +highlight default link transDate Question +highlight default link Metadata PreProc +highlight default link Comment Comment +highlight default link Account Identifier + +" syncinc is easy: search for the first transaction. +syn sync clear +syn sync match ledgerSync grouphere transNorm "^\d" + +let b:current_syntax = "ledger" |