Merge commit 'dbfbf2bc893de3c44dcc08c33811bc274f647672'
This commit is contained in:
commit
20b915668f
15 changed files with 316 additions and 63 deletions
|
|
@ -5,7 +5,7 @@ PROJECT(ledger)
|
||||||
set(Ledger_VERSION_MAJOR 3)
|
set(Ledger_VERSION_MAJOR 3)
|
||||||
set(Ledger_VERSION_MINOR 0)
|
set(Ledger_VERSION_MINOR 0)
|
||||||
set(Ledger_VERSION_PATCH 2)
|
set(Ledger_VERSION_PATCH 2)
|
||||||
set(Ledger_VERSION_DATE 20140417)
|
set(Ledger_VERSION_DATE 20140507)
|
||||||
|
|
||||||
enable_testing()
|
enable_testing()
|
||||||
|
|
||||||
|
|
@ -20,7 +20,7 @@ option(DISABLE_ASSERTS "Build without any internal consistency checks" OFF)
|
||||||
option(BUILD_DEBUG "Build support for runtime debugging" OFF)
|
option(BUILD_DEBUG "Build support for runtime debugging" OFF)
|
||||||
|
|
||||||
option(BUILD_LIBRARY "Build and install Ledger as a library" ON)
|
option(BUILD_LIBRARY "Build and install Ledger as a library" ON)
|
||||||
option(BUILD_DOCS "Build and install documentation" ON)
|
option(BUILD_DOCS "Build and install documentation" OFF)
|
||||||
option(BUILD_WEB_DOCS "Build version of documentation suitable for viewing online" OFF)
|
option(BUILD_WEB_DOCS "Build version of documentation suitable for viewing online" OFF)
|
||||||
option(BUILD_EMACSLISP "Build and install ledger-mode for Emacs" OFF)
|
option(BUILD_EMACSLISP "Build and install ledger-mode for Emacs" OFF)
|
||||||
|
|
||||||
|
|
|
||||||
5
acprep
5
acprep
|
|
@ -875,6 +875,9 @@ class PrepareBuild(CommandLineApp):
|
||||||
if self.options.boost_include:
|
if self.options.boost_include:
|
||||||
conf_args.append('-DBOOST_INCLUDEDIR=%s' %
|
conf_args.append('-DBOOST_INCLUDEDIR=%s' %
|
||||||
self.options.boost_include)
|
self.options.boost_include)
|
||||||
|
if self.options.build_dir:
|
||||||
|
conf_args.append('-DBUILD_DIR=%s' %
|
||||||
|
self.options.build_dir)
|
||||||
|
|
||||||
if self.prefix_directory():
|
if self.prefix_directory():
|
||||||
conf_args.append('-DCMAKE_INSTALL_PREFIX=%s' % self.prefix_directory())
|
conf_args.append('-DCMAKE_INSTALL_PREFIX=%s' % self.prefix_directory())
|
||||||
|
|
@ -942,7 +945,7 @@ class PrepareBuild(CommandLineApp):
|
||||||
make_args.append('-j%d' % self.options.jobs)
|
make_args.append('-j%d' % self.options.jobs)
|
||||||
|
|
||||||
if self.options.verbose:
|
if self.options.verbose:
|
||||||
make_args.append('VERBOSE=1')
|
make_args.append('-v' if self.options.use_ninja else 'VERBOSE=1')
|
||||||
|
|
||||||
self.log.debug('Configure arguments => ' + str(config_args))
|
self.log.debug('Configure arguments => ' + str(config_args))
|
||||||
self.log.debug('Makefile arguments => ' + str(make_args))
|
self.log.debug('Makefile arguments => ' + str(make_args))
|
||||||
|
|
|
||||||
54
contrib/iso4127-commodities/iso4217ledger.sh
Executable file
54
contrib/iso4127-commodities/iso4217ledger.sh
Executable file
|
|
@ -0,0 +1,54 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# iso4217ledger.sh - Convert ISO 4217 currencies to ledger commodities
|
||||||
|
#
|
||||||
|
# This script will download the latest XML for ISO 4217 Table A.1
|
||||||
|
# and print the contained currency & funds code list as ledger
|
||||||
|
# commodity definitions to stdout.
|
||||||
|
|
||||||
|
# Copyright (c) 2014 Alexis Hildebrandt
|
||||||
|
#
|
||||||
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
# of this software and associated documentation files (the "Software"), to deal
|
||||||
|
# in the Software without restriction, including without limitation the rights
|
||||||
|
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
# copies of the Software, and to permit persons to whom the Software is
|
||||||
|
# furnished to do so, subject to the following conditions:
|
||||||
|
#
|
||||||
|
# The above copyright notice and this permission notice shall be included in
|
||||||
|
# all copies or substantial portions of the Software.
|
||||||
|
#
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
# SOFTWARE.
|
||||||
|
|
||||||
|
xml_url="http://www.currency-iso.org/dam/downloads/table_a1.xml"
|
||||||
|
xsl_file="$(dirname $0)/iso4217ledger.xsl"
|
||||||
|
|
||||||
|
xsltproc="$(which xsltproc)"
|
||||||
|
if [ ! -f "$xsltproc" -o ! -x "$xsltproc" ]; then
|
||||||
|
echo "Can't find xsltproc"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
download_command="$(which curl)"
|
||||||
|
if [ -f "$download_command" \
|
||||||
|
-a -x "$download_command" ]; then
|
||||||
|
download_options="--silent"
|
||||||
|
else
|
||||||
|
download_command="$(which wget)"
|
||||||
|
if [ -n "$download_command" \
|
||||||
|
-a -f "$download_command" \
|
||||||
|
-a -x "$download_command" ]; then
|
||||||
|
download_options="--quiet --output-document -"
|
||||||
|
else
|
||||||
|
echo "Can't find curl or wget."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
$download_command $download_options "$xml_url" | $xsltproc "$xsl_file" -
|
||||||
138
contrib/iso4127-commodities/iso4217ledger.xsl
Normal file
138
contrib/iso4127-commodities/iso4217ledger.xsl
Normal file
|
|
@ -0,0 +1,138 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
! iso4217ledger.xsl - Transform ISO 4217 Table A.1 to ledger commodities
|
||||||
|
!
|
||||||
|
! The current currency & funds code list is found at:
|
||||||
|
! http://www.currency-iso.org/en/home/tables/table-a1.html
|
||||||
|
! -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
! Copyright (c) 2014 Alexis Hildebrandt
|
||||||
|
!
|
||||||
|
! Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
! of this software and associated documentation files (the "Software"), to deal
|
||||||
|
! in the Software without restriction, including without limitation the rights
|
||||||
|
! to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
! copies of the Software, and to permit persons to whom the Software is
|
||||||
|
! furnished to do so, subject to the following conditions:
|
||||||
|
!
|
||||||
|
! The above copyright notice and this permission notice shall be included in
|
||||||
|
! all copies or substantial portions of the Software.
|
||||||
|
!
|
||||||
|
! THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
! IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
! FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
! AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
! LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
! OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
! SOFTWARE.
|
||||||
|
! -->
|
||||||
|
|
||||||
|
<xsl:stylesheet version="1.0"
|
||||||
|
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||||
|
>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
! Set the value of this variable to your preferred decimal separator.
|
||||||
|
! For European countries this is likely to be the comma ','.
|
||||||
|
! -->
|
||||||
|
<xsl:variable name="decimal_separator">
|
||||||
|
<xsl:text>,</xsl:text>
|
||||||
|
<!--
|
||||||
|
<xsl:text>.</xsl:text>
|
||||||
|
-->
|
||||||
|
</xsl:variable>
|
||||||
|
|
||||||
|
|
||||||
|
<!--
|
||||||
|
! Ensure that plain text will be written,
|
||||||
|
! and all whitespace from the XML source is stripped.
|
||||||
|
! -->
|
||||||
|
<xsl:output method="text"/>
|
||||||
|
<xsl:template match="text()" />
|
||||||
|
|
||||||
|
<!--
|
||||||
|
! Add comment that the file was generated.
|
||||||
|
! -->
|
||||||
|
<xsl:template match="/">
|
||||||
|
<xsl:text>; Ledger commodity declarations
|
||||||
|
; Generated from ISO 4217 Table A.1 XML (</xsl:text>
|
||||||
|
<xsl:value-of select="ISO_4217/@Pblshd"/>
|
||||||
|
<xsl:text>) using iso4217ledger.xsl
|
||||||
|
|
||||||
|
</xsl:text>
|
||||||
|
<xsl:apply-templates />
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
! Create ledger entry for the corresponding commodity
|
||||||
|
! -->
|
||||||
|
<xsl:template match="CcyNtry">
|
||||||
|
<xsl:variable name="ccy">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="Ccy">
|
||||||
|
<xsl:value-of select="Ccy"/>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:text>¤</xsl:text>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:variable>
|
||||||
|
|
||||||
|
<xsl:text>commodity </xsl:text>
|
||||||
|
<xsl:value-of select="$ccy"/>
|
||||||
|
|
||||||
|
<xsl:text>
|
||||||
|
note </xsl:text>
|
||||||
|
<xsl:value-of select="CcyNm"/>
|
||||||
|
<xsl:text> - </xsl:text>
|
||||||
|
<xsl:value-of select="normalize-space(CtryNm)"/>
|
||||||
|
<xsl:if test="CcyNbr">
|
||||||
|
<xsl:text> (</xsl:text>
|
||||||
|
<xsl:value-of select="CcyNbr"/>
|
||||||
|
<xsl:text>)</xsl:text>
|
||||||
|
</xsl:if>
|
||||||
|
|
||||||
|
<xsl:text>
|
||||||
|
format </xsl:text>
|
||||||
|
<xsl:value-of select="$ccy"/><xsl:text> </xsl:text>
|
||||||
|
<xsl:text>0000</xsl:text>
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="CcyMnrUnts > 0">
|
||||||
|
<xsl:value-of select="$decimal_separator"/>
|
||||||
|
<xsl:call-template name="zero">
|
||||||
|
<xsl:with-param name="count" select="CcyMnrUnts"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:when test="CcyMnrUnts = 'N.A.'">
|
||||||
|
<xsl:value-of select="$decimal_separator"/>
|
||||||
|
<xsl:call-template name="zero">
|
||||||
|
<xsl:with-param name="count" select="3"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
|
||||||
|
<xsl:text>
|
||||||
|
nomarket
|
||||||
|
|
||||||
|
</xsl:text>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
|
||||||
|
<!--
|
||||||
|
! Recursive template to generate 0s
|
||||||
|
! -->
|
||||||
|
<xsl:template name="zero">
|
||||||
|
<xsl:param name="count" select="0"/>
|
||||||
|
<xsl:if test="$count > 0">
|
||||||
|
<xsl:text>0</xsl:text>
|
||||||
|
<xsl:call-template name="zero">
|
||||||
|
<xsl:with-param name="count" select="$count - 1"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:if>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
</xsl:stylesheet>
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
, texinfo, gnused }:
|
, texinfo, gnused }:
|
||||||
|
|
||||||
let
|
let
|
||||||
rev = "20140417";
|
rev = "20140507";
|
||||||
in
|
in
|
||||||
|
|
||||||
stdenv.mkDerivation {
|
stdenv.mkDerivation {
|
||||||
|
|
|
||||||
|
|
@ -36,17 +36,29 @@ set(info_files ledger3.texi ledger-mode.texi)
|
||||||
|
|
||||||
find_program(MAKEINFO makeinfo)
|
find_program(MAKEINFO makeinfo)
|
||||||
find_program(TEXI2PDF texi2pdf)
|
find_program(TEXI2PDF texi2pdf)
|
||||||
|
find_program(TEX tex)
|
||||||
find_program(MAN2HTML man2html)
|
find_program(MAN2HTML man2html)
|
||||||
|
find_program(GROFF groff)
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
|
|
||||||
foreach(file ${info_files})
|
foreach(file ${info_files})
|
||||||
get_filename_component(file_base ${file} NAME_WE)
|
get_filename_component(file_base ${file} NAME_WE)
|
||||||
|
|
||||||
|
if(NOT MAKEINFO)
|
||||||
|
message(WARNING "Could not find makeinfo. Info version of documentation cannot be built.")
|
||||||
|
else()
|
||||||
|
add_custom_command(OUTPUT ${file_base}.info
|
||||||
|
COMMAND makeinfo --force --no-split -o ${file_base}.info ${CMAKE_CURRENT_SOURCE_DIR}/${file}
|
||||||
|
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${file}
|
||||||
|
VERBATIM)
|
||||||
|
list(APPEND ledger_doc_files ${file_base}.info)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(BUILD_WEB_DOCS)
|
if(BUILD_WEB_DOCS)
|
||||||
if(NOT MAKEINFO)
|
if(NOT MAKEINFO)
|
||||||
message(FATAL_ERROR "Could not find makeinfo. HTML version of documentation cannot be built.")
|
message(WARNING "Could not find makeinfo. HTML version of documentation cannot be built.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_custom_command(OUTPUT ${file_base}.html
|
add_custom_command(OUTPUT ${file_base}.html
|
||||||
COMMAND makeinfo --force --html --no-split -o ${file_base}.html ${CMAKE_CURRENT_SOURCE_DIR}/${file}
|
COMMAND makeinfo --force --html --no-split -o ${file_base}.html ${CMAKE_CURRENT_SOURCE_DIR}/${file}
|
||||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${file}
|
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${file}
|
||||||
|
|
@ -54,11 +66,14 @@ foreach(file ${info_files})
|
||||||
list(APPEND ledger_doc_files ${file_base}.html)
|
list(APPEND ledger_doc_files ${file_base}.html)
|
||||||
endif(BUILD_WEB_DOCS)
|
endif(BUILD_WEB_DOCS)
|
||||||
|
|
||||||
if(NOT TEXI2PDF)
|
if(NOT TEXI2PDF OR NOT TEX)
|
||||||
message(WARNING "Could not find texi2pdf. PDF version of documentation will not be built.")
|
message(WARNING "Could not find texi2pdf or tex. PDF version of documentation will not be built.")
|
||||||
else()
|
else()
|
||||||
|
if(BUILD_A4_PDF)
|
||||||
|
set(papersize --texinfo=@afourpaper)
|
||||||
|
endif()
|
||||||
add_custom_command(OUTPUT ${file_base}.pdf
|
add_custom_command(OUTPUT ${file_base}.pdf
|
||||||
COMMAND texi2pdf -b -q -o ${file_base}.pdf ${CMAKE_CURRENT_SOURCE_DIR}/${file}
|
COMMAND texi2pdf ${papersize} -b -q -o ${file_base}.pdf ${CMAKE_CURRENT_SOURCE_DIR}/${file}
|
||||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${file}
|
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${file}
|
||||||
VERBATIM)
|
VERBATIM)
|
||||||
list(APPEND ledger_doc_files ${file_base}.pdf)
|
list(APPEND ledger_doc_files ${file_base}.pdf)
|
||||||
|
|
@ -72,15 +87,21 @@ if(BUILD_WEB_DOCS)
|
||||||
if(NOT BASH)
|
if(NOT BASH)
|
||||||
message(FATAL_ERROR "Could not find bash. Unable to build documentation.")
|
message(FATAL_ERROR "Could not find bash. Unable to build documentation.")
|
||||||
endif()
|
endif()
|
||||||
if(NOT MAN2HTML)
|
if(MAN2HTML)
|
||||||
message(FATAL_ERROR "Could not find man2html. HTML version of man page cannot be built.")
|
add_custom_command(OUTPUT ledger.1.html
|
||||||
|
COMMAND ${BASH} -c "man2html ${CMAKE_CURRENT_SOURCE_DIR}/ledger.1 | tail -n+3 > ledger.1.html"
|
||||||
|
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/ledger.1
|
||||||
|
VERBATIM)
|
||||||
|
list(APPEND ledger_doc_files ledger.1.html)
|
||||||
|
elseif(GROFF)
|
||||||
|
add_custom_command(OUTPUT ledger.1.html
|
||||||
|
COMMAND ${BASH} -c "groff -mandoc -Thtml ${CMAKE_CURRENT_SOURCE_DIR}/ledger.1 > ledger.1.html"
|
||||||
|
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/ledger.1
|
||||||
|
VERBATIM)
|
||||||
|
list(APPEND ledger_doc_files ledger.1.html)
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "Could not find man2html or groff. HTML version of man page cannot be built.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_custom_command(OUTPUT ledger.1.html
|
|
||||||
COMMAND ${BASH} -c "man2html ${CMAKE_CURRENT_SOURCE_DIR}/ledger.1 | tail -n+3 > ledger.1.html"
|
|
||||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/ledger.1
|
|
||||||
VERBATIM)
|
|
||||||
list(APPEND ledger_doc_files ledger.1.html)
|
|
||||||
endif(BUILD_WEB_DOCS)
|
endif(BUILD_WEB_DOCS)
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
|
|
@ -99,8 +120,19 @@ endif(CMAKE_INSTALL_MANDIR)
|
||||||
foreach(file ${info_files})
|
foreach(file ${info_files})
|
||||||
get_filename_component(file_base ${file} NAME_WE)
|
get_filename_component(file_base ${file} NAME_WE)
|
||||||
|
|
||||||
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${file}
|
if (CMAKE_SOURCE_DIR STREQUAL BUILD_DIR)
|
||||||
|
set(doc_dir CMAKE_CURRENT_SOURCE_DIR)
|
||||||
|
else()
|
||||||
|
get_filename_component(dir_base ${CMAKE_CURRENT_SOURCE_DIR} NAME_WE)
|
||||||
|
set(doc_dir "${CMAKE_SOURCE_DIR}/${BUILD_DIR}/${dir_base}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
install(FILES ${doc_dir}/${file_base}.info
|
||||||
DESTINATION ${CMAKE_INSTALL_INFODIR} COMPONENT doc)
|
DESTINATION ${CMAKE_INSTALL_INFODIR} COMPONENT doc)
|
||||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${file_base}.pdf
|
install(FILES ${doc_dir}/${file_base}.pdf
|
||||||
DESTINATION ${CMAKE_INSTALL_DOCDIR} COMPONENT doc OPTIONAL)
|
DESTINATION ${CMAKE_INSTALL_DOCDIR} COMPONENT doc OPTIONAL)
|
||||||
|
if (BUILD_WEB_DOCS)
|
||||||
|
install(FILES ${doc_dir}/${file_base}.html
|
||||||
|
DESTINATION ${CMAKE_INSTALL_DOCDIR} COMPONENT doc)
|
||||||
|
endif(BUILD_WEB_DOCS)
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
|
||||||
|
|
@ -2693,7 +2693,7 @@ doing it.
|
||||||
* Total posting costs::
|
* Total posting costs::
|
||||||
* Virtual posting costs::
|
* Virtual posting costs::
|
||||||
* Commodity prices::
|
* Commodity prices::
|
||||||
* Prices vs. costs::
|
* Prices versus costs::
|
||||||
* Fixated prices and costs::
|
* Fixated prices and costs::
|
||||||
* Lot dates::
|
* Lot dates::
|
||||||
* Lot notes::
|
* Lot notes::
|
||||||
|
|
@ -3296,7 +3296,7 @@ happening in the case of an exceptional transaction, surround the
|
||||||
Income:Gifts Received
|
Income:Gifts Received
|
||||||
@end smallexample
|
@end smallexample
|
||||||
|
|
||||||
@node Commodity prices, Prices vs. costs, Virtual posting costs, Transactions
|
@node Commodity prices, Prices versus costs, Virtual posting costs, Transactions
|
||||||
@section Commodity prices
|
@section Commodity prices
|
||||||
@findex --lot-prices
|
@findex --lot-prices
|
||||||
|
|
||||||
|
|
@ -3424,8 +3424,8 @@ And in cases where the amounts do not divide into whole figures and
|
||||||
must be rounded, the capital gains figure could be off by a cent. Use
|
must be rounded, the capital gains figure could be off by a cent. Use
|
||||||
with caution.
|
with caution.
|
||||||
|
|
||||||
@node Prices vs. costs, Fixated prices and costs, Commodity prices, Transactions
|
@node Prices versus costs, Fixated prices and costs, Commodity prices, Transactions
|
||||||
@section Prices vs. costs
|
@section Prices versus costs
|
||||||
|
|
||||||
Because lot pricing provides enough information to infer the cost, the
|
Because lot pricing provides enough information to infer the cost, the
|
||||||
following two transactions are equivalent:
|
following two transactions are equivalent:
|
||||||
|
|
@ -3445,7 +3445,7 @@ example in the print report. Functionally, however, there is no
|
||||||
difference, and neither the register nor the balance report are
|
difference, and neither the register nor the balance report are
|
||||||
sensitive to this difference.
|
sensitive to this difference.
|
||||||
|
|
||||||
@node Fixated prices and costs, Lot dates, Prices vs. costs, Transactions
|
@node Fixated prices and costs, Lot dates, Prices versus costs, Transactions
|
||||||
@section Fixated prices and costs
|
@section Fixated prices and costs
|
||||||
|
|
||||||
If you buy a stock last year, and ask for its value today, Ledger will
|
If you buy a stock last year, and ask for its value today, Ledger will
|
||||||
|
|
@ -3476,7 +3476,7 @@ fixated prices by way of the cost:
|
||||||
@end smallexample
|
@end smallexample
|
||||||
|
|
||||||
This is the same as the previous transaction, with the same caveats
|
This is the same as the previous transaction, with the same caveats
|
||||||
found in @ref{Prices vs. costs}.
|
found in @ref{Prices versus costs}.
|
||||||
|
|
||||||
@node Lot dates, Lot notes, Fixated prices and costs, Transactions
|
@node Lot dates, Lot notes, Fixated prices and costs, Transactions
|
||||||
@section Lot dates
|
@section Lot dates
|
||||||
|
|
@ -8458,13 +8458,13 @@ make sense later.
|
||||||
|
|
||||||
@menu
|
@menu
|
||||||
* Basic data traversal::
|
* Basic data traversal::
|
||||||
* Raw vs. Cooked::
|
* Raw versus Cooked::
|
||||||
* Queries::
|
* Queries::
|
||||||
* Embedded Python::
|
* Embedded Python::
|
||||||
* Amounts::
|
* Amounts::
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
@node Basic data traversal, Raw vs. Cooked, Extending with Python, Extending with Python
|
@node Basic data traversal, Raw versus Cooked, Extending with Python, Extending with Python
|
||||||
@section Basic data traversal
|
@section Basic data traversal
|
||||||
|
|
||||||
Every interaction with Ledger happens in the context of a Session.
|
Every interaction with Ledger happens in the context of a Session.
|
||||||
|
|
@ -8491,8 +8491,8 @@ for xact in ledger.read_journal("sample.dat").xacts:
|
||||||
print "Transferring %s to/from %s" % (post.amount, post.account)
|
print "Transferring %s to/from %s" % (post.amount, post.account)
|
||||||
@end smallexample
|
@end smallexample
|
||||||
|
|
||||||
@node Raw vs. Cooked, Queries, Basic data traversal, Extending with Python
|
@node Raw versus Cooked, Queries, Basic data traversal, Extending with Python
|
||||||
@section Raw vs. Cooked
|
@section Raw versus Cooked
|
||||||
|
|
||||||
Ledger data exists in one of two forms: raw and cooked. Raw objects are
|
Ledger data exists in one of two forms: raw and cooked. Raw objects are
|
||||||
what you get from a traversal like the above, and represent exactly what
|
what you get from a traversal like the above, and represent exactly what
|
||||||
|
|
@ -8556,7 +8556,7 @@ does it transaction-wise. It relies on the fact that an unsorted report
|
||||||
returns postings in the exact order they were parsed from the journal
|
returns postings in the exact order they were parsed from the journal
|
||||||
file.
|
file.
|
||||||
|
|
||||||
@node Queries, Embedded Python, Raw vs. Cooked, Extending with Python
|
@node Queries, Embedded Python, Raw versus Cooked, Extending with Python
|
||||||
@section Queries
|
@section Queries
|
||||||
|
|
||||||
The Journal.query() method accepts every argument you can specify on the
|
The Journal.query() method accepts every argument you can specify on the
|
||||||
|
|
|
||||||
|
|
@ -42,43 +42,28 @@
|
||||||
(defconst ledger-code-string "\\((.*)\\)?")
|
(defconst ledger-code-string "\\((.*)\\)?")
|
||||||
(defconst ledger-payee-string "\\(.*\\)")
|
(defconst ledger-payee-string "\\(.*\\)")
|
||||||
|
|
||||||
(defmacro ledger-line-regex (&rest elements)
|
(defun ledger-get-regex-str (name)
|
||||||
(let (regex-string)
|
(symbol-value (intern (concat "ledger-" (symbol-name name) "-string"))))
|
||||||
(concat (dolist (e elements regex-string)
|
|
||||||
(setq regex-string
|
|
||||||
(concat regex-string
|
|
||||||
(eval
|
|
||||||
(intern
|
|
||||||
(concat "ledger-" (symbol-name e) "-string")))))) "[ \t]*$")))
|
|
||||||
|
|
||||||
(defmacro ledger-single-line-config2 (&rest elements)
|
(defun ledger-line-regex (elements)
|
||||||
"Take list of ELEMENTS and return regex and element list for use in context-at-point"
|
(concat (apply 'concat (mapcar 'ledger-get-regex-str elements)) "[ \t]*$"))
|
||||||
(let (regex-string)
|
|
||||||
`'(,(concat (dolist (e elements regex-string)
|
|
||||||
(setq regex-string
|
|
||||||
(concat regex-string
|
|
||||||
(eval
|
|
||||||
(intern
|
|
||||||
(concat "ledger-" (symbol-name e) "-string")))))) "[ \t]*$")
|
|
||||||
,elements)))
|
|
||||||
|
|
||||||
(defmacro ledger-single-line-config (&rest elements)
|
(defmacro ledger-single-line-config (&rest elements)
|
||||||
"Take list of ELEMENTS and return regex and element list for use in context-at-point"
|
"Take list of ELEMENTS and return regex and element list for use in context-at-point"
|
||||||
`'(,(eval `(ledger-line-regex ,@elements))
|
`(list (ledger-line-regex (quote ,elements)) (quote ,elements)))
|
||||||
,elements))
|
|
||||||
|
|
||||||
(defconst ledger-line-config
|
(defconst ledger-line-config
|
||||||
(list (list 'xact (list (ledger-single-line-config date nil status nil code nil payee nil comment)
|
(list (list 'xact (list (ledger-single-line-config date nil status nil code nil payee nil comment)
|
||||||
(ledger-single-line-config date nil status nil code nil payee)
|
(ledger-single-line-config date nil status nil code nil payee)
|
||||||
(ledger-single-line-config date nil status nil payee)))
|
(ledger-single-line-config date nil status nil payee)))
|
||||||
(list 'acct-transaction (list (ledger-single-line-config indent comment)
|
(list 'acct-transaction (list (ledger-single-line-config indent comment)
|
||||||
(ledger-single-line-config2 indent status account nil commodity amount nil comment)
|
(ledger-single-line-config indent status account nil commodity amount nil comment)
|
||||||
(ledger-single-line-config2 indent status account nil commodity amount)
|
(ledger-single-line-config indent status account nil commodity amount)
|
||||||
(ledger-single-line-config2 indent status account nil amount nil commodity comment)
|
(ledger-single-line-config indent status account nil amount nil commodity comment)
|
||||||
(ledger-single-line-config2 indent status account nil amount nil commodity)
|
(ledger-single-line-config indent status account nil amount nil commodity)
|
||||||
(ledger-single-line-config2 indent status account nil amount)
|
(ledger-single-line-config indent status account nil amount)
|
||||||
(ledger-single-line-config2 indent status account nil comment)
|
(ledger-single-line-config indent status account nil comment)
|
||||||
(ledger-single-line-config2 indent status account)))))
|
(ledger-single-line-config indent status account)))))
|
||||||
|
|
||||||
(defun ledger-extract-context-info (line-type pos)
|
(defun ledger-extract-context-info (line-type pos)
|
||||||
"Get context info for current line with LINE-TYPE.
|
"Get context info for current line with LINE-TYPE.
|
||||||
|
|
|
||||||
|
|
@ -167,6 +167,7 @@ if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||||
if(BUILD_LIBRARY)
|
if(BUILD_LIBRARY)
|
||||||
list(APPEND _args ${CMAKE_SHARED_LIBRARY_CXX_FLAGS})
|
list(APPEND _args ${CMAKE_SHARED_LIBRARY_CXX_FLAGS})
|
||||||
endif()
|
endif()
|
||||||
|
list(APPEND _args "-std=c++11 ")
|
||||||
list(APPEND _args "-x c++-header " ${_inc})
|
list(APPEND _args "-x c++-header " ${_inc})
|
||||||
list(APPEND _args -c ${_header_filename} -o ${_pch_filename})
|
list(APPEND _args -c ${_header_filename} -o ${_pch_filename})
|
||||||
|
|
||||||
|
|
@ -185,7 +186,6 @@ if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||||
|
|
||||||
elseif(CMAKE_CXX_COMPILER MATCHES "g\\+\\+")
|
elseif(CMAKE_CXX_COMPILER MATCHES "g\\+\\+")
|
||||||
set(GXX_WARNING_FLAGS
|
set(GXX_WARNING_FLAGS
|
||||||
-ansi
|
|
||||||
-pedantic
|
-pedantic
|
||||||
-Wall
|
-Wall
|
||||||
-Winvalid-pch
|
-Winvalid-pch
|
||||||
|
|
@ -223,6 +223,7 @@ if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||||
list(APPEND _args ${CMAKE_SHARED_LIBRARY_CXX_FLAGS})
|
list(APPEND _args ${CMAKE_SHARED_LIBRARY_CXX_FLAGS})
|
||||||
endif()
|
endif()
|
||||||
list(APPEND _args ${GXX_WARNING_FLAGS})
|
list(APPEND _args ${GXX_WARNING_FLAGS})
|
||||||
|
list(APPEND _args "-std=c++11 ")
|
||||||
list(APPEND _args "-x c++-header " ${_inc})
|
list(APPEND _args "-x c++-header " ${_inc})
|
||||||
list(APPEND _args -c ${_header_filename} -o ${_gch_filename})
|
list(APPEND _args -c ${_header_filename} -o ${_gch_filename})
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -267,7 +267,8 @@ commodity_pool_t::exchange(const amount_t& amount,
|
||||||
// Do not record commodity exchanges where amount's commodity has a
|
// Do not record commodity exchanges where amount's commodity has a
|
||||||
// fixated price, since this does not establish a market value for the
|
// fixated price, since this does not establish a market value for the
|
||||||
// base commodity.
|
// base commodity.
|
||||||
if (! per_unit_cost.is_realzero() &&
|
if (add_price &&
|
||||||
|
! per_unit_cost.is_realzero() &&
|
||||||
(current_annotation == NULL ||
|
(current_annotation == NULL ||
|
||||||
! (current_annotation->price &&
|
! (current_annotation->price &&
|
||||||
current_annotation->has_flags(ANNOTATION_PRICE_FIXATED))) &&
|
current_annotation->has_flags(ANNOTATION_PRICE_FIXATED))) &&
|
||||||
|
|
|
||||||
|
|
@ -302,6 +302,7 @@ public:
|
||||||
HANDLER(market).report(out);
|
HANDLER(market).report(out);
|
||||||
HANDLER(meta_).report(out);
|
HANDLER(meta_).report(out);
|
||||||
HANDLER(monthly).report(out);
|
HANDLER(monthly).report(out);
|
||||||
|
HANDLER(no_pager).report(out);
|
||||||
HANDLER(no_rounding).report(out);
|
HANDLER(no_rounding).report(out);
|
||||||
HANDLER(no_titles).report(out);
|
HANDLER(no_titles).report(out);
|
||||||
HANDLER(no_total).report(out);
|
HANDLER(no_total).report(out);
|
||||||
|
|
|
||||||
|
|
@ -229,7 +229,11 @@ static void trace_delete_func(void * ptr, const char * which)
|
||||||
|
|
||||||
//#if !defined(__has_feature) || !__has_feature(address_sanitizer)
|
//#if !defined(__has_feature) || !__has_feature(address_sanitizer)
|
||||||
|
|
||||||
|
#ifdef _GLIBCXX_THROW
|
||||||
|
void * operator new(std::size_t size) _GLIBCXX_THROW(std::bad_alloc) {
|
||||||
|
#else
|
||||||
void * operator new(std::size_t size) throw (std::bad_alloc) {
|
void * operator new(std::size_t size) throw (std::bad_alloc) {
|
||||||
|
#endif
|
||||||
void * ptr = std::malloc(size);
|
void * ptr = std::malloc(size);
|
||||||
if (DO_VERIFY() && ledger::memory_tracing_active)
|
if (DO_VERIFY() && ledger::memory_tracing_active)
|
||||||
ledger::trace_new_func(ptr, "new", size);
|
ledger::trace_new_func(ptr, "new", size);
|
||||||
|
|
@ -241,7 +245,11 @@ void * operator new(std::size_t size, const std::nothrow_t&) throw() {
|
||||||
ledger::trace_new_func(ptr, "new", size);
|
ledger::trace_new_func(ptr, "new", size);
|
||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
|
#ifdef _GLIBCXX_THROW
|
||||||
|
void * operator new[](std::size_t size) _GLIBCXX_THROW(std::bad_alloc) {
|
||||||
|
#else
|
||||||
void * operator new[](std::size_t size) throw (std::bad_alloc) {
|
void * operator new[](std::size_t size) throw (std::bad_alloc) {
|
||||||
|
#endif
|
||||||
void * ptr = std::malloc(size);
|
void * ptr = std::malloc(size);
|
||||||
if (DO_VERIFY() && ledger::memory_tracing_active)
|
if (DO_VERIFY() && ledger::memory_tracing_active)
|
||||||
ledger::trace_new_func(ptr, "new[]", size);
|
ledger::trace_new_func(ptr, "new[]", size);
|
||||||
|
|
|
||||||
|
|
@ -292,9 +292,9 @@ bool xact_base_t::finalize()
|
||||||
_("A posting's cost must be of a different commodity than its amount"));
|
_("A posting's cost must be of a different commodity than its amount"));
|
||||||
|
|
||||||
cost_breakdown_t breakdown =
|
cost_breakdown_t breakdown =
|
||||||
commodity_pool_t::current_pool->exchange
|
commodity_pool_t::current_pool->exchange(
|
||||||
(post->amount, *post->cost, false, ! post->has_flags(POST_COST_VIRTUAL),
|
post->amount, *post->cost, false, ! post->has_flags(POST_COST_VIRTUAL),
|
||||||
datetime_t(date(), time_duration(0, 0, 0, 0)));
|
datetime_t(date(), time_duration(0, 0, 0, 0)));
|
||||||
|
|
||||||
if (post->amount.has_annotation() && post->amount.annotation().price) {
|
if (post->amount.has_annotation() && post->amount.annotation().price) {
|
||||||
if (breakdown.basis_cost.commodity() == breakdown.final_cost.commodity()) {
|
if (breakdown.basis_cost.commodity() == breakdown.final_cost.commodity()) {
|
||||||
|
|
|
||||||
6
test/regress/999.test
Normal file
6
test/regress/999.test
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
2012-03-10 My Brother
|
||||||
|
Assets:Brokerage 1000 AAPL (@) $1
|
||||||
|
Income:Gifts Received
|
||||||
|
|
||||||
|
test prices
|
||||||
|
end test
|
||||||
|
|
@ -1,5 +1,29 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
# By default US Letter is used as the PDF papersize.
|
||||||
|
# For those preferring other dimensions add a4 or small
|
||||||
|
# as a commandline argument to this script to create a
|
||||||
|
# DIN A4 or smallbook version of the PDF.
|
||||||
|
case $1 in
|
||||||
|
a4*|afour*)
|
||||||
|
papersize='--texinfo=@afourpaper';;
|
||||||
|
small*)
|
||||||
|
papersize='--texinfo=@smallbook';;
|
||||||
|
*)
|
||||||
|
papersize='';; # US Letter is texinfo default
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Use keg-only Mac Hombrew texinfo if installed.
|
||||||
|
# Since texi2pdf is a shell script itself executing texi2dvi
|
||||||
|
# PATH is prepended with the path to correct texinfo scripts.
|
||||||
|
if [ $(uname -s) = 'Darwin' ]; then
|
||||||
|
brew list texinfo >/dev/null 2>&1 \
|
||||||
|
&& export PATH="$(brew --prefix texinfo)/bin:$PATH"
|
||||||
|
fi
|
||||||
|
|
||||||
echo "===================================== Making Info..."
|
echo "===================================== Making Info..."
|
||||||
makeinfo ledger3.texi
|
makeinfo ledger3.texi
|
||||||
|
echo "===================================== Making HTML..."
|
||||||
|
makeinfo --html --no-split ledger3.texi
|
||||||
echo "===================================== Making PDF..."
|
echo "===================================== Making PDF..."
|
||||||
texi2pdf --quiet --batch ledger3.texi
|
texi2pdf --quiet --batch ${papersize} ledger3.texi
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue