Changed date parser to use lex/yacc.
This commit is contained in:
parent
53c132ad98
commit
c5214c8759
21 changed files with 4732 additions and 124 deletions
10
Doxyfile
10
Doxyfile
|
|
@ -37,7 +37,7 @@ TAB_SIZE = 8
|
|||
ALIASES =
|
||||
OPTIMIZE_OUTPUT_FOR_C = NO
|
||||
OPTIMIZE_OUTPUT_JAVA = NO
|
||||
BUILTIN_STL_SUPPORT = NO
|
||||
BUILTIN_STL_SUPPORT = YES
|
||||
DISTRIBUTE_GROUP_DOC = NO
|
||||
SUBGROUPING = YES
|
||||
#---------------------------------------------------------------------------
|
||||
|
|
@ -175,12 +175,12 @@ TREEVIEW_WIDTH = 250
|
|||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the LaTeX output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_LATEX = NO
|
||||
GENERATE_LATEX = YES
|
||||
LATEX_OUTPUT = latex
|
||||
LATEX_CMD_NAME = latex
|
||||
MAKEINDEX_CMD_NAME = makeindex
|
||||
COMPACT_LATEX = NO
|
||||
PAPER_TYPE = a4wide
|
||||
PAPER_TYPE = usletter
|
||||
EXTRA_PACKAGES =
|
||||
LATEX_HEADER =
|
||||
PDF_HYPERLINKS = YES
|
||||
|
|
@ -245,13 +245,13 @@ PERL_PATH = /usr/bin/perl
|
|||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the dot tool
|
||||
#---------------------------------------------------------------------------
|
||||
CLASS_DIAGRAMS = NO
|
||||
CLASS_DIAGRAMS = YES
|
||||
HIDE_UNDOC_RELATIONS = YES
|
||||
HAVE_DOT = YES
|
||||
CLASS_GRAPH = YES
|
||||
COLLABORATION_GRAPH = YES
|
||||
GROUP_GRAPHS = YES
|
||||
UML_LOOK = NO
|
||||
UML_LOOK = YES
|
||||
TEMPLATE_RELATIONS = NO
|
||||
INCLUDE_GRAPH = YES
|
||||
INCLUDED_BY_GRAPH = YES
|
||||
|
|
|
|||
10
Makefile.am
10
Makefile.am
|
|
@ -17,10 +17,15 @@ if HAVE_BOOST_PYTHON
|
|||
lib_LTLIBRARIES += libpyledger.la
|
||||
endif
|
||||
|
||||
AM_YFLAGS = -d
|
||||
AM_LFLAGS = -o $(LEX_OUTPUT_ROOT).c
|
||||
|
||||
libledger_la_CXXFLAGS = $(WARNFLAGS) -I$(top_builddir)/gdtoa
|
||||
libledger_la_SOURCES = \
|
||||
amount.cc \
|
||||
times.cc \
|
||||
parsetime.yy \
|
||||
scantime.ll \
|
||||
quotes.cc \
|
||||
balance.cc \
|
||||
value.cc \
|
||||
|
|
@ -84,6 +89,7 @@ libpyledger_la_LDFLAGS = -release 3.0
|
|||
pkginclude_HEADERS = \
|
||||
amount.h \
|
||||
times.h \
|
||||
parsetime.h \
|
||||
balance.h \
|
||||
binary.h \
|
||||
csv.h \
|
||||
|
|
@ -124,7 +130,8 @@ bin_PROGRAMS = ledger
|
|||
|
||||
ledger_CXXFLAGS =
|
||||
ledger_SOURCES = option.cc main.cc
|
||||
ledger_LDADD = $(LIBOBJS) libledger.la gdtoa/libgdtoa.la
|
||||
ledger_LDADD = $(LIBOBJS) libledger.la gdtoa/libgdtoa.la $(LEXLIB)
|
||||
|
||||
if HAVE_EXPAT
|
||||
ledger_CXXFLAGS += -DHAVE_EXPAT=1
|
||||
endif
|
||||
|
|
@ -206,6 +213,7 @@ UnitTests_SOURCES = tests/UnitTests.cc \
|
|||
\
|
||||
tests/corelib/numerics/BasicAmount.cc \
|
||||
tests/corelib/numerics/CommodityAmount.cc \
|
||||
tests/corelib/numerics/DateTime.cc \
|
||||
tests/corelib/numerics/Commodity.cc
|
||||
|
||||
UnitTests_LDADD = $(lib_LTLIBRARIES) gdtoa/libgdtoa.la -lcppunit
|
||||
|
|
|
|||
97
Makefile.in
97
Makefile.in
|
|
@ -69,7 +69,8 @@ DIST_COMMON = README $(am__configure_deps) $(pkginclude_HEADERS) \
|
|||
$(srcdir)/Makefile.am $(srcdir)/Makefile.in \
|
||||
$(srcdir)/acconf.h.in $(top_srcdir)/configure AUTHORS COPYING \
|
||||
ChangeLog INSTALL NEWS compile config.guess config.sub depcomp \
|
||||
elisp-comp install-sh ltmain.sh missing texinfo.tex
|
||||
elisp-comp install-sh ltmain.sh missing parsetime.cc \
|
||||
parsetime.h scantime.cc texinfo.tex ylwrap
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
|
|
@ -91,17 +92,19 @@ am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \
|
|||
libLTLIBRARIES_INSTALL = $(INSTALL)
|
||||
LTLIBRARIES = $(lib_LTLIBRARIES)
|
||||
libledger_la_LIBADD =
|
||||
am__libledger_la_SOURCES_DIST = amount.cc times.cc quotes.cc \
|
||||
balance.cc value.cc xml.cc xpath.cc mask.cc format.cc util.cc \
|
||||
session.cc journal.cc parser.cc textual.cc binary.cc \
|
||||
xmlparse.cc qif.cc report.cc transform.cc csv.cc derive.cc \
|
||||
emacs.cc reconcile.cc gnucash.cc ofx.cc debug.cc trace.cc
|
||||
am__libledger_la_SOURCES_DIST = amount.cc times.cc parsetime.yy \
|
||||
scantime.ll quotes.cc balance.cc value.cc xml.cc xpath.cc \
|
||||
mask.cc format.cc util.cc session.cc journal.cc parser.cc \
|
||||
textual.cc binary.cc xmlparse.cc qif.cc report.cc transform.cc \
|
||||
csv.cc derive.cc emacs.cc reconcile.cc gnucash.cc ofx.cc \
|
||||
debug.cc trace.cc
|
||||
@HAVE_EXPAT_TRUE@am__objects_1 = libledger_la-gnucash.lo
|
||||
@HAVE_XMLPARSE_TRUE@am__objects_2 = libledger_la-gnucash.lo
|
||||
@HAVE_LIBOFX_TRUE@am__objects_3 = libledger_la-ofx.lo
|
||||
@DEBUG_TRUE@am__objects_4 = libledger_la-debug.lo \
|
||||
@DEBUG_TRUE@ libledger_la-trace.lo
|
||||
am_libledger_la_OBJECTS = libledger_la-amount.lo libledger_la-times.lo \
|
||||
libledger_la-parsetime.lo libledger_la-scantime.lo \
|
||||
libledger_la-quotes.lo libledger_la-balance.lo \
|
||||
libledger_la-value.lo libledger_la-xml.lo \
|
||||
libledger_la-xpath.lo libledger_la-mask.lo \
|
||||
|
|
@ -137,7 +140,7 @@ PyUnitTests_LDADD = $(LDADD)
|
|||
am_UnitTests_OBJECTS = UnitTests-UnitTests.$(OBJEXT) \
|
||||
UnitTests-BasicAmount.$(OBJEXT) \
|
||||
UnitTests-CommodityAmount.$(OBJEXT) \
|
||||
UnitTests-Commodity.$(OBJEXT)
|
||||
UnitTests-DateTime.$(OBJEXT) UnitTests-Commodity.$(OBJEXT)
|
||||
UnitTests_OBJECTS = $(am_UnitTests_OBJECTS)
|
||||
UnitTests_DEPENDENCIES = $(lib_LTLIBRARIES) gdtoa/libgdtoa.la
|
||||
UnitTests_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
|
||||
|
|
@ -145,8 +148,9 @@ UnitTests_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
|
|||
$(CXXFLAGS) $(UnitTests_LDFLAGS) $(LDFLAGS) -o $@
|
||||
am_ledger_OBJECTS = ledger-option.$(OBJEXT) ledger-main.$(OBJEXT)
|
||||
ledger_OBJECTS = $(am_ledger_OBJECTS)
|
||||
am__DEPENDENCIES_1 =
|
||||
ledger_DEPENDENCIES = $(LIBOBJS) libledger.la gdtoa/libgdtoa.la \
|
||||
$(am__append_16)
|
||||
$(am__DEPENDENCIES_1) $(am__append_16)
|
||||
ledger_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
||||
--mode=link $(CXXLD) $(ledger_CXXFLAGS) $(CXXFLAGS) \
|
||||
$(ledger_LDFLAGS) $(LDFLAGS) -o $@
|
||||
|
|
@ -166,6 +170,13 @@ CXXLD = $(CXX)
|
|||
CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
||||
--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
|
||||
$(LDFLAGS) -o $@
|
||||
LEXCOMPILE = $(LEX) $(LFLAGS) $(AM_LFLAGS)
|
||||
LTLEXCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
||||
--mode=compile $(LEX) $(LFLAGS) $(AM_LFLAGS)
|
||||
YLWRAP = $(top_srcdir)/ylwrap
|
||||
YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS)
|
||||
LTYACCCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
||||
--mode=compile $(YACC) $(YFLAGS) $(AM_YFLAGS)
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
||||
|
|
@ -261,6 +272,9 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
|||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LEX = @LEX@
|
||||
LEXLIB = @LEXLIB@
|
||||
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
|
|
@ -286,6 +300,8 @@ SET_MAKE = @SET_MAKE@
|
|||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
YACC = @YACC@
|
||||
YFLAGS = @YFLAGS@
|
||||
abs_builddir = @abs_builddir@
|
||||
abs_srcdir = @abs_srcdir@
|
||||
abs_top_builddir = @abs_top_builddir@
|
||||
|
|
@ -349,15 +365,17 @@ ESC_builddir = `echo "$(top_builddir)" | sed 's/\//\\\\\//g'`
|
|||
ESC_distdir = `echo "$(distdir)" | sed 's/\//\\\\\//g'`
|
||||
EXTRA_DIST = docs tests ledger.pdf ledger.info
|
||||
lib_LTLIBRARIES = libledger.la $(am__append_1)
|
||||
AM_YFLAGS = -d
|
||||
AM_LFLAGS = -o $(LEX_OUTPUT_ROOT).c
|
||||
libledger_la_CXXFLAGS = $(WARNFLAGS) -I$(top_builddir)/gdtoa \
|
||||
$(am__append_2) $(am__append_4) $(am__append_6) \
|
||||
$(am__append_8) $(am__append_10)
|
||||
libledger_la_SOURCES = amount.cc times.cc quotes.cc balance.cc \
|
||||
value.cc xml.cc xpath.cc mask.cc format.cc util.cc session.cc \
|
||||
journal.cc parser.cc textual.cc binary.cc xmlparse.cc qif.cc \
|
||||
report.cc transform.cc csv.cc derive.cc emacs.cc reconcile.cc \
|
||||
$(am__append_3) $(am__append_5) $(am__append_7) \
|
||||
$(am__append_9)
|
||||
libledger_la_SOURCES = amount.cc times.cc parsetime.yy scantime.ll \
|
||||
quotes.cc balance.cc value.cc xml.cc xpath.cc mask.cc \
|
||||
format.cc util.cc session.cc journal.cc parser.cc textual.cc \
|
||||
binary.cc xmlparse.cc qif.cc report.cc transform.cc csv.cc \
|
||||
derive.cc emacs.cc reconcile.cc $(am__append_3) \
|
||||
$(am__append_5) $(am__append_7) $(am__append_9)
|
||||
libledger_la_LDFLAGS = -release 3.0
|
||||
libpyledger_la_CXXFLAGS = -DUSE_BOOST_PYTHON=1 $(am__append_11)
|
||||
libpyledger_la_SOURCES = \
|
||||
|
|
@ -368,6 +386,7 @@ libpyledger_la_LDFLAGS = -release 3.0
|
|||
pkginclude_HEADERS = \
|
||||
amount.h \
|
||||
times.h \
|
||||
parsetime.h \
|
||||
balance.h \
|
||||
binary.h \
|
||||
csv.h \
|
||||
|
|
@ -405,7 +424,7 @@ pkginclude_HEADERS = \
|
|||
ledger_CXXFLAGS = $(am__append_12) $(am__append_13) $(am__append_14) \
|
||||
$(am__append_15) $(am__append_17)
|
||||
ledger_SOURCES = option.cc main.cc
|
||||
ledger_LDADD = $(LIBOBJS) libledger.la gdtoa/libgdtoa.la \
|
||||
ledger_LDADD = $(LIBOBJS) libledger.la gdtoa/libgdtoa.la $(LEXLIB) \
|
||||
$(am__append_16)
|
||||
ledger_LDFLAGS = -static # for the sake of command-line speed
|
||||
info_TEXINFOS = ledger.texi
|
||||
|
|
@ -422,6 +441,7 @@ UnitTests_SOURCES = tests/UnitTests.cc \
|
|||
\
|
||||
tests/corelib/numerics/BasicAmount.cc \
|
||||
tests/corelib/numerics/CommodityAmount.cc \
|
||||
tests/corelib/numerics/DateTime.cc \
|
||||
tests/corelib/numerics/Commodity.cc
|
||||
|
||||
UnitTests_LDADD = $(lib_LTLIBRARIES) gdtoa/libgdtoa.la -lcppunit
|
||||
|
|
@ -433,7 +453,7 @@ all: acconf.h
|
|||
$(MAKE) $(AM_MAKEFLAGS) all-recursive
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .cc .dvi .html .info .lo .o .obj .pdf .ps .texi
|
||||
.SUFFIXES: .cc .dvi .html .info .ll .lo .o .obj .pdf .ps .texi .yy
|
||||
am--refresh:
|
||||
@:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
|
|
@ -511,6 +531,11 @@ clean-libLTLIBRARIES:
|
|||
echo "rm -f \"$${dir}/so_locations\""; \
|
||||
rm -f "$${dir}/so_locations"; \
|
||||
done
|
||||
parsetime.h: parsetime.cc
|
||||
@if test ! -f $@; then \
|
||||
rm -f parsetime.cc; \
|
||||
$(MAKE) $(AM_MAKEFLAGS) parsetime.cc; \
|
||||
else :; fi
|
||||
libledger.la: $(libledger_la_OBJECTS) $(libledger_la_DEPENDENCIES)
|
||||
$(libledger_la_LINK) -rpath $(libdir) $(libledger_la_OBJECTS) $(libledger_la_LIBADD) $(LIBS)
|
||||
libpyledger.la: $(libpyledger_la_OBJECTS) $(libpyledger_la_DEPENDENCIES)
|
||||
|
|
@ -576,6 +601,7 @@ distclean-compile:
|
|||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UnitTests-BasicAmount.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UnitTests-Commodity.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UnitTests-CommodityAmount.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UnitTests-DateTime.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UnitTests-UnitTests.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ledger-main.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ledger-option.Po@am__quote@
|
||||
|
|
@ -592,10 +618,12 @@ distclean-compile:
|
|||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libledger_la-mask.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libledger_la-ofx.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libledger_la-parser.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libledger_la-parsetime.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libledger_la-qif.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libledger_la-quotes.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libledger_la-reconcile.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libledger_la-report.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libledger_la-scantime.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libledger_la-session.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libledger_la-textual.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libledger_la-times.Plo@am__quote@
|
||||
|
|
@ -645,6 +673,20 @@ libledger_la-times.lo: times.cc
|
|||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libledger_la_CXXFLAGS) $(CXXFLAGS) -c -o libledger_la-times.lo `test -f 'times.cc' || echo '$(srcdir)/'`times.cc
|
||||
|
||||
libledger_la-parsetime.lo: parsetime.cc
|
||||
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libledger_la_CXXFLAGS) $(CXXFLAGS) -MT libledger_la-parsetime.lo -MD -MP -MF $(DEPDIR)/libledger_la-parsetime.Tpo -c -o libledger_la-parsetime.lo `test -f 'parsetime.cc' || echo '$(srcdir)/'`parsetime.cc
|
||||
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libledger_la-parsetime.Tpo $(DEPDIR)/libledger_la-parsetime.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='parsetime.cc' object='libledger_la-parsetime.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libledger_la_CXXFLAGS) $(CXXFLAGS) -c -o libledger_la-parsetime.lo `test -f 'parsetime.cc' || echo '$(srcdir)/'`parsetime.cc
|
||||
|
||||
libledger_la-scantime.lo: scantime.cc
|
||||
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libledger_la_CXXFLAGS) $(CXXFLAGS) -MT libledger_la-scantime.lo -MD -MP -MF $(DEPDIR)/libledger_la-scantime.Tpo -c -o libledger_la-scantime.lo `test -f 'scantime.cc' || echo '$(srcdir)/'`scantime.cc
|
||||
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libledger_la-scantime.Tpo $(DEPDIR)/libledger_la-scantime.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='scantime.cc' object='libledger_la-scantime.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libledger_la_CXXFLAGS) $(CXXFLAGS) -c -o libledger_la-scantime.lo `test -f 'scantime.cc' || echo '$(srcdir)/'`scantime.cc
|
||||
|
||||
libledger_la-quotes.lo: quotes.cc
|
||||
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libledger_la_CXXFLAGS) $(CXXFLAGS) -MT libledger_la-quotes.lo -MD -MP -MF $(DEPDIR)/libledger_la-quotes.Tpo -c -o libledger_la-quotes.lo `test -f 'quotes.cc' || echo '$(srcdir)/'`quotes.cc
|
||||
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libledger_la-quotes.Tpo $(DEPDIR)/libledger_la-quotes.Plo
|
||||
|
|
@ -876,6 +918,20 @@ UnitTests-CommodityAmount.obj: tests/corelib/numerics/CommodityAmount.cc
|
|||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(UnitTests_CXXFLAGS) $(CXXFLAGS) -c -o UnitTests-CommodityAmount.obj `if test -f 'tests/corelib/numerics/CommodityAmount.cc'; then $(CYGPATH_W) 'tests/corelib/numerics/CommodityAmount.cc'; else $(CYGPATH_W) '$(srcdir)/tests/corelib/numerics/CommodityAmount.cc'; fi`
|
||||
|
||||
UnitTests-DateTime.o: tests/corelib/numerics/DateTime.cc
|
||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(UnitTests_CXXFLAGS) $(CXXFLAGS) -MT UnitTests-DateTime.o -MD -MP -MF $(DEPDIR)/UnitTests-DateTime.Tpo -c -o UnitTests-DateTime.o `test -f 'tests/corelib/numerics/DateTime.cc' || echo '$(srcdir)/'`tests/corelib/numerics/DateTime.cc
|
||||
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/UnitTests-DateTime.Tpo $(DEPDIR)/UnitTests-DateTime.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tests/corelib/numerics/DateTime.cc' object='UnitTests-DateTime.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(UnitTests_CXXFLAGS) $(CXXFLAGS) -c -o UnitTests-DateTime.o `test -f 'tests/corelib/numerics/DateTime.cc' || echo '$(srcdir)/'`tests/corelib/numerics/DateTime.cc
|
||||
|
||||
UnitTests-DateTime.obj: tests/corelib/numerics/DateTime.cc
|
||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(UnitTests_CXXFLAGS) $(CXXFLAGS) -MT UnitTests-DateTime.obj -MD -MP -MF $(DEPDIR)/UnitTests-DateTime.Tpo -c -o UnitTests-DateTime.obj `if test -f 'tests/corelib/numerics/DateTime.cc'; then $(CYGPATH_W) 'tests/corelib/numerics/DateTime.cc'; else $(CYGPATH_W) '$(srcdir)/tests/corelib/numerics/DateTime.cc'; fi`
|
||||
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/UnitTests-DateTime.Tpo $(DEPDIR)/UnitTests-DateTime.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tests/corelib/numerics/DateTime.cc' object='UnitTests-DateTime.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(UnitTests_CXXFLAGS) $(CXXFLAGS) -c -o UnitTests-DateTime.obj `if test -f 'tests/corelib/numerics/DateTime.cc'; then $(CYGPATH_W) 'tests/corelib/numerics/DateTime.cc'; else $(CYGPATH_W) '$(srcdir)/tests/corelib/numerics/DateTime.cc'; fi`
|
||||
|
||||
UnitTests-Commodity.o: tests/corelib/numerics/Commodity.cc
|
||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(UnitTests_CXXFLAGS) $(CXXFLAGS) -MT UnitTests-Commodity.o -MD -MP -MF $(DEPDIR)/UnitTests-Commodity.Tpo -c -o UnitTests-Commodity.o `test -f 'tests/corelib/numerics/Commodity.cc' || echo '$(srcdir)/'`tests/corelib/numerics/Commodity.cc
|
||||
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/UnitTests-Commodity.Tpo $(DEPDIR)/UnitTests-Commodity.Po
|
||||
|
|
@ -918,6 +974,12 @@ ledger-main.obj: main.cc
|
|||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ledger_CXXFLAGS) $(CXXFLAGS) -c -o ledger-main.obj `if test -f 'main.cc'; then $(CYGPATH_W) 'main.cc'; else $(CYGPATH_W) '$(srcdir)/main.cc'; fi`
|
||||
|
||||
.ll.cc:
|
||||
$(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE)
|
||||
|
||||
.yy.cc:
|
||||
$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h $*.h y.output $*.output -- $(YACCCOMPILE)
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
|
|
@ -1523,6 +1585,9 @@ distclean-generic:
|
|||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
-rm -f parsetime.cc
|
||||
-rm -f parsetime.h
|
||||
-rm -f scantime.cc
|
||||
@HAVE_BOOST_PYTHON_FALSE@install-exec-hook:
|
||||
clean: clean-recursive
|
||||
|
||||
|
|
|
|||
|
|
@ -81,5 +81,9 @@
|
|||
/* Version number of package */
|
||||
#undef VERSION
|
||||
|
||||
/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a
|
||||
`char[]'. */
|
||||
#undef YYTEXT_POINTER
|
||||
|
||||
/* Define to `unsigned int' if <sys/types.h> does not define. */
|
||||
#undef size_t
|
||||
|
|
|
|||
|
|
@ -1172,7 +1172,7 @@ bool parse_annotations(std::istream& in, amount_t& price,
|
|||
else
|
||||
throw new amount_error("Commodity date lacks closing bracket");
|
||||
|
||||
date = ptime_from_local_date_string(buf);
|
||||
date = parse_datetime(buf);
|
||||
has_date = true;
|
||||
}
|
||||
else if (c == '(') {
|
||||
|
|
|
|||
321
configure
vendored
321
configure
vendored
|
|
@ -872,6 +872,11 @@ F77
|
|||
FFLAGS
|
||||
ac_ct_F77
|
||||
LIBTOOL
|
||||
YACC
|
||||
YFLAGS
|
||||
LEX
|
||||
LEX_OUTPUT_ROOT
|
||||
LEXLIB
|
||||
EMACS
|
||||
EMACSLOADPATH
|
||||
lispdir
|
||||
|
|
@ -918,6 +923,8 @@ CPP
|
|||
CXXCPP
|
||||
F77
|
||||
FFLAGS
|
||||
YACC
|
||||
YFLAGS
|
||||
EMACS
|
||||
EMACSLOADPATH'
|
||||
ac_subdirs_all='gdtoa'
|
||||
|
|
@ -1534,6 +1541,11 @@ Some influential environment variables:
|
|||
CXXCPP C++ preprocessor
|
||||
F77 Fortran 77 compiler command
|
||||
FFLAGS Fortran 77 compiler flags
|
||||
YACC The `Yet Another C Compiler' implementation to use. Defaults to
|
||||
the first program found out of: `bison -y', `byacc', `yacc'.
|
||||
YFLAGS The list of arguments that will be passed by default to $YACC.
|
||||
This script will default YFLAGS to the empty string to avoid a
|
||||
default value of `-d' given by some make applications.
|
||||
EMACS the Emacs editor command
|
||||
EMACSLOADPATH
|
||||
the Emacs library search path
|
||||
|
|
@ -4848,7 +4860,7 @@ ia64-*-hpux*)
|
|||
;;
|
||||
*-*-irix6*)
|
||||
# Find out which ABI we are using.
|
||||
echo '#line 4851 "configure"' > conftest.$ac_ext
|
||||
echo '#line 4863 "configure"' > conftest.$ac_ext
|
||||
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||
(eval $ac_compile) 2>&5
|
||||
ac_status=$?
|
||||
|
|
@ -7107,11 +7119,11 @@ else
|
|||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||
-e 's:$: $lt_compiler_flag:'`
|
||||
(eval echo "\"\$as_me:7110: $lt_compile\"" >&5)
|
||||
(eval echo "\"\$as_me:7122: $lt_compile\"" >&5)
|
||||
(eval "$lt_compile" 2>conftest.err)
|
||||
ac_status=$?
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:7114: \$? = $ac_status" >&5
|
||||
echo "$as_me:7126: \$? = $ac_status" >&5
|
||||
if (exit $ac_status) && test -s "$ac_outfile"; then
|
||||
# The compiler can only warn and ignore the option if not recognized
|
||||
# So say no if there are warnings other than the usual output.
|
||||
|
|
@ -7375,11 +7387,11 @@ else
|
|||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||
-e 's:$: $lt_compiler_flag:'`
|
||||
(eval echo "\"\$as_me:7378: $lt_compile\"" >&5)
|
||||
(eval echo "\"\$as_me:7390: $lt_compile\"" >&5)
|
||||
(eval "$lt_compile" 2>conftest.err)
|
||||
ac_status=$?
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:7382: \$? = $ac_status" >&5
|
||||
echo "$as_me:7394: \$? = $ac_status" >&5
|
||||
if (exit $ac_status) && test -s "$ac_outfile"; then
|
||||
# The compiler can only warn and ignore the option if not recognized
|
||||
# So say no if there are warnings other than the usual output.
|
||||
|
|
@ -7479,11 +7491,11 @@ else
|
|||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||
-e 's:$: $lt_compiler_flag:'`
|
||||
(eval echo "\"\$as_me:7482: $lt_compile\"" >&5)
|
||||
(eval echo "\"\$as_me:7494: $lt_compile\"" >&5)
|
||||
(eval "$lt_compile" 2>out/conftest.err)
|
||||
ac_status=$?
|
||||
cat out/conftest.err >&5
|
||||
echo "$as_me:7486: \$? = $ac_status" >&5
|
||||
echo "$as_me:7498: \$? = $ac_status" >&5
|
||||
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
||||
then
|
||||
# The compiler can only warn and ignore the option if not recognized
|
||||
|
|
@ -9787,7 +9799,7 @@ else
|
|||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||
lt_status=$lt_dlunknown
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 9790 "configure"
|
||||
#line 9802 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#if HAVE_DLFCN_H
|
||||
|
|
@ -9887,7 +9899,7 @@ else
|
|||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||
lt_status=$lt_dlunknown
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 9890 "configure"
|
||||
#line 9902 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#if HAVE_DLFCN_H
|
||||
|
|
@ -12223,11 +12235,11 @@ else
|
|||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||
-e 's:$: $lt_compiler_flag:'`
|
||||
(eval echo "\"\$as_me:12226: $lt_compile\"" >&5)
|
||||
(eval echo "\"\$as_me:12238: $lt_compile\"" >&5)
|
||||
(eval "$lt_compile" 2>conftest.err)
|
||||
ac_status=$?
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:12230: \$? = $ac_status" >&5
|
||||
echo "$as_me:12242: \$? = $ac_status" >&5
|
||||
if (exit $ac_status) && test -s "$ac_outfile"; then
|
||||
# The compiler can only warn and ignore the option if not recognized
|
||||
# So say no if there are warnings other than the usual output.
|
||||
|
|
@ -12327,11 +12339,11 @@ else
|
|||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||
-e 's:$: $lt_compiler_flag:'`
|
||||
(eval echo "\"\$as_me:12330: $lt_compile\"" >&5)
|
||||
(eval echo "\"\$as_me:12342: $lt_compile\"" >&5)
|
||||
(eval "$lt_compile" 2>out/conftest.err)
|
||||
ac_status=$?
|
||||
cat out/conftest.err >&5
|
||||
echo "$as_me:12334: \$? = $ac_status" >&5
|
||||
echo "$as_me:12346: \$? = $ac_status" >&5
|
||||
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
||||
then
|
||||
# The compiler can only warn and ignore the option if not recognized
|
||||
|
|
@ -13897,11 +13909,11 @@ else
|
|||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||
-e 's:$: $lt_compiler_flag:'`
|
||||
(eval echo "\"\$as_me:13900: $lt_compile\"" >&5)
|
||||
(eval echo "\"\$as_me:13912: $lt_compile\"" >&5)
|
||||
(eval "$lt_compile" 2>conftest.err)
|
||||
ac_status=$?
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:13904: \$? = $ac_status" >&5
|
||||
echo "$as_me:13916: \$? = $ac_status" >&5
|
||||
if (exit $ac_status) && test -s "$ac_outfile"; then
|
||||
# The compiler can only warn and ignore the option if not recognized
|
||||
# So say no if there are warnings other than the usual output.
|
||||
|
|
@ -14001,11 +14013,11 @@ else
|
|||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||
-e 's:$: $lt_compiler_flag:'`
|
||||
(eval echo "\"\$as_me:14004: $lt_compile\"" >&5)
|
||||
(eval echo "\"\$as_me:14016: $lt_compile\"" >&5)
|
||||
(eval "$lt_compile" 2>out/conftest.err)
|
||||
ac_status=$?
|
||||
cat out/conftest.err >&5
|
||||
echo "$as_me:14008: \$? = $ac_status" >&5
|
||||
echo "$as_me:14020: \$? = $ac_status" >&5
|
||||
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
||||
then
|
||||
# The compiler can only warn and ignore the option if not recognized
|
||||
|
|
@ -16199,11 +16211,11 @@ else
|
|||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||
-e 's:$: $lt_compiler_flag:'`
|
||||
(eval echo "\"\$as_me:16202: $lt_compile\"" >&5)
|
||||
(eval echo "\"\$as_me:16214: $lt_compile\"" >&5)
|
||||
(eval "$lt_compile" 2>conftest.err)
|
||||
ac_status=$?
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:16206: \$? = $ac_status" >&5
|
||||
echo "$as_me:16218: \$? = $ac_status" >&5
|
||||
if (exit $ac_status) && test -s "$ac_outfile"; then
|
||||
# The compiler can only warn and ignore the option if not recognized
|
||||
# So say no if there are warnings other than the usual output.
|
||||
|
|
@ -16467,11 +16479,11 @@ else
|
|||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||
-e 's:$: $lt_compiler_flag:'`
|
||||
(eval echo "\"\$as_me:16470: $lt_compile\"" >&5)
|
||||
(eval echo "\"\$as_me:16482: $lt_compile\"" >&5)
|
||||
(eval "$lt_compile" 2>conftest.err)
|
||||
ac_status=$?
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:16474: \$? = $ac_status" >&5
|
||||
echo "$as_me:16486: \$? = $ac_status" >&5
|
||||
if (exit $ac_status) && test -s "$ac_outfile"; then
|
||||
# The compiler can only warn and ignore the option if not recognized
|
||||
# So say no if there are warnings other than the usual output.
|
||||
|
|
@ -16571,11 +16583,11 @@ else
|
|||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||
-e 's:$: $lt_compiler_flag:'`
|
||||
(eval echo "\"\$as_me:16574: $lt_compile\"" >&5)
|
||||
(eval echo "\"\$as_me:16586: $lt_compile\"" >&5)
|
||||
(eval "$lt_compile" 2>out/conftest.err)
|
||||
ac_status=$?
|
||||
cat out/conftest.err >&5
|
||||
echo "$as_me:16578: \$? = $ac_status" >&5
|
||||
echo "$as_me:16590: \$? = $ac_status" >&5
|
||||
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
||||
then
|
||||
# The compiler can only warn and ignore the option if not recognized
|
||||
|
|
@ -19234,6 +19246,262 @@ LIBTOOL='$(SHELL) $(top_builddir)/libtool'
|
|||
|
||||
|
||||
|
||||
|
||||
for ac_prog in 'bison -y' byacc
|
||||
do
|
||||
# Extract the first word of "$ac_prog", so it can be a program name with args.
|
||||
set dummy $ac_prog; ac_word=$2
|
||||
{ echo "$as_me:$LINENO: checking for $ac_word" >&5
|
||||
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
|
||||
if test "${ac_cv_prog_YACC+set}" = set; then
|
||||
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||
else
|
||||
if test -n "$YACC"; then
|
||||
ac_cv_prog_YACC="$YACC" # Let the user override the test.
|
||||
else
|
||||
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
||||
for as_dir in $PATH
|
||||
do
|
||||
IFS=$as_save_IFS
|
||||
test -z "$as_dir" && as_dir=.
|
||||
for ac_exec_ext in '' $ac_executable_extensions; do
|
||||
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
|
||||
ac_cv_prog_YACC="$ac_prog"
|
||||
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
|
||||
break 2
|
||||
fi
|
||||
done
|
||||
done
|
||||
IFS=$as_save_IFS
|
||||
|
||||
fi
|
||||
fi
|
||||
YACC=$ac_cv_prog_YACC
|
||||
if test -n "$YACC"; then
|
||||
{ echo "$as_me:$LINENO: result: $YACC" >&5
|
||||
echo "${ECHO_T}$YACC" >&6; }
|
||||
else
|
||||
{ echo "$as_me:$LINENO: result: no" >&5
|
||||
echo "${ECHO_T}no" >&6; }
|
||||
fi
|
||||
|
||||
|
||||
test -n "$YACC" && break
|
||||
done
|
||||
test -n "$YACC" || YACC="yacc"
|
||||
|
||||
|
||||
for ac_prog in flex lex
|
||||
do
|
||||
# Extract the first word of "$ac_prog", so it can be a program name with args.
|
||||
set dummy $ac_prog; ac_word=$2
|
||||
{ echo "$as_me:$LINENO: checking for $ac_word" >&5
|
||||
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
|
||||
if test "${ac_cv_prog_LEX+set}" = set; then
|
||||
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||
else
|
||||
if test -n "$LEX"; then
|
||||
ac_cv_prog_LEX="$LEX" # Let the user override the test.
|
||||
else
|
||||
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
||||
for as_dir in $PATH
|
||||
do
|
||||
IFS=$as_save_IFS
|
||||
test -z "$as_dir" && as_dir=.
|
||||
for ac_exec_ext in '' $ac_executable_extensions; do
|
||||
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
|
||||
ac_cv_prog_LEX="$ac_prog"
|
||||
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
|
||||
break 2
|
||||
fi
|
||||
done
|
||||
done
|
||||
IFS=$as_save_IFS
|
||||
|
||||
fi
|
||||
fi
|
||||
LEX=$ac_cv_prog_LEX
|
||||
if test -n "$LEX"; then
|
||||
{ echo "$as_me:$LINENO: result: $LEX" >&5
|
||||
echo "${ECHO_T}$LEX" >&6; }
|
||||
else
|
||||
{ echo "$as_me:$LINENO: result: no" >&5
|
||||
echo "${ECHO_T}no" >&6; }
|
||||
fi
|
||||
|
||||
|
||||
test -n "$LEX" && break
|
||||
done
|
||||
test -n "$LEX" || LEX=":"
|
||||
|
||||
if test "x$LEX" != "x:"; then
|
||||
cat >conftest.l <<_ACEOF
|
||||
%%
|
||||
a { ECHO; }
|
||||
b { REJECT; }
|
||||
c { yymore (); }
|
||||
d { yyless (1); }
|
||||
e { yyless (input () != 0); }
|
||||
f { unput (yytext[0]); }
|
||||
. { BEGIN INITIAL; }
|
||||
%%
|
||||
#ifdef YYTEXT_POINTER
|
||||
extern char *yytext;
|
||||
#endif
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
return ! yylex () + ! yywrap ();
|
||||
}
|
||||
_ACEOF
|
||||
{ (ac_try="$LEX conftest.l"
|
||||
case "(($ac_try" in
|
||||
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
|
||||
*) ac_try_echo=$ac_try;;
|
||||
esac
|
||||
eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
|
||||
(eval "$LEX conftest.l") 2>&5
|
||||
ac_status=$?
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); }
|
||||
{ echo "$as_me:$LINENO: checking lex output file root" >&5
|
||||
echo $ECHO_N "checking lex output file root... $ECHO_C" >&6; }
|
||||
if test "${ac_cv_prog_lex_root+set}" = set; then
|
||||
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||
else
|
||||
|
||||
if test -f lex.yy.c; then
|
||||
ac_cv_prog_lex_root=lex.yy
|
||||
elif test -f lexyy.c; then
|
||||
ac_cv_prog_lex_root=lexyy
|
||||
else
|
||||
{ { echo "$as_me:$LINENO: error: cannot find output from $LEX; giving up" >&5
|
||||
echo "$as_me: error: cannot find output from $LEX; giving up" >&2;}
|
||||
{ (exit 1); exit 1; }; }
|
||||
fi
|
||||
fi
|
||||
{ echo "$as_me:$LINENO: result: $ac_cv_prog_lex_root" >&5
|
||||
echo "${ECHO_T}$ac_cv_prog_lex_root" >&6; }
|
||||
LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root
|
||||
|
||||
if test -z "${LEXLIB+set}"; then
|
||||
{ echo "$as_me:$LINENO: checking lex library" >&5
|
||||
echo $ECHO_N "checking lex library... $ECHO_C" >&6; }
|
||||
if test "${ac_cv_lib_lex+set}" = set; then
|
||||
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||
else
|
||||
|
||||
ac_save_LIBS=$LIBS
|
||||
ac_cv_lib_lex='none needed'
|
||||
for ac_lib in '' -lfl -ll; do
|
||||
LIBS="$ac_lib $ac_save_LIBS"
|
||||
cat >conftest.$ac_ext <<_ACEOF
|
||||
`cat $LEX_OUTPUT_ROOT.c`
|
||||
_ACEOF
|
||||
rm -f conftest.$ac_objext conftest$ac_exeext
|
||||
if { (ac_try="$ac_link"
|
||||
case "(($ac_try" in
|
||||
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
|
||||
*) ac_try_echo=$ac_try;;
|
||||
esac
|
||||
eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
|
||||
(eval "$ac_link") 2>conftest.er1
|
||||
ac_status=$?
|
||||
grep -v '^ *+' conftest.er1 >conftest.err
|
||||
rm -f conftest.er1
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } && {
|
||||
test -z "$ac_c_werror_flag" ||
|
||||
test ! -s conftest.err
|
||||
} && test -s conftest$ac_exeext &&
|
||||
$as_test_x conftest$ac_exeext; then
|
||||
ac_cv_lib_lex=$ac_lib
|
||||
else
|
||||
echo "$as_me: failed program was:" >&5
|
||||
sed 's/^/| /' conftest.$ac_ext >&5
|
||||
|
||||
|
||||
fi
|
||||
|
||||
rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
|
||||
conftest$ac_exeext conftest.$ac_ext
|
||||
test "$ac_cv_lib_lex" != 'none needed' && break
|
||||
done
|
||||
LIBS=$ac_save_LIBS
|
||||
|
||||
fi
|
||||
{ echo "$as_me:$LINENO: result: $ac_cv_lib_lex" >&5
|
||||
echo "${ECHO_T}$ac_cv_lib_lex" >&6; }
|
||||
test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex
|
||||
fi
|
||||
|
||||
|
||||
{ echo "$as_me:$LINENO: checking whether yytext is a pointer" >&5
|
||||
echo $ECHO_N "checking whether yytext is a pointer... $ECHO_C" >&6; }
|
||||
if test "${ac_cv_prog_lex_yytext_pointer+set}" = set; then
|
||||
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||
else
|
||||
# POSIX says lex can declare yytext either as a pointer or an array; the
|
||||
# default is implementation-dependent. Figure out which it is, since
|
||||
# not all implementations provide the %pointer and %array declarations.
|
||||
ac_cv_prog_lex_yytext_pointer=no
|
||||
ac_save_LIBS=$LIBS
|
||||
LIBS="$LEXLIB $ac_save_LIBS"
|
||||
cat >conftest.$ac_ext <<_ACEOF
|
||||
#define YYTEXT_POINTER 1
|
||||
`cat $LEX_OUTPUT_ROOT.c`
|
||||
_ACEOF
|
||||
rm -f conftest.$ac_objext conftest$ac_exeext
|
||||
if { (ac_try="$ac_link"
|
||||
case "(($ac_try" in
|
||||
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
|
||||
*) ac_try_echo=$ac_try;;
|
||||
esac
|
||||
eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
|
||||
(eval "$ac_link") 2>conftest.er1
|
||||
ac_status=$?
|
||||
grep -v '^ *+' conftest.er1 >conftest.err
|
||||
rm -f conftest.er1
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } && {
|
||||
test -z "$ac_c_werror_flag" ||
|
||||
test ! -s conftest.err
|
||||
} && test -s conftest$ac_exeext &&
|
||||
$as_test_x conftest$ac_exeext; then
|
||||
ac_cv_prog_lex_yytext_pointer=yes
|
||||
else
|
||||
echo "$as_me: failed program was:" >&5
|
||||
sed 's/^/| /' conftest.$ac_ext >&5
|
||||
|
||||
|
||||
fi
|
||||
|
||||
rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
|
||||
conftest$ac_exeext conftest.$ac_ext
|
||||
LIBS=$ac_save_LIBS
|
||||
|
||||
fi
|
||||
{ echo "$as_me:$LINENO: result: $ac_cv_prog_lex_yytext_pointer" >&5
|
||||
echo "${ECHO_T}$ac_cv_prog_lex_yytext_pointer" >&6; }
|
||||
if test $ac_cv_prog_lex_yytext_pointer = yes; then
|
||||
|
||||
cat >>confdefs.h <<\_ACEOF
|
||||
#define YYTEXT_POINTER 1
|
||||
_ACEOF
|
||||
|
||||
fi
|
||||
rm -f conftest.l $LEX_OUTPUT_ROOT.c
|
||||
|
||||
fi
|
||||
if test "$LEX" != flex; then
|
||||
LEX="$SHELL $missing_dir/missing flex"
|
||||
LEX_OUTPUT_ROOT=lex.yy
|
||||
|
||||
LEXLIB=''
|
||||
|
||||
fi
|
||||
|
||||
# Checks for emacs lisp path
|
||||
# If set to t, that means we are running in a shell under Emacs.
|
||||
|
|
@ -22221,6 +22489,11 @@ F77!$F77$ac_delim
|
|||
FFLAGS!$FFLAGS$ac_delim
|
||||
ac_ct_F77!$ac_ct_F77$ac_delim
|
||||
LIBTOOL!$LIBTOOL$ac_delim
|
||||
YACC!$YACC$ac_delim
|
||||
YFLAGS!$YFLAGS$ac_delim
|
||||
LEX!$LEX$ac_delim
|
||||
LEX_OUTPUT_ROOT!$LEX_OUTPUT_ROOT$ac_delim
|
||||
LEXLIB!$LEXLIB$ac_delim
|
||||
EMACS!$EMACS$ac_delim
|
||||
EMACSLOADPATH!$EMACSLOADPATH$ac_delim
|
||||
lispdir!$lispdir$ac_delim
|
||||
|
|
@ -22253,7 +22526,7 @@ LIBOBJS!$LIBOBJS$ac_delim
|
|||
LTLIBOBJS!$LTLIBOBJS$ac_delim
|
||||
_ACEOF
|
||||
|
||||
if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 35; then
|
||||
if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 40; then
|
||||
break
|
||||
elif $ac_last_try; then
|
||||
{ { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
|
||||
|
|
|
|||
|
|
@ -17,6 +17,15 @@ AC_PROG_MAKE_SET
|
|||
AC_PROG_LIBTOOL
|
||||
AM_PROG_LIBTOOL
|
||||
|
||||
AC_PROG_YACC
|
||||
|
||||
AC_PROG_LEX
|
||||
if test "$LEX" != flex; then
|
||||
LEX="$SHELL $missing_dir/missing flex"
|
||||
AC_SUBST(LEX_OUTPUT_ROOT, lex.yy)
|
||||
AC_SUBST(LEXLIB, '')
|
||||
fi
|
||||
|
||||
# Checks for emacs lisp path
|
||||
AM_PATH_LISPDIR
|
||||
|
||||
|
|
|
|||
36
docs/date-examples.txt
Normal file
36
docs/date-examples.txt
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
2002-02-02
|
||||
2002/02/02
|
||||
2002.02.02
|
||||
02-02-2002
|
||||
02/02/2002
|
||||
02.02.2002
|
||||
02-02-02
|
||||
02/02/02
|
||||
02.02.02
|
||||
02-02
|
||||
02/02
|
||||
02.02
|
||||
20020202
|
||||
20020202T023318
|
||||
20020202T023318-0700
|
||||
20020202T023318-0100
|
||||
02-Feb-2002
|
||||
2002-Feb-02
|
||||
02 Feb 2002
|
||||
02-Feb-2002
|
||||
02 February 2002
|
||||
02-February-2002
|
||||
2002 Feb 02
|
||||
2002-Feb-02
|
||||
2002 February 02
|
||||
2002-February-02
|
||||
02 Feb
|
||||
02-Feb
|
||||
02 February
|
||||
02-February
|
||||
Feb 02
|
||||
Feb-02
|
||||
February 02
|
||||
February-02
|
||||
Feb 02, 2002
|
||||
February 02, 2002
|
||||
|
|
@ -219,7 +219,7 @@ void dataHandler(void *userData, const char *s, int len)
|
|||
break;
|
||||
|
||||
case gnucash_parser_t::ENTRY_DATE:
|
||||
parser->curr_entry->_date = ptime_from_local_date_string(std::string(s, len));
|
||||
parser->curr_entry->_date = parse_datetime(std::string(s, len));
|
||||
break;
|
||||
|
||||
case gnucash_parser_t::ENTRY_DESC:
|
||||
|
|
|
|||
1914
parsetime.cc
Normal file
1914
parsetime.cc
Normal file
File diff suppressed because it is too large
Load diff
67
parsetime.h
Normal file
67
parsetime.h
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
/* A Bison parser, made by GNU Bison 2.3. */
|
||||
|
||||
/* Skeleton interface for Bison's Yacc-like parsers in C
|
||||
|
||||
Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
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, 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, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
Boston, MA 02110-1301, USA. */
|
||||
|
||||
/* As a special exception, you may create a larger work that contains
|
||||
part or all of the Bison parser skeleton and distribute that work
|
||||
under terms of your choice, so long as that work isn't itself a
|
||||
parser generator using the skeleton or a modified version thereof
|
||||
as a parser skeleton. Alternatively, if you modify or redistribute
|
||||
the parser skeleton itself, you may (at your option) remove this
|
||||
special exception, which will cause the skeleton and the resulting
|
||||
Bison output files to be licensed under the GNU General Public
|
||||
License without this special exception.
|
||||
|
||||
This special exception was added by the Free Software Foundation in
|
||||
version 2.2 of Bison. */
|
||||
|
||||
/* Tokens. */
|
||||
#ifndef YYTOKENTYPE
|
||||
# define YYTOKENTYPE
|
||||
/* Put the tokens into the symbol table, so that GDB and other debuggers
|
||||
know about them. */
|
||||
enum yytokentype {
|
||||
TOK_FOURNUM = 258,
|
||||
TOK_TWONUM = 259,
|
||||
TOK_ONENUM = 260,
|
||||
TOK_MONTH = 261,
|
||||
TOK_SPACE = 262
|
||||
};
|
||||
#endif
|
||||
/* Tokens. */
|
||||
#define TOK_FOURNUM 258
|
||||
#define TOK_TWONUM 259
|
||||
#define TOK_ONENUM 260
|
||||
#define TOK_MONTH 261
|
||||
#define TOK_SPACE 262
|
||||
|
||||
|
||||
|
||||
|
||||
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
|
||||
typedef int YYSTYPE;
|
||||
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
|
||||
# define YYSTYPE_IS_DECLARED 1
|
||||
# define YYSTYPE_IS_TRIVIAL 1
|
||||
#endif
|
||||
|
||||
extern YYSTYPE yylval;
|
||||
|
||||
272
parsetime.yy
Normal file
272
parsetime.yy
Normal file
|
|
@ -0,0 +1,272 @@
|
|||
%{
|
||||
#define YYSTYPE struct ledger::intorchar
|
||||
|
||||
#include "times.h"
|
||||
#include "FlexLexer.h"
|
||||
|
||||
static struct std::tm * timeval;
|
||||
|
||||
namespace {
|
||||
boost::posix_time::ptime moment;
|
||||
|
||||
yyFlexLexer * lexer;
|
||||
|
||||
inline void yyerror(const char *str) {
|
||||
throw new ledger::datetime_error(str);
|
||||
}
|
||||
|
||||
inline int yylex(void) {
|
||||
return lexer->yylex();
|
||||
}
|
||||
|
||||
int month_to_int(char * name)
|
||||
{
|
||||
switch (std::toupper(name[0])) {
|
||||
case 'J':
|
||||
if (name[1] == std::tolower('a'))
|
||||
return 1;
|
||||
else if (name[2] == std::tolower('n'))
|
||||
return 6;
|
||||
else
|
||||
return 7;
|
||||
case 'F':
|
||||
return 2;
|
||||
case 'M':
|
||||
if (name[2] == std::tolower('r'))
|
||||
return 3;
|
||||
else
|
||||
return 5;
|
||||
case 'A':
|
||||
if (name[1] == std::tolower('p'))
|
||||
return 4;
|
||||
else
|
||||
return 8;
|
||||
case 'S':
|
||||
return 9;
|
||||
case 'O':
|
||||
return 10;
|
||||
case 'N':
|
||||
return 11;
|
||||
case 'D':
|
||||
return 12;
|
||||
default:
|
||||
std::cerr << "What?? (" << name << ")" << std::endl;
|
||||
assert(0);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
void set_mdy(const ledger::intorchar& month,
|
||||
const ledger::intorchar& day,
|
||||
const ledger::intorchar& year = ledger::intorchar(),
|
||||
bool shortyear = false)
|
||||
{
|
||||
if (ledger::day_before_month) {
|
||||
timeval->tm_mon = (day.ival == -1 ?
|
||||
month_to_int(day.sval) : day.ival) - 1;
|
||||
timeval->tm_mday = month.ival;
|
||||
} else {
|
||||
timeval->tm_mon = (month.ival == -1 ?
|
||||
month_to_int(month.sval) : month.ival) - 1;
|
||||
timeval->tm_mday = day.ival;
|
||||
}
|
||||
|
||||
if (year.ival != -1)
|
||||
timeval->tm_year = (shortyear ?
|
||||
(year.ival < 70 ? year.ival + 100 : year.ival) :
|
||||
year.ival - 1900);
|
||||
}
|
||||
}
|
||||
|
||||
%}
|
||||
|
||||
%token TOK_FOURNUM
|
||||
%token TOK_TWONUM
|
||||
%token TOK_ONENUM
|
||||
%token TOK_MONTH
|
||||
|
||||
%token TOK_SPACE
|
||||
|
||||
%left '/' '-' '.' 'T'
|
||||
|
||||
%%
|
||||
|
||||
input: date optspace ;
|
||||
|
||||
optspace: /* epsilon */ | TOK_SPACE ;
|
||||
|
||||
date: absdate {
|
||||
if (timeval->tm_gmtoff != -1) {
|
||||
boost::posix_time::ptime::time_duration_type offset;
|
||||
offset = boost::posix_time::seconds(timeval->tm_gmtoff);
|
||||
moment = boost::posix_time::from_time_t(timegm(timeval)) - offset;
|
||||
} else {
|
||||
moment = boost::posix_time::ptime_from_tm(*timeval);
|
||||
}
|
||||
};
|
||||
|
||||
absdate:
|
||||
year '/' morday '/' morday {
|
||||
set_mdy($3, $5, $1);
|
||||
}
|
||||
|
|
||||
year '-' morday '-' morday {
|
||||
set_mdy($3, $5, $1);
|
||||
}
|
||||
|
|
||||
year '.' morday '.' morday {
|
||||
set_mdy($3, $5, $1);
|
||||
}
|
||||
|
|
||||
morday '/' morday '/' year {
|
||||
set_mdy($1, $3, $5);
|
||||
}
|
||||
|
|
||||
morday '-' morday '-' year {
|
||||
set_mdy($1, $3, $5);
|
||||
}
|
||||
|
|
||||
morday '.' morday '.' year {
|
||||
set_mdy($1, $3, $5);
|
||||
}
|
||||
|
|
||||
morday '.' morday {
|
||||
set_mdy($1, $3);
|
||||
}
|
||||
|
|
||||
morday '/' morday {
|
||||
set_mdy($1, $3);
|
||||
}
|
||||
|
|
||||
morday '-' morday {
|
||||
set_mdy($1, $3);
|
||||
}
|
||||
|
|
||||
morday '/' morday '/' TOK_TWONUM {
|
||||
set_mdy($1, $3, $5, true);
|
||||
}
|
||||
|
|
||||
morday '-' morday '-' TOK_TWONUM {
|
||||
set_mdy($1, $3, $5, true);
|
||||
}
|
||||
|
|
||||
morday '.' morday '.' TOK_TWONUM {
|
||||
set_mdy($1, $3, $5, true);
|
||||
}
|
||||
|
|
||||
isodate
|
||||
|
|
||||
year TOK_SPACE TOK_MONTH TOK_SPACE morday {
|
||||
set_mdy($3, $5, $1);
|
||||
}
|
||||
|
|
||||
morday TOK_SPACE TOK_MONTH TOK_SPACE year {
|
||||
set_mdy($3, $1, $5);
|
||||
}
|
||||
|
|
||||
TOK_MONTH TOK_SPACE morday {
|
||||
set_mdy($1, $3);
|
||||
}
|
||||
|
|
||||
morday TOK_SPACE TOK_MONTH {
|
||||
set_mdy($3, $1);
|
||||
}
|
||||
|
|
||||
year '-' TOK_MONTH '-' morday {
|
||||
set_mdy($3, $5, $1);
|
||||
}
|
||||
|
|
||||
morday '-' TOK_MONTH '-' year {
|
||||
set_mdy($3, $1, $5);
|
||||
}
|
||||
|
|
||||
TOK_MONTH '-' morday {
|
||||
set_mdy($1, $3);
|
||||
}
|
||||
|
|
||||
morday '-' TOK_MONTH {
|
||||
set_mdy($3, $1);
|
||||
}
|
||||
|
|
||||
TOK_MONTH TOK_SPACE morday ',' TOK_SPACE year {
|
||||
set_mdy($1, $3, $6);
|
||||
}
|
||||
;
|
||||
|
||||
isodate:
|
||||
year TOK_FOURNUM opttime
|
||||
{
|
||||
timeval->tm_year = $1.ival - 1900;
|
||||
timeval->tm_mon = $2.ival / 100 - 1;
|
||||
timeval->tm_mday = $3.ival % 100;
|
||||
};
|
||||
|
||||
opttime: /* epsilon */ |
|
||||
'T' TOK_FOURNUM TOK_TWONUM optzone
|
||||
{
|
||||
timeval->tm_hour = $2.ival / 100;
|
||||
timeval->tm_min = $2.ival % 100;
|
||||
timeval->tm_sec = $3.ival;
|
||||
};
|
||||
|
||||
optzone: /* epsilon */ |
|
||||
'-' TOK_FOURNUM {
|
||||
timeval->tm_gmtoff = - (($2.ival / 100) * 3600 + ($2.ival % 100) * 60);
|
||||
}
|
||||
| '+' TOK_FOURNUM {
|
||||
timeval->tm_gmtoff = (($2.ival / 100) * 3600 + ($2.ival % 100) * 60);
|
||||
};
|
||||
|
||||
year: TOK_FOURNUM { $$ = $1; };
|
||||
|
||||
morday:
|
||||
TOK_TWONUM { $$ = $1; }
|
||||
| TOK_ONENUM { $$ = $1; };
|
||||
|
||||
%%
|
||||
|
||||
int yywrap()
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
boost::posix_time::ptime parse_abs_datetime(std::istream& input)
|
||||
{
|
||||
lexer = new yyFlexLexer(&input);
|
||||
|
||||
struct std::tm temp;
|
||||
std::memset(&temp, 0, sizeof(struct std::tm));
|
||||
temp.tm_year = 2002 - 1900;
|
||||
temp.tm_gmtoff = -1;
|
||||
|
||||
timeval = &temp;
|
||||
//yydebug = 1;
|
||||
|
||||
// jww (2007-04-19): Catch any boost errors thrown from here and
|
||||
// push them onto the new error stack scheme.
|
||||
try {
|
||||
if (yyparse() == 0)
|
||||
return moment;
|
||||
}
|
||||
catch (ledger::datetime_error *) {
|
||||
throw;
|
||||
}
|
||||
catch (...) {
|
||||
throw new ledger::datetime_error("Failed to parse date/time");
|
||||
}
|
||||
throw new ledger::datetime_error("Failed to parse date/time");
|
||||
}
|
||||
|
||||
#ifdef MAIN
|
||||
|
||||
namespace ledger {
|
||||
bool day_before_month = false;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
std::cout << parse_abs_datetime(std::cin) << std::endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif // MAIN
|
||||
2
qif.cc
2
qif.cc
|
|
@ -102,7 +102,7 @@ unsigned int qif_parser_t::parse(std::istream& in,
|
|||
case 'D':
|
||||
SET_BEG_POS_AND_LINE();
|
||||
get_line(in);
|
||||
entry->_date = ptime_from_local_date_string(line);
|
||||
entry->_date = parse_datetime(line);
|
||||
break;
|
||||
|
||||
case 'T':
|
||||
|
|
|
|||
1577
scantime.cc
Normal file
1577
scantime.cc
Normal file
File diff suppressed because it is too large
Load diff
29
scantime.ll
Normal file
29
scantime.ll
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
%option c++ 8bit
|
||||
|
||||
%{
|
||||
#define YYSTYPE struct ledger::intorchar
|
||||
|
||||
extern int yywrap();
|
||||
|
||||
#include "times.h"
|
||||
#include "parsetime.h"
|
||||
|
||||
extern YYSTYPE yylval;
|
||||
%}
|
||||
|
||||
shortmon (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)
|
||||
longmon (January|February|March|April|May|June|July|August|September|October|November|December)
|
||||
|
||||
%%
|
||||
|
||||
[ \t] return TOK_SPACE;
|
||||
[\r\n] ;
|
||||
|
||||
[0-9]{4} yylval = ledger::intorchar(std::atoi(yytext)); return TOK_FOURNUM;
|
||||
[0-9]{2} yylval = ledger::intorchar(std::atoi(yytext)); return TOK_TWONUM;
|
||||
[0-9]{1} yylval = ledger::intorchar(std::atoi(yytext)); return TOK_ONENUM;
|
||||
|
||||
{shortmon} yylval = ledger::intorchar(yytext); return TOK_MONTH;
|
||||
{longmon} yylval = ledger::intorchar(yytext); return TOK_MONTH;
|
||||
|
||||
. return (int) yytext[0];
|
||||
|
|
@ -13,89 +13,71 @@ void DateTimeTestCase::tearDown() {}
|
|||
|
||||
void DateTimeTestCase::testConstructors()
|
||||
{
|
||||
struct tm moment;
|
||||
std::memset(&moment, INT_MAX, sizeof(struct tm));
|
||||
std::time_t time_t_now = std::time(NULL);
|
||||
struct tm * moment = std::localtime(&time_t_now);
|
||||
|
||||
#ifdef HAVE_STRPTIME
|
||||
strptime("2006/12/25 00:00:00", "%Y/%m/%d %H:%M:%S", &moment);
|
||||
std::time_t localMoment = std::mktime(moment);
|
||||
|
||||
ptime d0;
|
||||
ptime d1(parse_datetime("1990/01/01"));
|
||||
ptime d3(boost::posix_time::from_time_t(localMoment));
|
||||
ptime d4(parse_datetime("2006/12/25"));
|
||||
ptime d5(parse_datetime("12/25"));
|
||||
ptime d6(parse_datetime("2006.12.25"));
|
||||
ptime d7(parse_datetime("12.25"));
|
||||
ptime d8(parse_datetime("2006-12-25"));
|
||||
ptime d9(parse_datetime("12-25"));
|
||||
#if 0
|
||||
ptime d10(parse_datetime("tue"));
|
||||
ptime d11(parse_datetime("tuesday"));
|
||||
ptime d12(parse_datetime("feb"));
|
||||
ptime d13(parse_datetime("february"));
|
||||
ptime d14(parse_datetime("2006"));
|
||||
#endif
|
||||
ptime d15(d3);
|
||||
|
||||
#ifdef HAVE_TIMEGM
|
||||
std::time_t gmtMoment = timegm(&moment);
|
||||
#endif
|
||||
std::time_t localMoment = std::mktime(&moment);
|
||||
assertTrue(d0.is_not_a_date_time());
|
||||
assertFalse(d1.is_not_a_date_time());
|
||||
assertFalse(d4.is_not_a_date_time());
|
||||
|
||||
date_t d1;
|
||||
#ifdef HAVE_TIMEGM
|
||||
date_t d2(gmtMoment);
|
||||
#endif
|
||||
date_t d3(localMoment);
|
||||
date_t d4("2006/12/25");
|
||||
date_t d5("12/25");
|
||||
date_t d6("2006.12.25");
|
||||
date_t d7("12.25");
|
||||
date_t d8("2006-12-25");
|
||||
date_t d9("12-25");
|
||||
date_t d10("tue");
|
||||
date_t d11("tuesday");
|
||||
date_t d12("feb");
|
||||
date_t d13("february");
|
||||
date_t d14("2006");
|
||||
date_t d15(d3);
|
||||
assertTrue(now > d1);
|
||||
assertTrue(now <= d3);
|
||||
assertTrue(now > d4);
|
||||
|
||||
#ifdef HAVE_TIMEGM
|
||||
if (std::memcmp(&gmtMoment, &localMoment, sizeof(std::time_t)) == 0)
|
||||
assertEqual(d2, d3);
|
||||
else
|
||||
assertNotEqual(d2, d3);
|
||||
#endif
|
||||
|
||||
assertFalse(d1);
|
||||
assertTrue(d4);
|
||||
|
||||
assertTrue(date_t::now > d1);
|
||||
assertTrue(date_t::now > d3);
|
||||
assertTrue(date_t::now > d4);
|
||||
|
||||
assertEqual(d3, d4);
|
||||
assertEqual(d3, d15);
|
||||
assertEqual(d4, d6);
|
||||
assertEqual(d4, d8);
|
||||
assertEqual(d5, d7);
|
||||
assertEqual(d5, d9);
|
||||
#if 0
|
||||
assertEqual(d10, d11);
|
||||
assertEqual(d12, d13);
|
||||
#endif
|
||||
|
||||
assertThrow(date_t("2007/02/29"), date_error *);
|
||||
assertThrow(date_t("2007/13/01"), date_error *);
|
||||
assertThrow(date_t("2007/00/01"), date_error *);
|
||||
assertThrow(date_t("2007/01/00"), date_error *);
|
||||
assertThrow(date_t("2007/00/00"), date_error *);
|
||||
assertThrow(date_t("2007/05/32"), date_error *);
|
||||
assertThrow(parse_datetime("2007/02/29"), datetime_error *);
|
||||
assertThrow(parse_datetime("2007/13/01"), datetime_error *);
|
||||
assertThrow(parse_datetime("2007/00/01"), datetime_error *);
|
||||
assertThrow(parse_datetime("2007/01/00"), datetime_error *);
|
||||
assertThrow(parse_datetime("2007/00/00"), datetime_error *);
|
||||
assertThrow(parse_datetime("2007/05/32"), datetime_error *);
|
||||
|
||||
assertThrow(date_t("2006x/12/25"), date_error *);
|
||||
assertThrow(date_t("2006/12x/25"), date_error *);
|
||||
assertThrow(date_t("2006/12/25x"), date_error *);
|
||||
assertThrow(parse_datetime("2006x/12/25"), datetime_error *);
|
||||
assertThrow(parse_datetime("2006/12x/25"), datetime_error *);
|
||||
assertThrow(parse_datetime("2006/12/25x"), datetime_error *);
|
||||
|
||||
assertThrow(date_t("feb/12/25"), date_error *);
|
||||
assertThrow(date_t("2006/mon/25"), date_error *);
|
||||
assertThrow(date_t("2006/12/web"), date_error *);
|
||||
assertThrow(parse_datetime("feb/12/25"), datetime_error *);
|
||||
assertThrow(parse_datetime("2006/mon/25"), datetime_error *);
|
||||
assertThrow(parse_datetime("2006/12/web"), datetime_error *);
|
||||
|
||||
assertThrow(date_t("12*25"), date_error *);
|
||||
assertThrow(parse_datetime("12*25"), datetime_error *);
|
||||
|
||||
assertThrow(date_t("tuf"), date_error *);
|
||||
assertThrow(date_t("tufsday"), date_error *);
|
||||
assertThrow(date_t("fec"), date_error *);
|
||||
assertThrow(date_t("fecruary"), date_error *);
|
||||
assertThrow(date_t("207x"), date_error *);
|
||||
assertThrow(date_t("hello"), date_error *);
|
||||
assertThrow(parse_datetime("tuf"), datetime_error *);
|
||||
assertThrow(parse_datetime("tufsday"), datetime_error *);
|
||||
assertThrow(parse_datetime("fec"), datetime_error *);
|
||||
assertThrow(parse_datetime("fecruary"), datetime_error *);
|
||||
assertThrow(parse_datetime("207x"), datetime_error *);
|
||||
assertThrow(parse_datetime("hello"), datetime_error *);
|
||||
|
||||
datetime_t dt1;
|
||||
datetime_t dt2;
|
||||
datetime_t dt3;
|
||||
datetime_t dt4;
|
||||
datetime_t dt5;
|
||||
|
||||
interval_t i1;
|
||||
interval_t i2;
|
||||
}
|
||||
|
|
|
|||
13
textual.cc
13
textual.cc
|
|
@ -276,10 +276,10 @@ transaction_t * parse_transaction(char * line,
|
|||
|
||||
if (char * p = std::strchr(buf, '=')) {
|
||||
*p++ = '\0';
|
||||
xact->_date_eff = ptime_from_local_date_string(p);
|
||||
xact->_date_eff = parse_datetime(p);
|
||||
}
|
||||
if (buf[0])
|
||||
xact->_date = ptime_from_local_date_string(buf);
|
||||
xact->_date = parse_datetime(buf);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -623,7 +623,7 @@ unsigned int textual_parser_t::parse(std::istream& in,
|
|||
|
||||
time_entry_t event;
|
||||
event.desc = n ? n : "";
|
||||
event.checkin = ptime_from_local_time_string(date);
|
||||
event.checkin = parse_datetime(date);
|
||||
event.account = account_stack.front()->find_account(p);
|
||||
|
||||
if (! time_entries.empty())
|
||||
|
|
@ -649,7 +649,7 @@ unsigned int textual_parser_t::parse(std::istream& in,
|
|||
char * n = next_element(p, true);
|
||||
|
||||
clock_out_from_timelog
|
||||
(ptime_from_local_time_string(date),
|
||||
(parse_datetime(date),
|
||||
p ? account_stack.front()->find_account(p) : NULL, n, journal);
|
||||
count++;
|
||||
}
|
||||
|
|
@ -686,11 +686,10 @@ unsigned int textual_parser_t::parse(std::istream& in,
|
|||
if (std::isdigit(time_field_ptr[0])) {
|
||||
symbol_and_price = next_element(time_field_ptr);
|
||||
if (! symbol_and_price) break;
|
||||
datetime = ptime_from_local_time_string(date_field + " " +
|
||||
time_field_ptr);
|
||||
datetime = parse_datetime(date_field + " " + time_field_ptr);
|
||||
} else {
|
||||
symbol_and_price = time_field_ptr;
|
||||
datetime = ptime_from_local_date_string(date_field);
|
||||
datetime = parse_datetime(date_field);
|
||||
}
|
||||
|
||||
std::string symbol;
|
||||
|
|
|
|||
88
times.cc
88
times.cc
|
|
@ -2,6 +2,92 @@
|
|||
|
||||
namespace ledger {
|
||||
|
||||
ptime now = boost::posix_time::second_clock::universal_time();
|
||||
ptime now = boost::posix_time::second_clock::universal_time();
|
||||
bool day_before_month = false;
|
||||
|
||||
ptime parse_datetime(std::istream& in)
|
||||
{
|
||||
#if 1
|
||||
return parse_abs_datetime(in);
|
||||
#else
|
||||
std::string word;
|
||||
|
||||
if (! in.good() || in.eof())
|
||||
return ptime();
|
||||
|
||||
in >> word;
|
||||
|
||||
// Grammar
|
||||
//
|
||||
// datetime: absdate [time]
|
||||
// | reldate
|
||||
// | datetime preposition
|
||||
//
|
||||
// reldate: NOW | TODAY | YESTERDAY | TOMORROW
|
||||
// | skip_or_quantity specifier
|
||||
//
|
||||
// skip_or_quantity: skip | quantity
|
||||
//
|
||||
// skip: LAST | NEXT
|
||||
//
|
||||
// quantity: INTEGER | CARDINAL
|
||||
//
|
||||
// specifier: DAY | WEEK | MONTH | QUARTER | YEAR | DECADE
|
||||
//
|
||||
// preposition: AGO | BACK
|
||||
// | BEFORE reldate
|
||||
// | SINCE/FROM reldate
|
||||
// | UNTIL reldate
|
||||
// | AFTER reldate
|
||||
|
||||
if (std::isdigit(word[0])) {
|
||||
// This could be any of a variety of formats:
|
||||
//
|
||||
// 20070702 [TIME]
|
||||
// 22072007T171940
|
||||
// 22072007T171940-0700
|
||||
// 2007-07-02 [TIME]
|
||||
// 2007/07/02 [TIME]
|
||||
// 2007.07.02 [TIME]
|
||||
// 2007-Jul-22 [TIME]
|
||||
// 07-22-2007 [TIME]
|
||||
// 07-22-07 [TIME]
|
||||
// 07/22/2007 [TIME]
|
||||
// 07/22/2007 [TIME]
|
||||
// 07.22.2007 [TIME]
|
||||
// 07.22.07 [TIME]
|
||||
// 22-07-2007 [TIME]
|
||||
// 22-07-07 [TIME]
|
||||
// 22/07/2007 [TIME]
|
||||
// 22/07/07 [TIME]
|
||||
// 22.07.2007 [TIME]
|
||||
// 22.07.07 [TIME]
|
||||
// 22 Jul 2007 [TIME]
|
||||
// 22 July 2007 [TIME]
|
||||
//
|
||||
// (NUMBER) (SPECIFIER)
|
||||
|
||||
} else {
|
||||
// If there is no starting digit, then it could be any of these:
|
||||
//
|
||||
// now
|
||||
// today
|
||||
// yesterday
|
||||
// tomorrow
|
||||
// (last|next) (week|month|quarter|year|decade)
|
||||
// (one|two|three|four|five|six|seven|eight|nine|ten) SPECIFIER
|
||||
// PREPOSITION DATE
|
||||
//
|
||||
// PREPOSITION = (from|after|before|since|until)
|
||||
// SPECIFIER = (weeks?|months?|quarters?|years?|decades?) (ago|back)
|
||||
//
|
||||
//
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
ptime datetime_range_from_stream(std::istream& in)
|
||||
{
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
64
times.h
64
times.h
|
|
@ -8,6 +8,9 @@
|
|||
|
||||
#include <ctime>
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
|
||||
#include "error.h"
|
||||
|
||||
namespace ledger {
|
||||
|
||||
|
|
@ -15,6 +18,12 @@ typedef boost::posix_time::ptime ptime;
|
|||
typedef boost::posix_time::seconds seconds;
|
||||
typedef ptime::time_duration_type time_duration;
|
||||
|
||||
class datetime_error : public error {
|
||||
public:
|
||||
datetime_error(const std::string& _reason) throw() : error(_reason) {}
|
||||
virtual ~datetime_error() throw() {}
|
||||
};
|
||||
|
||||
class interval_t
|
||||
{
|
||||
public:
|
||||
|
|
@ -31,6 +40,7 @@ public:
|
|||
void parse(std::istream& in) {}
|
||||
};
|
||||
|
||||
#if 0
|
||||
inline ptime ptime_local_to_utc(const ptime& when) {
|
||||
struct std::tm tm_gmt = to_tm(when);
|
||||
return boost::posix_time::from_time_t(std::mktime(&tm_gmt));
|
||||
|
|
@ -46,9 +56,63 @@ inline ptime ptime_from_local_date_string(const std::string& date_string) {
|
|||
inline ptime ptime_from_local_time_string(const std::string& time_string) {
|
||||
return ptime_local_to_utc(boost::posix_time::time_from_string(time_string));
|
||||
}
|
||||
#endif
|
||||
|
||||
ptime parse_datetime(std::istream& in);
|
||||
|
||||
inline ptime parse_datetime(const std::string& str) {
|
||||
std::istringstream instr(str);
|
||||
return parse_datetime(instr);
|
||||
}
|
||||
|
||||
extern ptime now;
|
||||
extern bool day_before_month;
|
||||
|
||||
struct intorchar
|
||||
{
|
||||
int ival;
|
||||
char * sval;
|
||||
|
||||
intorchar() : ival(-1), sval(NULL) {}
|
||||
intorchar(int val) : ival(val), sval(NULL) {}
|
||||
intorchar(char * val) : ival(-1), sval(NULL) {
|
||||
set_sval(val);
|
||||
}
|
||||
intorchar(const intorchar& o) : ival(o.ival), sval(NULL) {
|
||||
set_sval(o.sval);
|
||||
}
|
||||
|
||||
~intorchar() {
|
||||
clear_sval();
|
||||
}
|
||||
|
||||
intorchar& operator=(const intorchar& o) {
|
||||
if (&o == this)
|
||||
return *this;
|
||||
|
||||
ival = o.ival;
|
||||
set_sval(o.sval);
|
||||
}
|
||||
|
||||
private:
|
||||
void clear_sval() {
|
||||
if (sval) {
|
||||
delete[] sval;
|
||||
sval = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void set_sval(char * val) {
|
||||
clear_sval();
|
||||
if (val) {
|
||||
sval = new char[std::strlen(val) + 1];
|
||||
std::strcpy(sval, val);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
boost::posix_time::ptime parse_abs_datetime(std::istream& input);
|
||||
|
||||
#endif /* _TIMES_H */
|
||||
|
|
|
|||
|
|
@ -79,10 +79,10 @@ static void endElement(void *userData, const char *name)
|
|||
curr_entry = NULL;
|
||||
}
|
||||
else if (std::strcmp(name, "en:date") == 0) {
|
||||
curr_entry->_date = ptime_from_local_date_string(data);
|
||||
curr_entry->_date = parse_datetime(data);
|
||||
}
|
||||
else if (std::strcmp(name, "en:date_eff") == 0) {
|
||||
curr_entry->_date_eff = ptime_from_local_date_string(data);
|
||||
curr_entry->_date_eff = parse_datetime(data);
|
||||
}
|
||||
else if (std::strcmp(name, "en:code") == 0) {
|
||||
curr_entry->code = data;
|
||||
|
|
|
|||
223
ylwrap
Executable file
223
ylwrap
Executable file
|
|
@ -0,0 +1,223 @@
|
|||
#! /bin/sh
|
||||
# ylwrap - wrapper for lex/yacc invocations.
|
||||
|
||||
scriptversion=2005-05-14.22
|
||||
|
||||
# Copyright (C) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# Written by Tom Tromey <tromey@cygnus.com>.
|
||||
#
|
||||
# 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, 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, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
# 02110-1301, USA.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# This file is maintained in Automake, please report
|
||||
# bugs to <bug-automake@gnu.org> or send patches to
|
||||
# <automake-patches@gnu.org>.
|
||||
|
||||
case "$1" in
|
||||
'')
|
||||
echo "$0: No files given. Try \`$0 --help' for more information." 1>&2
|
||||
exit 1
|
||||
;;
|
||||
--basedir)
|
||||
basedir=$2
|
||||
shift 2
|
||||
;;
|
||||
-h|--h*)
|
||||
cat <<\EOF
|
||||
Usage: ylwrap [--help|--version] INPUT [OUTPUT DESIRED]... -- PROGRAM [ARGS]...
|
||||
|
||||
Wrapper for lex/yacc invocations, renaming files as desired.
|
||||
|
||||
INPUT is the input file
|
||||
OUTPUT is one file PROG generates
|
||||
DESIRED is the file we actually want instead of OUTPUT
|
||||
PROGRAM is program to run
|
||||
ARGS are passed to PROG
|
||||
|
||||
Any number of OUTPUT,DESIRED pairs may be used.
|
||||
|
||||
Report bugs to <bug-automake@gnu.org>.
|
||||
EOF
|
||||
exit $?
|
||||
;;
|
||||
-v|--v*)
|
||||
echo "ylwrap $scriptversion"
|
||||
exit $?
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
# The input.
|
||||
input="$1"
|
||||
shift
|
||||
case "$input" in
|
||||
[\\/]* | ?:[\\/]*)
|
||||
# Absolute path; do nothing.
|
||||
;;
|
||||
*)
|
||||
# Relative path. Make it absolute.
|
||||
input="`pwd`/$input"
|
||||
;;
|
||||
esac
|
||||
|
||||
pairlist=
|
||||
while test "$#" -ne 0; do
|
||||
if test "$1" = "--"; then
|
||||
shift
|
||||
break
|
||||
fi
|
||||
pairlist="$pairlist $1"
|
||||
shift
|
||||
done
|
||||
|
||||
# The program to run.
|
||||
prog="$1"
|
||||
shift
|
||||
# Make any relative path in $prog absolute.
|
||||
case "$prog" in
|
||||
[\\/]* | ?:[\\/]*) ;;
|
||||
*[\\/]*) prog="`pwd`/$prog" ;;
|
||||
esac
|
||||
|
||||
# FIXME: add hostname here for parallel makes that run commands on
|
||||
# other machines. But that might take us over the 14-char limit.
|
||||
dirname=ylwrap$$
|
||||
trap "cd `pwd`; rm -rf $dirname > /dev/null 2>&1" 1 2 3 15
|
||||
mkdir $dirname || exit 1
|
||||
|
||||
cd $dirname
|
||||
|
||||
case $# in
|
||||
0) $prog "$input" ;;
|
||||
*) $prog "$@" "$input" ;;
|
||||
esac
|
||||
ret=$?
|
||||
|
||||
if test $ret -eq 0; then
|
||||
set X $pairlist
|
||||
shift
|
||||
first=yes
|
||||
# Since DOS filename conventions don't allow two dots,
|
||||
# the DOS version of Bison writes out y_tab.c instead of y.tab.c
|
||||
# and y_tab.h instead of y.tab.h. Test to see if this is the case.
|
||||
y_tab_nodot="no"
|
||||
if test -f y_tab.c || test -f y_tab.h; then
|
||||
y_tab_nodot="yes"
|
||||
fi
|
||||
|
||||
# The directory holding the input.
|
||||
input_dir=`echo "$input" | sed -e 's,\([\\/]\)[^\\/]*$,\1,'`
|
||||
# Quote $INPUT_DIR so we can use it in a regexp.
|
||||
# FIXME: really we should care about more than `.' and `\'.
|
||||
input_rx=`echo "$input_dir" | sed 's,\\\\,\\\\\\\\,g;s,\\.,\\\\.,g'`
|
||||
|
||||
while test "$#" -ne 0; do
|
||||
from="$1"
|
||||
# Handle y_tab.c and y_tab.h output by DOS
|
||||
if test $y_tab_nodot = "yes"; then
|
||||
if test $from = "y.tab.c"; then
|
||||
from="y_tab.c"
|
||||
else
|
||||
if test $from = "y.tab.h"; then
|
||||
from="y_tab.h"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if test -f "$from"; then
|
||||
# If $2 is an absolute path name, then just use that,
|
||||
# otherwise prepend `../'.
|
||||
case "$2" in
|
||||
[\\/]* | ?:[\\/]*) target="$2";;
|
||||
*) target="../$2";;
|
||||
esac
|
||||
|
||||
# We do not want to overwrite a header file if it hasn't
|
||||
# changed. This avoid useless recompilations. However the
|
||||
# parser itself (the first file) should always be updated,
|
||||
# because it is the destination of the .y.c rule in the
|
||||
# Makefile. Divert the output of all other files to a temporary
|
||||
# file so we can compare them to existing versions.
|
||||
if test $first = no; then
|
||||
realtarget="$target"
|
||||
target="tmp-`echo $target | sed s/.*[\\/]//g`"
|
||||
fi
|
||||
# Edit out `#line' or `#' directives.
|
||||
#
|
||||
# We don't want the resulting debug information to point at
|
||||
# an absolute srcdir; it is better for it to just mention the
|
||||
# .y file with no path.
|
||||
#
|
||||
# We want to use the real output file name, not yy.lex.c for
|
||||
# instance.
|
||||
#
|
||||
# We want the include guards to be adjusted too.
|
||||
FROM=`echo "$from" | sed \
|
||||
-e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
|
||||
-e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`
|
||||
TARGET=`echo "$2" | sed \
|
||||
-e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
|
||||
-e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`
|
||||
|
||||
sed -e "/^#/!b" -e "s,$input_rx,," -e "s,$from,$2," \
|
||||
-e "s,$FROM,$TARGET," "$from" >"$target" || ret=$?
|
||||
|
||||
# Check whether header files must be updated.
|
||||
if test $first = no; then
|
||||
if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then
|
||||
echo "$2" is unchanged
|
||||
rm -f "$target"
|
||||
else
|
||||
echo updating "$2"
|
||||
mv -f "$target" "$realtarget"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
# A missing file is only an error for the first file. This
|
||||
# is a blatant hack to let us support using "yacc -d". If -d
|
||||
# is not specified, we don't want an error when the header
|
||||
# file is "missing".
|
||||
if test $first = yes; then
|
||||
ret=1
|
||||
fi
|
||||
fi
|
||||
shift
|
||||
shift
|
||||
first=no
|
||||
done
|
||||
else
|
||||
ret=$?
|
||||
fi
|
||||
|
||||
# Remove the directory.
|
||||
cd ..
|
||||
rm -rf $dirname
|
||||
|
||||
exit $ret
|
||||
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-end: "$"
|
||||
# End:
|
||||
Loading…
Add table
Reference in a new issue