Added files
This commit is contained in:
parent
3e0f510b29
commit
c866e386be
3 changed files with 148 additions and 1 deletions
|
|
@ -1 +0,0 @@
|
|||
|
||||
67
src/jbuilder.cc
Normal file
67
src/jbuilder.cc
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
/*
|
||||
* Copyright (c) 2003-2007, John Wiegley. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* - Neither the name of New Artisans LLC nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "jbuilder.h"
|
||||
#include "compile.h"
|
||||
|
||||
namespace ledger {
|
||||
namespace xml {
|
||||
|
||||
void journal_builder_t::begin_node(const node_t::nameid_t name_id,
|
||||
bool terminal)
|
||||
{
|
||||
switch (name_id) {
|
||||
case JOURNAL_NODE:
|
||||
current = current->as_parent_node().create_child<journal_node_t>(name_id);
|
||||
break;
|
||||
case ENTRY_NODE:
|
||||
current = current->as_parent_node().create_child<entry_node_t>(name_id);
|
||||
break;
|
||||
case TRANSACTION_NODE:
|
||||
current = current->as_parent_node().create_child<transaction_node_t>(name_id);
|
||||
break;
|
||||
|
||||
default:
|
||||
if (terminal)
|
||||
current = current->as_parent_node().create_child<terminal_node_t>(name_id);
|
||||
else
|
||||
current = current->as_parent_node().create_child<parent_node_t>(name_id);
|
||||
break;
|
||||
}
|
||||
|
||||
foreach (const attrs_list::value_type& pair, current_attrs)
|
||||
current->set_attr(pair.first, pair.second.c_str());
|
||||
|
||||
current_attrs.clear();
|
||||
}
|
||||
|
||||
} // namespace xml
|
||||
} // namespace ledger
|
||||
81
src/jbuilder.h
Normal file
81
src/jbuilder.h
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
/*
|
||||
* Copyright (c) 2003-2007, John Wiegley. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* - Neither the name of New Artisans LLC nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _JBUILDER_H
|
||||
#define _JBUILDER_H
|
||||
|
||||
#include "builder.h"
|
||||
#include "journal.h"
|
||||
|
||||
namespace ledger {
|
||||
namespace xml {
|
||||
|
||||
/**
|
||||
* @class journal_builder_t
|
||||
*
|
||||
* @brief This custom builder creates an XML-mirrored Ledger journal.
|
||||
*
|
||||
* Rather than simply creating a node_t hierarchy, as xml_builder_t
|
||||
* does, this code creates the associated journal elements referred to
|
||||
* by those nodes, and then refers to those elements via minimalist
|
||||
* "shadow nodes".
|
||||
*
|
||||
* Thus, after building a <transaction> element, the element itself
|
||||
* will have no children, but instead will point to a transaction_t
|
||||
* object. If later an XPath expression desires to traverse the
|
||||
* <transaction> element, all of the appropriate child nodes will be
|
||||
* constructed on the fly, as if they'd been created in the first
|
||||
* place by a regular xml_builder_t.
|
||||
*/
|
||||
class journal_builder_t : public document_builder_t
|
||||
{
|
||||
public:
|
||||
journal_t * journal;
|
||||
|
||||
journal_builder_t(document_t& _document, journal_t * _journal)
|
||||
: document_builder_t(_document), journal(_journal) {}
|
||||
|
||||
virtual void set_start_position(std::istream& in) {
|
||||
set_position(position_t(in.tellg(), 1));
|
||||
}
|
||||
|
||||
virtual void set_position(const position_t& position) {
|
||||
current_position = position;
|
||||
}
|
||||
|
||||
virtual void begin_node(const node_t::nameid_t name_id,
|
||||
bool terminal = false);
|
||||
};
|
||||
|
||||
} // namespace xml
|
||||
} // namespace ledger
|
||||
|
||||
#endif // _JBUILDER_H
|
||||
Loading…
Add table
Reference in a new issue