📄 txml_ini_adapter.cpp
字号:
// Copyright E骾n O'Callaghan 2008 - 2008.
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
#include "wtl_app.hpp"
#include "logger.hpp"
#include "string_conv.hpp"
#include <iterator>
#include <strstream>
#include <boost/format.hpp>
#include "txml_ini_adapter.hpp"
#include "txml.hpp"
#include "unicode.hpp"
namespace aux
{
xml::node* txml_ini_adapter::get_load_data_node()
{
xml::node* data_node = 0;
std::vector<boost::filesystem::path>::const_iterator
i = locations_.begin(), e = locations_.end();
while (i!=e && !data_node)
{
data_node = ini_.load(*i);
++i;
}
return data_node;
}
bool txml_ini_adapter::load_stream_data(std::ostream& data)
{
xml::node* data_node = get_load_data_node();
if (data_node)
{
xml::document doc;
doc.parse("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?><!DOCTYPE boost_serialization>");
doc.link_end_child(data_node);
data << doc;
return true;
}
return false;
}
void txml_ini_adapter::save_stream_data(std::istream& data)
{
aux::wlog() << boost::wformat(L"Ini Adapter Saving; %1%") % to_wstr_shim(locations_.front().string());
xml::document doc;
data >> doc;
xml::node* data_node = doc.root_element();
aux::wlog() << L"Data streamed";
bool ret = ini_.save(locations_.front(), data_node->clone());
aux::wlog() << boost::wformat(L" - save %1%") % (ret ? L"successful" : L"failed");
}
bool txml_ini_adapter::load_stream_data(std::wostream& data)
{
xml::node* data_node = get_load_data_node();
if (data_node)
{
xml::document doc;
doc.parse("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>");
doc.link_end_child(data_node);
std::stringstream str;
str << doc;
unicode::transcode<unicode::utf8, unicode::wchar_encoding>(
std::istreambuf_iterator<char> (str),
std::istreambuf_iterator<char> (),
std::ostreambuf_iterator<wchar_t> (data)
);
return true;
}
return false;
}
void txml_ini_adapter::save_stream_data(std::wistream& data)
{
std::stringstream sstr;
unicode::transcode<unicode::wchar_encoding, unicode::utf8>(
std::istreambuf_iterator<wchar_t> (data),
std::istreambuf_iterator<wchar_t> (),
std::ostreambuf_iterator<char> (sstr)
);
xml::document doc;
sstr >> doc;
xml::node* data_node = doc.root_element();
ini_.save(locations_.front(), data_node->clone());
}
} // namespace aux
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -