2.0.0-rc (#9)
Some checks failed
BlockStorage/repertory_osx/pipeline/head This commit looks good
BlockStorage/repertory_windows/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head There was a failure building this commit
BlockStorage/repertory_linux_builds/pipeline/head This commit looks good
BlockStorage/repertory_osx_builds/pipeline/head There was a failure building this commit
Some checks failed
BlockStorage/repertory_osx/pipeline/head This commit looks good
BlockStorage/repertory_windows/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head There was a failure building this commit
BlockStorage/repertory_linux_builds/pipeline/head This commit looks good
BlockStorage/repertory_osx_builds/pipeline/head There was a failure building this commit
### Issues * \#1 \[bug\] Unable to mount S3 due to 'item_not_found' exception * \#2 Require bucket name for S3 mounts * \#3 \[bug\] File size is not being updated in S3 mount * \#4 Upgrade to libfuse-3.x.x * \#5 Switch to renterd for Sia support * \#6 Switch to cpp-httplib to further reduce dependencies * \#7 Remove global_data and calculate used disk space per provider * \#8 Switch to libcurl for S3 mount support ### Changes from v1.x.x * Added read-only encrypt provider * Pass-through mount point that transparently encrypts source data using `XChaCha20-Poly1305` * Added S3 encryption support via `XChaCha20-Poly1305` * Added replay protection to remote mounts * Added support base64 writes in remote FUSE * Created static linked Linux binaries for `amd64` and `aarch64` using `musl-libc` * Removed legacy Sia renter support * Removed Skynet support * Fixed multiple remote mount WinFSP API issues on \*NIX servers * Implemented chunked read and write * Writes for non-cached files are performed in chunks of 8Mib * Removed `repertory-ui` support * Removed `FreeBSD` support * Switched to `libsodium` over `CryptoPP` * Switched to `XChaCha20-Poly1305` for remote mounts * Updated `GoogleTest` to v1.14.0 * Updated `JSON for Modern C++` to v3.11.2 * Updated `OpenSSL` to v1.1.1w * Updated `RocksDB` to v8.5.3 * Updated `WinFSP` to 2023 * Updated `boost` to v1.78.0 * Updated `cURL` to v8.3.0 * Updated `zlib` to v1.3 * Use `upload_manager` for all providers * Adds a delay to uploads to prevent excessive API calls * Supports re-upload after mount restart for incomplete uploads * NOTE: Uploads for all providers are full file (no resume support) * Multipart upload support is planned for S3 Reviewed-on: #9
This commit is contained in:
8
3rd_party/pugixml/docs/samples/character.xml
vendored
Normal file
8
3rd_party/pugixml/docs/samples/character.xml
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0"?>
|
||||
<network>
|
||||
<animation clip="idle" flags="loop" />
|
||||
<animation clip="run" flags="loop" />
|
||||
<animation clip="attack" />
|
||||
|
||||
<?include transitions.xml?>
|
||||
</network>
|
27
3rd_party/pugixml/docs/samples/custom_memory_management.cpp
vendored
Normal file
27
3rd_party/pugixml/docs/samples/custom_memory_management.cpp
vendored
Normal file
@ -0,0 +1,27 @@
|
||||
#include "pugixml.hpp"
|
||||
|
||||
#include <new>
|
||||
|
||||
// tag::decl[]
|
||||
void* custom_allocate(size_t size)
|
||||
{
|
||||
return new (std::nothrow) char[size];
|
||||
}
|
||||
|
||||
void custom_deallocate(void* ptr)
|
||||
{
|
||||
delete[] static_cast<char*>(ptr);
|
||||
}
|
||||
// end::decl[]
|
||||
|
||||
int main()
|
||||
{
|
||||
// tag::call[]
|
||||
pugi::set_memory_management_functions(custom_allocate, custom_deallocate);
|
||||
// end::call[]
|
||||
|
||||
pugi::xml_document doc;
|
||||
doc.load_string("<node/>");
|
||||
}
|
||||
|
||||
// vim:et
|
64
3rd_party/pugixml/docs/samples/include.cpp
vendored
Normal file
64
3rd_party/pugixml/docs/samples/include.cpp
vendored
Normal file
@ -0,0 +1,64 @@
|
||||
#include "pugixml.hpp"
|
||||
|
||||
#include <string.h>
|
||||
#include <iostream>
|
||||
|
||||
// tag::code[]
|
||||
bool load_preprocess(pugi::xml_document& doc, const char* path);
|
||||
|
||||
bool preprocess(pugi::xml_node node)
|
||||
{
|
||||
for (pugi::xml_node child = node.first_child(); child; )
|
||||
{
|
||||
if (child.type() == pugi::node_pi && strcmp(child.name(), "include") == 0)
|
||||
{
|
||||
pugi::xml_node include = child;
|
||||
|
||||
// load new preprocessed document (note: ideally this should handle relative paths)
|
||||
const char* path = include.value();
|
||||
|
||||
pugi::xml_document doc;
|
||||
if (!load_preprocess(doc, path)) return false;
|
||||
|
||||
// insert the comment marker above include directive
|
||||
node.insert_child_before(pugi::node_comment, include).set_value(path);
|
||||
|
||||
// copy the document above the include directive (this retains the original order!)
|
||||
for (pugi::xml_node ic = doc.first_child(); ic; ic = ic.next_sibling())
|
||||
{
|
||||
node.insert_copy_before(ic, include);
|
||||
}
|
||||
|
||||
// remove the include node and move to the next child
|
||||
child = child.next_sibling();
|
||||
|
||||
node.remove_child(include);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!preprocess(child)) return false;
|
||||
|
||||
child = child.next_sibling();
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool load_preprocess(pugi::xml_document& doc, const char* path)
|
||||
{
|
||||
pugi::xml_parse_result result = doc.load_file(path, pugi::parse_default | pugi::parse_pi); // for <?include?>
|
||||
|
||||
return result ? preprocess(doc) : false;
|
||||
}
|
||||
// end::code[]
|
||||
|
||||
int main()
|
||||
{
|
||||
pugi::xml_document doc;
|
||||
if (!load_preprocess(doc, "character.xml")) return -1;
|
||||
|
||||
doc.print(std::cout);
|
||||
}
|
||||
|
||||
// vim:et
|
33
3rd_party/pugixml/docs/samples/load_error_handling.cpp
vendored
Normal file
33
3rd_party/pugixml/docs/samples/load_error_handling.cpp
vendored
Normal file
@ -0,0 +1,33 @@
|
||||
#include "pugixml.hpp"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
void check_xml(const char* source)
|
||||
{
|
||||
// tag::code[]
|
||||
pugi::xml_document doc;
|
||||
pugi::xml_parse_result result = doc.load_string(source);
|
||||
|
||||
if (result)
|
||||
{
|
||||
std::cout << "XML [" << source << "] parsed without errors, attr value: [" << doc.child("node").attribute("attr").value() << "]\n\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cout << "XML [" << source << "] parsed with errors, attr value: [" << doc.child("node").attribute("attr").value() << "]\n";
|
||||
std::cout << "Error description: " << result.description() << "\n";
|
||||
std::cout << "Error offset: " << result.offset << " (error at [..." << (source + result.offset) << "]\n\n";
|
||||
}
|
||||
// end::code[]
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
check_xml("<node attr='value'><child>text</child></node>");
|
||||
check_xml("<node attr='value'><child>text</chil></node>");
|
||||
check_xml("<node attr='value'><child>text</child>");
|
||||
check_xml("<node attr='value\"><child>text</child></node>");
|
||||
check_xml("<node attr='value'><#tag /></node>");
|
||||
}
|
||||
|
||||
// vim:et
|
16
3rd_party/pugixml/docs/samples/load_file.cpp
vendored
Normal file
16
3rd_party/pugixml/docs/samples/load_file.cpp
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
#include "pugixml.hpp"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
int main()
|
||||
{
|
||||
// tag::code[]
|
||||
pugi::xml_document doc;
|
||||
|
||||
pugi::xml_parse_result result = doc.load_file("tree.xml");
|
||||
|
||||
std::cout << "Load result: " << result.description() << ", mesh name: " << doc.child("mesh").attribute("name").value() << std::endl;
|
||||
// end::code[]
|
||||
}
|
||||
|
||||
// vim:et
|
66
3rd_party/pugixml/docs/samples/load_memory.cpp
vendored
Normal file
66
3rd_party/pugixml/docs/samples/load_memory.cpp
vendored
Normal file
@ -0,0 +1,66 @@
|
||||
#include "pugixml.hpp"
|
||||
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
|
||||
int main()
|
||||
{
|
||||
// tag::decl[]
|
||||
const char source[] = "<mesh name='sphere'><bounds>0 0 1 1</bounds></mesh>";
|
||||
size_t size = sizeof(source);
|
||||
// end::decl[]
|
||||
|
||||
pugi::xml_document doc;
|
||||
|
||||
{
|
||||
// tag::load_buffer[]
|
||||
// You can use load_buffer to load document from immutable memory block:
|
||||
pugi::xml_parse_result result = doc.load_buffer(source, size);
|
||||
// end::load_buffer[]
|
||||
|
||||
std::cout << "Load result: " << result.description() << ", mesh name: " << doc.child("mesh").attribute("name").value() << std::endl;
|
||||
}
|
||||
|
||||
{
|
||||
// tag::load_buffer_inplace_begin[]
|
||||
// You can use load_buffer_inplace to load document from mutable memory block; the block's lifetime must exceed that of document
|
||||
char* buffer = new char[size];
|
||||
memcpy(buffer, source, size);
|
||||
|
||||
// The block can be allocated by any method; the block is modified during parsing
|
||||
pugi::xml_parse_result result = doc.load_buffer_inplace(buffer, size);
|
||||
// end::load_buffer_inplace_begin[]
|
||||
|
||||
std::cout << "Load result: " << result.description() << ", mesh name: " << doc.child("mesh").attribute("name").value() << std::endl;
|
||||
|
||||
// tag::load_buffer_inplace_end[]
|
||||
// You have to destroy the block yourself after the document is no longer used
|
||||
delete[] buffer;
|
||||
// end::load_buffer_inplace_end[]
|
||||
}
|
||||
|
||||
{
|
||||
// tag::load_buffer_inplace_own[]
|
||||
// You can use load_buffer_inplace_own to load document from mutable memory block and to pass the ownership of this block
|
||||
// The block has to be allocated via pugixml allocation function - using i.e. operator new here is incorrect
|
||||
char* buffer = static_cast<char*>(pugi::get_memory_allocation_function()(size));
|
||||
memcpy(buffer, source, size);
|
||||
|
||||
// The block will be deleted by the document
|
||||
pugi::xml_parse_result result = doc.load_buffer_inplace_own(buffer, size);
|
||||
// end::load_buffer_inplace_own[]
|
||||
|
||||
std::cout << "Load result: " << result.description() << ", mesh name: " << doc.child("mesh").attribute("name").value() << std::endl;
|
||||
}
|
||||
|
||||
{
|
||||
// tag::load_string[]
|
||||
// You can use load to load document from null-terminated strings, for example literals:
|
||||
pugi::xml_parse_result result = doc.load_string("<mesh name='sphere'><bounds>0 0 1 1</bounds></mesh>");
|
||||
// end::load_string[]
|
||||
|
||||
std::cout << "Load result: " << result.description() << ", mesh name: " << doc.child("mesh").attribute("name").value() << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
// vim:et
|
30
3rd_party/pugixml/docs/samples/load_options.cpp
vendored
Normal file
30
3rd_party/pugixml/docs/samples/load_options.cpp
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
#include "pugixml.hpp"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
int main()
|
||||
{
|
||||
pugi::xml_document doc;
|
||||
|
||||
// tag::code[]
|
||||
const char* source = "<!--comment--><node><</node>";
|
||||
|
||||
// Parsing with default options; note that comment node is not added to the tree, and entity reference < is expanded
|
||||
doc.load_string(source);
|
||||
std::cout << "First node value: [" << doc.first_child().value() << "], node child value: [" << doc.child_value("node") << "]\n";
|
||||
|
||||
// Parsing with additional parse_comments option; comment node is now added to the tree
|
||||
doc.load_string(source, pugi::parse_default | pugi::parse_comments);
|
||||
std::cout << "First node value: [" << doc.first_child().value() << "], node child value: [" << doc.child_value("node") << "]\n";
|
||||
|
||||
// Parsing with additional parse_comments option and without the (default) parse_escapes option; < is not expanded
|
||||
doc.load_string(source, (pugi::parse_default | pugi::parse_comments) & ~pugi::parse_escapes);
|
||||
std::cout << "First node value: [" << doc.first_child().value() << "], node child value: [" << doc.child_value("node") << "]\n";
|
||||
|
||||
// Parsing with minimal option mask; comment node is not added to the tree, and < is not expanded
|
||||
doc.load_string(source, pugi::parse_minimal);
|
||||
std::cout << "First node value: [" << doc.first_child().value() << "], node child value: [" << doc.child_value("node") << "]\n";
|
||||
// end::code[]
|
||||
}
|
||||
|
||||
// vim:et
|
97
3rd_party/pugixml/docs/samples/load_stream.cpp
vendored
Normal file
97
3rd_party/pugixml/docs/samples/load_stream.cpp
vendored
Normal file
@ -0,0 +1,97 @@
|
||||
#include "pugixml.hpp"
|
||||
|
||||
#include <fstream>
|
||||
#include <iomanip>
|
||||
#include <iostream>
|
||||
|
||||
void print_doc(const char* message, const pugi::xml_document& doc, const pugi::xml_parse_result& result)
|
||||
{
|
||||
std::cout
|
||||
<< message
|
||||
<< "\t: load result '" << result.description() << "'"
|
||||
<< ", first character of root name: U+" << std::hex << std::uppercase << std::setw(4) << std::setfill('0') << pugi::as_wide(doc.first_child().name())[0]
|
||||
<< ", year: " << doc.first_child().first_child().first_child().child_value()
|
||||
<< std::endl;
|
||||
}
|
||||
|
||||
bool try_imbue(std::wistream& stream, const char* name)
|
||||
{
|
||||
try
|
||||
{
|
||||
stream.imbue(std::locale(name));
|
||||
|
||||
return true;
|
||||
}
|
||||
catch (const std::exception&)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
pugi::xml_document doc;
|
||||
|
||||
{
|
||||
// tag::code[]
|
||||
std::ifstream stream("weekly-utf-8.xml");
|
||||
pugi::xml_parse_result result = doc.load(stream);
|
||||
// end::code[]
|
||||
|
||||
// first character of root name: U+9031, year: 1997
|
||||
print_doc("UTF8 file from narrow stream", doc, result);
|
||||
}
|
||||
|
||||
{
|
||||
std::ifstream stream("weekly-utf-16.xml");
|
||||
pugi::xml_parse_result result = doc.load(stream);
|
||||
|
||||
// first character of root name: U+9031, year: 1997
|
||||
print_doc("UTF16 file from narrow stream", doc, result);
|
||||
}
|
||||
|
||||
{
|
||||
// Since wide streams are treated as UTF-16/32 ones, you can't load the UTF-8 file from a wide stream
|
||||
// directly if you have localized characters; you'll have to provide a UTF8 locale (there is no
|
||||
// standard one; you can use utf8_codecvt_facet from Boost or codecvt_utf8 from C++0x)
|
||||
std::wifstream stream("weekly-utf-8.xml");
|
||||
|
||||
if (try_imbue(stream, "en_US.UTF-8")) // try Linux encoding
|
||||
{
|
||||
pugi::xml_parse_result result = doc.load(stream);
|
||||
|
||||
// first character of root name: U+00E9, year: 1997
|
||||
print_doc("UTF8 file from wide stream", doc, result);
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cout << "UTF-8 locale is not available\n";
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
// Since wide streams are treated as UTF-16/32 ones, you can't load the UTF-16 file from a wide stream without
|
||||
// using custom codecvt; you can use codecvt_utf16 from C++0x
|
||||
}
|
||||
|
||||
{
|
||||
// Since encoding names are non-standard, you can't load the Shift-JIS (or any other non-ASCII) file
|
||||
// from a wide stream portably
|
||||
std::wifstream stream("weekly-shift_jis.xml");
|
||||
|
||||
if (try_imbue(stream, ".932") || // try Microsoft encoding
|
||||
try_imbue(stream, "ja_JP.SJIS")) // try Linux encoding; run "localedef -i ja_JP -c -f SHIFT_JIS /usr/lib/locale/ja_JP.SJIS" to get it
|
||||
{
|
||||
pugi::xml_parse_result result = doc.load(stream);
|
||||
|
||||
// first character of root name: U+9031, year: 1997
|
||||
print_doc("Shift-JIS file from wide stream", doc, result);
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cout << "Shift-JIS locale is not available\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// vim:et
|
29
3rd_party/pugixml/docs/samples/modify_add.cpp
vendored
Normal file
29
3rd_party/pugixml/docs/samples/modify_add.cpp
vendored
Normal file
@ -0,0 +1,29 @@
|
||||
#include "pugixml.hpp"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
int main()
|
||||
{
|
||||
pugi::xml_document doc;
|
||||
|
||||
// tag::code[]
|
||||
// add node with some name
|
||||
pugi::xml_node node = doc.append_child("node");
|
||||
|
||||
// add description node with text child
|
||||
pugi::xml_node descr = node.append_child("description");
|
||||
descr.append_child(pugi::node_pcdata).set_value("Simple node");
|
||||
|
||||
// add param node before the description
|
||||
pugi::xml_node param = node.insert_child_before("param", descr);
|
||||
|
||||
// add attributes to param node
|
||||
param.append_attribute("name") = "version";
|
||||
param.append_attribute("value") = 1.1;
|
||||
param.insert_attribute_after("type", param.attribute("name")) = "float";
|
||||
// end::code[]
|
||||
|
||||
doc.print(std::cout);
|
||||
}
|
||||
|
||||
// vim:et
|
43
3rd_party/pugixml/docs/samples/modify_base.cpp
vendored
Normal file
43
3rd_party/pugixml/docs/samples/modify_base.cpp
vendored
Normal file
@ -0,0 +1,43 @@
|
||||
#include "pugixml.hpp"
|
||||
|
||||
#include <string.h>
|
||||
#include <iostream>
|
||||
|
||||
int main()
|
||||
{
|
||||
pugi::xml_document doc;
|
||||
if (!doc.load_string("<node id='123'>text</node><!-- comment -->", pugi::parse_default | pugi::parse_comments)) return -1;
|
||||
|
||||
// tag::node[]
|
||||
pugi::xml_node node = doc.child("node");
|
||||
|
||||
// change node name
|
||||
std::cout << node.set_name("notnode");
|
||||
std::cout << ", new node name: " << node.name() << std::endl;
|
||||
|
||||
// change comment text
|
||||
std::cout << doc.last_child().set_value("useless comment");
|
||||
std::cout << ", new comment text: " << doc.last_child().value() << std::endl;
|
||||
|
||||
// we can't change value of the element or name of the comment
|
||||
std::cout << node.set_value("1") << ", " << doc.last_child().set_name("2") << std::endl;
|
||||
// end::node[]
|
||||
|
||||
// tag::attr[]
|
||||
pugi::xml_attribute attr = node.attribute("id");
|
||||
|
||||
// change attribute name/value
|
||||
std::cout << attr.set_name("key") << ", " << attr.set_value("345");
|
||||
std::cout << ", new attribute: " << attr.name() << "=" << attr.value() << std::endl;
|
||||
|
||||
// we can use numbers or booleans
|
||||
attr.set_value(1.234);
|
||||
std::cout << "new attribute value: " << attr.value() << std::endl;
|
||||
|
||||
// we can also use assignment operators for more concise code
|
||||
attr = true;
|
||||
std::cout << "final attribute value: " << attr.value() << std::endl;
|
||||
// end::attr[]
|
||||
}
|
||||
|
||||
// vim:et
|
27
3rd_party/pugixml/docs/samples/modify_remove.cpp
vendored
Normal file
27
3rd_party/pugixml/docs/samples/modify_remove.cpp
vendored
Normal file
@ -0,0 +1,27 @@
|
||||
#include "pugixml.hpp"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
int main()
|
||||
{
|
||||
pugi::xml_document doc;
|
||||
if (!doc.load_string("<node><description>Simple node</description><param name='id' value='123'/></node>")) return -1;
|
||||
|
||||
// tag::code[]
|
||||
// remove description node with the whole subtree
|
||||
pugi::xml_node node = doc.child("node");
|
||||
node.remove_child("description");
|
||||
|
||||
// remove id attribute
|
||||
pugi::xml_node param = node.child("param");
|
||||
param.remove_attribute("value");
|
||||
|
||||
// we can also remove nodes/attributes by handles
|
||||
pugi::xml_attribute id = param.attribute("name");
|
||||
param.remove_attribute(id);
|
||||
// end::code[]
|
||||
|
||||
doc.print(std::cout);
|
||||
}
|
||||
|
||||
// vim:et
|
116
3rd_party/pugixml/docs/samples/save_custom_writer.cpp
vendored
Normal file
116
3rd_party/pugixml/docs/samples/save_custom_writer.cpp
vendored
Normal file
@ -0,0 +1,116 @@
|
||||
#include "pugixml.hpp"
|
||||
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
|
||||
// tag::code[]
|
||||
struct xml_string_writer: pugi::xml_writer
|
||||
{
|
||||
std::string result;
|
||||
|
||||
virtual void write(const void* data, size_t size)
|
||||
{
|
||||
result.append(static_cast<const char*>(data), size);
|
||||
}
|
||||
};
|
||||
// end::code[]
|
||||
|
||||
struct xml_memory_writer: pugi::xml_writer
|
||||
{
|
||||
char* buffer;
|
||||
size_t capacity;
|
||||
|
||||
size_t result;
|
||||
|
||||
xml_memory_writer(): buffer(0), capacity(0), result(0)
|
||||
{
|
||||
}
|
||||
|
||||
xml_memory_writer(char* buffer, size_t capacity): buffer(buffer), capacity(capacity), result(0)
|
||||
{
|
||||
}
|
||||
|
||||
size_t written_size() const
|
||||
{
|
||||
return result < capacity ? result : capacity;
|
||||
}
|
||||
|
||||
virtual void write(const void* data, size_t size)
|
||||
{
|
||||
if (result < capacity)
|
||||
{
|
||||
size_t chunk = (capacity - result < size) ? capacity - result : size;
|
||||
|
||||
memcpy(buffer + result, data, chunk);
|
||||
}
|
||||
|
||||
result += size;
|
||||
}
|
||||
};
|
||||
|
||||
std::string node_to_string(pugi::xml_node node)
|
||||
{
|
||||
xml_string_writer writer;
|
||||
node.print(writer);
|
||||
|
||||
return writer.result;
|
||||
}
|
||||
|
||||
char* node_to_buffer(pugi::xml_node node, char* buffer, size_t size)
|
||||
{
|
||||
if (size == 0) return buffer;
|
||||
|
||||
// leave one character for null terminator
|
||||
xml_memory_writer writer(buffer, size - 1);
|
||||
node.print(writer);
|
||||
|
||||
// null terminate
|
||||
buffer[writer.written_size()] = 0;
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
char* node_to_buffer_heap(pugi::xml_node node)
|
||||
{
|
||||
// first pass: get required memory size
|
||||
xml_memory_writer counter;
|
||||
node.print(counter);
|
||||
|
||||
// allocate necessary size (+1 for null termination)
|
||||
char* buffer = new char[counter.result + 1];
|
||||
|
||||
// second pass: actual printing
|
||||
xml_memory_writer writer(buffer, counter.result);
|
||||
node.print(writer);
|
||||
|
||||
// null terminate
|
||||
buffer[writer.written_size()] = 0;
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
// get a test document
|
||||
pugi::xml_document doc;
|
||||
doc.load_string("<foo bar='baz'>hey</foo>");
|
||||
|
||||
// get contents as std::string (single pass)
|
||||
std::cout << "contents: [" << node_to_string(doc) << "]\n";
|
||||
|
||||
// get contents into fixed-size buffer (single pass)
|
||||
char large_buf[128];
|
||||
std::cout << "contents: [" << node_to_buffer(doc, large_buf, sizeof(large_buf)) << "]\n";
|
||||
|
||||
// get contents into fixed-size buffer (single pass, shows truncating behavior)
|
||||
char small_buf[22];
|
||||
std::cout << "contents: [" << node_to_buffer(doc, small_buf, sizeof(small_buf)) << "]\n";
|
||||
|
||||
// get contents into heap-allocated buffer (two passes)
|
||||
char* heap_buf = node_to_buffer_heap(doc);
|
||||
std::cout << "contents: [" << heap_buf << "]\n";
|
||||
delete[] heap_buf;
|
||||
}
|
||||
|
||||
// vim:et
|
27
3rd_party/pugixml/docs/samples/save_declaration.cpp
vendored
Normal file
27
3rd_party/pugixml/docs/samples/save_declaration.cpp
vendored
Normal file
@ -0,0 +1,27 @@
|
||||
#include "pugixml.hpp"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
int main()
|
||||
{
|
||||
// tag::code[]
|
||||
// get a test document
|
||||
pugi::xml_document doc;
|
||||
doc.load_string("<foo bar='baz'><call>hey</call></foo>");
|
||||
|
||||
// add a custom declaration node
|
||||
pugi::xml_node decl = doc.prepend_child(pugi::node_declaration);
|
||||
decl.append_attribute("version") = "1.0";
|
||||
decl.append_attribute("encoding") = "UTF-8";
|
||||
decl.append_attribute("standalone") = "no";
|
||||
|
||||
// <?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
// <foo bar="baz">
|
||||
// <call>hey</call>
|
||||
// </foo>
|
||||
doc.save(std::cout);
|
||||
std::cout << std::endl;
|
||||
// end::code[]
|
||||
}
|
||||
|
||||
// vim:et
|
17
3rd_party/pugixml/docs/samples/save_file.cpp
vendored
Normal file
17
3rd_party/pugixml/docs/samples/save_file.cpp
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
#include "pugixml.hpp"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
int main()
|
||||
{
|
||||
// get a test document
|
||||
pugi::xml_document doc;
|
||||
doc.load_string("<foo bar='baz'>hey</foo>");
|
||||
|
||||
// tag::code[]
|
||||
// save document to file
|
||||
std::cout << "Saving result: " << doc.save_file("save_file_output.xml") << std::endl;
|
||||
// end::code[]
|
||||
}
|
||||
|
||||
// vim:et
|
48
3rd_party/pugixml/docs/samples/save_options.cpp
vendored
Normal file
48
3rd_party/pugixml/docs/samples/save_options.cpp
vendored
Normal file
@ -0,0 +1,48 @@
|
||||
#include "pugixml.hpp"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
int main()
|
||||
{
|
||||
// tag::code[]
|
||||
// get a test document
|
||||
pugi::xml_document doc;
|
||||
doc.load_string("<foo bar='baz'><call>hey</call></foo>");
|
||||
|
||||
// default options; prints
|
||||
// <?xml version="1.0"?>
|
||||
// <foo bar="baz">
|
||||
// <call>hey</call>
|
||||
// </foo>
|
||||
doc.save(std::cout);
|
||||
std::cout << std::endl;
|
||||
|
||||
// default options with custom indentation string; prints
|
||||
// <?xml version="1.0"?>
|
||||
// <foo bar="baz">
|
||||
// --<call>hey</call>
|
||||
// </foo>
|
||||
doc.save(std::cout, "--");
|
||||
std::cout << std::endl;
|
||||
|
||||
// default options without indentation; prints
|
||||
// <?xml version="1.0"?>
|
||||
// <foo bar="baz">
|
||||
// <call>hey</call>
|
||||
// </foo>
|
||||
doc.save(std::cout, "\t", pugi::format_default & ~pugi::format_indent); // can also pass "" instead of indentation string for the same effect
|
||||
std::cout << std::endl;
|
||||
|
||||
// raw output; prints
|
||||
// <?xml version="1.0"?><foo bar="baz"><call>hey</call></foo>
|
||||
doc.save(std::cout, "\t", pugi::format_raw);
|
||||
std::cout << std::endl << std::endl;
|
||||
|
||||
// raw output without declaration; prints
|
||||
// <foo bar="baz"><call>hey</call></foo>
|
||||
doc.save(std::cout, "\t", pugi::format_raw | pugi::format_no_declaration);
|
||||
std::cout << std::endl;
|
||||
// end::code[]
|
||||
}
|
||||
|
||||
// vim:et
|
18
3rd_party/pugixml/docs/samples/save_stream.cpp
vendored
Normal file
18
3rd_party/pugixml/docs/samples/save_stream.cpp
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
#include "pugixml.hpp"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
int main()
|
||||
{
|
||||
// get a test document
|
||||
pugi::xml_document doc;
|
||||
doc.load_string("<foo bar='baz'><call>hey</call></foo>");
|
||||
|
||||
// tag::code[]
|
||||
// save document to standard output
|
||||
std::cout << "Document:\n";
|
||||
doc.save(std::cout);
|
||||
// end::code[]
|
||||
}
|
||||
|
||||
// vim:et
|
26
3rd_party/pugixml/docs/samples/save_subtree.cpp
vendored
Normal file
26
3rd_party/pugixml/docs/samples/save_subtree.cpp
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
#include "pugixml.hpp"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
int main()
|
||||
{
|
||||
// tag::code[]
|
||||
// get a test document
|
||||
pugi::xml_document doc;
|
||||
doc.load_string("<foo bar='baz'><call>hey</call></foo>");
|
||||
|
||||
// print document to standard output (prints <?xml version="1.0"?><foo bar="baz"><call>hey</call></foo>)
|
||||
doc.save(std::cout, "", pugi::format_raw);
|
||||
std::cout << std::endl;
|
||||
|
||||
// print document to standard output as a regular node (prints <foo bar="baz"><call>hey</call></foo>)
|
||||
doc.print(std::cout, "", pugi::format_raw);
|
||||
std::cout << std::endl;
|
||||
|
||||
// print a subtree to standard output (prints <call>hey</call>)
|
||||
doc.child("foo").child("call").print(std::cout, "", pugi::format_raw);
|
||||
std::cout << std::endl;
|
||||
// end::code[]
|
||||
}
|
||||
|
||||
// vim:et
|
35
3rd_party/pugixml/docs/samples/text.cpp
vendored
Normal file
35
3rd_party/pugixml/docs/samples/text.cpp
vendored
Normal file
@ -0,0 +1,35 @@
|
||||
#include "pugixml.hpp"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
int main()
|
||||
{
|
||||
pugi::xml_document doc;
|
||||
|
||||
// get a test document
|
||||
doc.load_string("<project><name>test</name><version>1.1</version><public>yes</public></project>");
|
||||
|
||||
pugi::xml_node project = doc.child("project");
|
||||
|
||||
// tag::access[]
|
||||
std::cout << "Project name: " << project.child("name").text().get() << std::endl;
|
||||
std::cout << "Project version: " << project.child("version").text().as_double() << std::endl;
|
||||
std::cout << "Project visibility: " << (project.child("public").text().as_bool(/* def= */ true) ? "public" : "private") << std::endl;
|
||||
std::cout << "Project description: " << project.child("description").text().get() << std::endl;
|
||||
// end::access[]
|
||||
|
||||
std::cout << std::endl;
|
||||
|
||||
// tag::modify[]
|
||||
// change project version
|
||||
project.child("version").text() = 1.2;
|
||||
|
||||
// add description element and set the contents
|
||||
// note that we do not have to explicitly add the node_pcdata child
|
||||
project.append_child("description").text().set("a test project");
|
||||
// end::modify[]
|
||||
|
||||
doc.save(std::cout);
|
||||
}
|
||||
|
||||
// vim:et
|
7
3rd_party/pugixml/docs/samples/transitions.xml
vendored
Normal file
7
3rd_party/pugixml/docs/samples/transitions.xml
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
<transition source="idle" target="run">
|
||||
<event name="key_up|key_shift" />
|
||||
</transition>
|
||||
<transition source="run" target="attack">
|
||||
<event name="key_ctrl" />
|
||||
<condition expr="weapon != null" />
|
||||
</transition>
|
51
3rd_party/pugixml/docs/samples/traverse_base.cpp
vendored
Normal file
51
3rd_party/pugixml/docs/samples/traverse_base.cpp
vendored
Normal file
@ -0,0 +1,51 @@
|
||||
#include "pugixml.hpp"
|
||||
|
||||
#include <string.h>
|
||||
#include <iostream>
|
||||
|
||||
int main()
|
||||
{
|
||||
pugi::xml_document doc;
|
||||
if (!doc.load_file("xgconsole.xml")) return -1;
|
||||
|
||||
pugi::xml_node tools = doc.child("Profile").child("Tools");
|
||||
|
||||
// tag::basic[]
|
||||
for (pugi::xml_node tool = tools.first_child(); tool; tool = tool.next_sibling())
|
||||
{
|
||||
std::cout << "Tool:";
|
||||
|
||||
for (pugi::xml_attribute attr = tool.first_attribute(); attr; attr = attr.next_attribute())
|
||||
{
|
||||
std::cout << " " << attr.name() << "=" << attr.value();
|
||||
}
|
||||
|
||||
std::cout << std::endl;
|
||||
}
|
||||
// end::basic[]
|
||||
|
||||
std::cout << std::endl;
|
||||
|
||||
// tag::data[]
|
||||
for (pugi::xml_node tool = tools.child("Tool"); tool; tool = tool.next_sibling("Tool"))
|
||||
{
|
||||
std::cout << "Tool " << tool.attribute("Filename").value();
|
||||
std::cout << ": AllowRemote " << tool.attribute("AllowRemote").as_bool();
|
||||
std::cout << ", Timeout " << tool.attribute("Timeout").as_int();
|
||||
std::cout << ", Description '" << tool.child_value("Description") << "'\n";
|
||||
}
|
||||
// end::data[]
|
||||
|
||||
std::cout << std::endl;
|
||||
|
||||
// tag::contents[]
|
||||
std::cout << "Tool for *.dae generation: " << tools.find_child_by_attribute("Tool", "OutputFileMasks", "*.dae").attribute("Filename").value() << "\n";
|
||||
|
||||
for (pugi::xml_node tool = tools.child("Tool"); tool; tool = tool.next_sibling("Tool"))
|
||||
{
|
||||
std::cout << "Tool " << tool.attribute("Filename").value() << "\n";
|
||||
}
|
||||
// end::contents[]
|
||||
}
|
||||
|
||||
// vim:et
|
27
3rd_party/pugixml/docs/samples/traverse_iter.cpp
vendored
Normal file
27
3rd_party/pugixml/docs/samples/traverse_iter.cpp
vendored
Normal file
@ -0,0 +1,27 @@
|
||||
#include "pugixml.hpp"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
int main()
|
||||
{
|
||||
pugi::xml_document doc;
|
||||
if (!doc.load_file("xgconsole.xml")) return -1;
|
||||
|
||||
pugi::xml_node tools = doc.child("Profile").child("Tools");
|
||||
|
||||
// tag::code[]
|
||||
for (pugi::xml_node_iterator it = tools.begin(); it != tools.end(); ++it)
|
||||
{
|
||||
std::cout << "Tool:";
|
||||
|
||||
for (pugi::xml_attribute_iterator ait = it->attributes_begin(); ait != it->attributes_end(); ++ait)
|
||||
{
|
||||
std::cout << " " << ait->name() << "=" << ait->value();
|
||||
}
|
||||
|
||||
std::cout << std::endl;
|
||||
}
|
||||
// end::code[]
|
||||
}
|
||||
|
||||
// vim:et
|
48
3rd_party/pugixml/docs/samples/traverse_predicate.cpp
vendored
Normal file
48
3rd_party/pugixml/docs/samples/traverse_predicate.cpp
vendored
Normal file
@ -0,0 +1,48 @@
|
||||
#include "pugixml.hpp"
|
||||
|
||||
#include <string.h>
|
||||
#include <iostream>
|
||||
|
||||
// tag::decl[]
|
||||
bool small_timeout(pugi::xml_node node)
|
||||
{
|
||||
return node.attribute("Timeout").as_int() < 20;
|
||||
}
|
||||
|
||||
struct allow_remote_predicate
|
||||
{
|
||||
bool operator()(pugi::xml_attribute attr) const
|
||||
{
|
||||
return strcmp(attr.name(), "AllowRemote") == 0;
|
||||
}
|
||||
|
||||
bool operator()(pugi::xml_node node) const
|
||||
{
|
||||
return node.attribute("AllowRemote").as_bool();
|
||||
}
|
||||
};
|
||||
// end::decl[]
|
||||
|
||||
int main()
|
||||
{
|
||||
pugi::xml_document doc;
|
||||
if (!doc.load_file("xgconsole.xml")) return -1;
|
||||
|
||||
pugi::xml_node tools = doc.child("Profile").child("Tools");
|
||||
|
||||
// tag::find[]
|
||||
// Find child via predicate (looks for direct children only)
|
||||
std::cout << tools.find_child(allow_remote_predicate()).attribute("Filename").value() << std::endl;
|
||||
|
||||
// Find node via predicate (looks for all descendants in depth-first order)
|
||||
std::cout << doc.find_node(allow_remote_predicate()).attribute("Filename").value() << std::endl;
|
||||
|
||||
// Find attribute via predicate
|
||||
std::cout << tools.last_child().find_attribute(allow_remote_predicate()).value() << std::endl;
|
||||
|
||||
// We can use simple functions instead of function objects
|
||||
std::cout << tools.find_child(small_timeout).attribute("Filename").value() << std::endl;
|
||||
// end::find[]
|
||||
}
|
||||
|
||||
// vim:et
|
32
3rd_party/pugixml/docs/samples/traverse_rangefor.cpp
vendored
Normal file
32
3rd_party/pugixml/docs/samples/traverse_rangefor.cpp
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
#include "pugixml.hpp"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
int main()
|
||||
{
|
||||
pugi::xml_document doc;
|
||||
if (!doc.load_file("xgconsole.xml")) return -1;
|
||||
|
||||
pugi::xml_node tools = doc.child("Profile").child("Tools");
|
||||
|
||||
// tag::code[]
|
||||
for (pugi::xml_node tool: tools.children("Tool"))
|
||||
{
|
||||
std::cout << "Tool:";
|
||||
|
||||
for (pugi::xml_attribute attr: tool.attributes())
|
||||
{
|
||||
std::cout << " " << attr.name() << "=" << attr.value();
|
||||
}
|
||||
|
||||
for (pugi::xml_node child: tool.children())
|
||||
{
|
||||
std::cout << ", child " << child.name();
|
||||
}
|
||||
|
||||
std::cout << std::endl;
|
||||
}
|
||||
// end::code[]
|
||||
}
|
||||
|
||||
// vim:et
|
35
3rd_party/pugixml/docs/samples/traverse_walker.cpp
vendored
Normal file
35
3rd_party/pugixml/docs/samples/traverse_walker.cpp
vendored
Normal file
@ -0,0 +1,35 @@
|
||||
#include "pugixml.hpp"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
const char* node_types[] =
|
||||
{
|
||||
"null", "document", "element", "pcdata", "cdata", "comment", "pi", "declaration"
|
||||
};
|
||||
|
||||
// tag::impl[]
|
||||
struct simple_walker: pugi::xml_tree_walker
|
||||
{
|
||||
virtual bool for_each(pugi::xml_node& node)
|
||||
{
|
||||
for (int i = 0; i < depth(); ++i) std::cout << " "; // indentation
|
||||
|
||||
std::cout << node_types[node.type()] << ": name='" << node.name() << "', value='" << node.value() << "'\n";
|
||||
|
||||
return true; // continue traversal
|
||||
}
|
||||
};
|
||||
// end::impl[]
|
||||
|
||||
int main()
|
||||
{
|
||||
pugi::xml_document doc;
|
||||
if (!doc.load_file("tree.xml")) return -1;
|
||||
|
||||
// tag::traverse[]
|
||||
simple_walker walker;
|
||||
doc.traverse(walker);
|
||||
// end::traverse[]
|
||||
}
|
||||
|
||||
// vim:et
|
12
3rd_party/pugixml/docs/samples/tree.xml
vendored
Normal file
12
3rd_party/pugixml/docs/samples/tree.xml
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0"?>
|
||||
<mesh name="mesh_root">
|
||||
<!-- here is a mesh node -->
|
||||
some text
|
||||
<![CDATA[someothertext]]>
|
||||
some more text
|
||||
<node attr1="value1" attr2="value2" />
|
||||
<node attr1="value2">
|
||||
<innernode/>
|
||||
</node>
|
||||
</mesh>
|
||||
<?include somedata?>
|
78
3rd_party/pugixml/docs/samples/weekly-shift_jis.xml
vendored
Normal file
78
3rd_party/pugixml/docs/samples/weekly-shift_jis.xml
vendored
Normal file
@ -0,0 +1,78 @@
|
||||
<?xml version="1.0" encoding="Shift_JIS"?>
|
||||
<!DOCTYPE <20>T<EFBFBD><54> SYSTEM "weekly-shift_jis.dtd">
|
||||
<!-- <20>T<EFBFBD><54><EFBFBD>T<EFBFBD><54><EFBFBD>v<EFBFBD><76> -->
|
||||
<<EFBFBD>T<EFBFBD><EFBFBD>>
|
||||
<<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>T>
|
||||
<<EFBFBD>N<EFBFBD>x>1997</<2F>N<EFBFBD>x>
|
||||
<<EFBFBD><EFBFBD><EFBFBD>x>1</<2F><><EFBFBD>x>
|
||||
<<EFBFBD>T>1</<2F>T>
|
||||
</<2F>N<EFBFBD><4E><EFBFBD>T>
|
||||
|
||||
<<EFBFBD><EFBFBD><EFBFBD><EFBFBD>>
|
||||
<<EFBFBD><EFBFBD>><3E>R<EFBFBD>c</<2F><>>
|
||||
<<EFBFBD><EFBFBD>><3E><><EFBFBD>Y</<2F><>>
|
||||
</<2F><><EFBFBD><EFBFBD>>
|
||||
|
||||
<<EFBFBD>Ɩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g>
|
||||
<<EFBFBD>Ɩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>>
|
||||
<<EFBFBD>Ɩ<EFBFBD><EFBFBD><EFBFBD>>XML<4D>G<EFBFBD>f<EFBFBD>B<EFBFBD>^<5E>[<5B>̍쐬</<2F>Ɩ<EFBFBD><C696><EFBFBD>>
|
||||
<<EFBFBD>Ɩ<EFBFBD><EFBFBD>R<EFBFBD>[<5B>h>X3355-23</<2F>Ɩ<EFBFBD><C696>R<EFBFBD>[<5B>h>
|
||||
<<EFBFBD>H<EFBFBD><EFBFBD><EFBFBD>Ǘ<EFBFBD>>
|
||||
<<EFBFBD><EFBFBD><EFBFBD>ς<EFBFBD><EFBFBD><EFBFBD><EFBFBD>H<EFBFBD><EFBFBD>>1600</<2F><><EFBFBD>ς<EFBFBD><CF82><EFBFBD><EFBFBD>H<EFBFBD><48>>
|
||||
<<EFBFBD><EFBFBD><EFBFBD>эH<EFBFBD><EFBFBD>>320</<2F><><EFBFBD>эH<D18D><48>>
|
||||
<<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ς<EFBFBD><EFBFBD><EFBFBD><EFBFBD>H<EFBFBD><EFBFBD>>160</<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ς<EFBFBD><CF82><EFBFBD><EFBFBD>H<EFBFBD><48>>
|
||||
<<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>эH<EFBFBD><EFBFBD>>24</<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>эH<D18D><48>>
|
||||
</<2F>H<EFBFBD><48><EFBFBD>Ǘ<EFBFBD>>
|
||||
<<EFBFBD>\<5C>荀<EFBFBD>ڃ<EFBFBD><DA83>X<EFBFBD>g>
|
||||
<<EFBFBD>\<5C>荀<EFBFBD><E88D80>>
|
||||
<P>XML<EFBFBD>G<EFBFBD>f<EFBFBD>B<EFBFBD>^<5E>[<5B>̊<EFBFBD><CC8A>{<7B>d<EFBFBD>l<EFBFBD>̍쐬</P>
|
||||
</<2F>\<5C>荀<EFBFBD><E88D80>>
|
||||
</<2F>\<5C>荀<EFBFBD>ڃ<EFBFBD><DA83>X<EFBFBD>g>
|
||||
<<EFBFBD><EFBFBD><EFBFBD>{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g>
|
||||
<<EFBFBD><EFBFBD><EFBFBD>{<7B><><EFBFBD><EFBFBD>>
|
||||
<P>XML<EFBFBD>G<EFBFBD>f<EFBFBD>B<EFBFBD>^<5E>[<5B>̊<EFBFBD><CC8A>{<7B>d<EFBFBD>l<EFBFBD>̍쐬</P>
|
||||
</<2F><><EFBFBD>{<7B><><EFBFBD><EFBFBD>>
|
||||
<<EFBFBD><EFBFBD><EFBFBD>{<7B><><EFBFBD><EFBFBD>>
|
||||
<P><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>А<EFBFBD><EFBFBD>i<EFBFBD>̋@<40>\<5C><><EFBFBD><EFBFBD></P>
|
||||
</<2F><><EFBFBD>{<7B><><EFBFBD><EFBFBD>>
|
||||
</<2F><><EFBFBD>{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g>
|
||||
<<EFBFBD>㒷<EFBFBD>ւ̗v<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g>
|
||||
<<EFBFBD>㒷<EFBFBD>ւ̗v<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>>
|
||||
<P><EFBFBD><EFBFBD><EFBFBD>ɂȂ<EFBFBD></P>
|
||||
</<2F>㒷<EFBFBD>ւ̗v<CC97><76><EFBFBD><EFBFBD><EFBFBD><EFBFBD>>
|
||||
</<2F>㒷<EFBFBD>ւ̗v<CC97><76><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g>
|
||||
<<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><EFBFBD>>
|
||||
<P>XML<EFBFBD>Ƃ͉<EFBFBD><EFBFBD><EFBFBD><EFBFBD>킩<EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><EFBFBD>B</P>
|
||||
</<2F><><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><EFBFBD>>
|
||||
</<2F>Ɩ<EFBFBD><C696><EFBFBD><EFBFBD><EFBFBD>>
|
||||
|
||||
<<EFBFBD>Ɩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>>
|
||||
<<EFBFBD>Ɩ<EFBFBD><EFBFBD><EFBFBD>><3E><><EFBFBD><EFBFBD><EFBFBD>G<EFBFBD><47><EFBFBD>W<EFBFBD><57><EFBFBD>̊J<CC8A><4A></<2F>Ɩ<EFBFBD><C696><EFBFBD>>
|
||||
<<EFBFBD>Ɩ<EFBFBD><EFBFBD>R<EFBFBD>[<5B>h>S8821-76</<2F>Ɩ<EFBFBD><C696>R<EFBFBD>[<5B>h>
|
||||
<<EFBFBD>H<EFBFBD><EFBFBD><EFBFBD>Ǘ<EFBFBD>>
|
||||
<<EFBFBD><EFBFBD><EFBFBD>ς<EFBFBD><EFBFBD><EFBFBD><EFBFBD>H<EFBFBD><EFBFBD>>120</<2F><><EFBFBD>ς<EFBFBD><CF82><EFBFBD><EFBFBD>H<EFBFBD><48>>
|
||||
<<EFBFBD><EFBFBD><EFBFBD>эH<EFBFBD><EFBFBD>>6</<2F><><EFBFBD>эH<D18D><48>>
|
||||
<<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ς<EFBFBD><EFBFBD><EFBFBD><EFBFBD>H<EFBFBD><EFBFBD>>32</<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ς<EFBFBD><CF82><EFBFBD><EFBFBD>H<EFBFBD><48>>
|
||||
<<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>эH<EFBFBD><EFBFBD>>2</<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>эH<D18D><48>>
|
||||
</<2F>H<EFBFBD><48><EFBFBD>Ǘ<EFBFBD>>
|
||||
<<EFBFBD>\<5C>荀<EFBFBD>ڃ<EFBFBD><DA83>X<EFBFBD>g>
|
||||
<<EFBFBD>\<5C>荀<EFBFBD><E88D80>>
|
||||
<P><A href="http://www.goo.ne.jp">goo</A><EFBFBD>̋@<40>\<5C>ׂĂ݂<C482></P>
|
||||
</<2F>\<5C>荀<EFBFBD><E88D80>>
|
||||
</<2F>\<5C>荀<EFBFBD>ڃ<EFBFBD><DA83>X<EFBFBD>g>
|
||||
<<EFBFBD><EFBFBD><EFBFBD>{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g>
|
||||
<<EFBFBD><EFBFBD><EFBFBD>{<7B><><EFBFBD><EFBFBD>>
|
||||
<P><EFBFBD>X<EFBFBD>ɁA<EFBFBD>ǂ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>G<EFBFBD><EFBFBD><EFBFBD>W<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>邩<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></P>
|
||||
</<2F><><EFBFBD>{<7B><><EFBFBD><EFBFBD>>
|
||||
</<2F><><EFBFBD>{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g>
|
||||
<<EFBFBD>㒷<EFBFBD>ւ̗v<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g>
|
||||
<<EFBFBD>㒷<EFBFBD>ւ̗v<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>>
|
||||
<P><EFBFBD>J<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂͂߂<EFBFBD><EFBFBD>ǂ<EFBFBD><EFBFBD>Ȃ̂ŁAYahoo!<21><EFBFBD><F094838E><EFBFBD><EFBFBD>ĉ<EFBFBD><C489><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B</P>
|
||||
</<2F>㒷<EFBFBD>ւ̗v<CC97><76><EFBFBD><EFBFBD><EFBFBD><EFBFBD>>
|
||||
</<2F>㒷<EFBFBD>ւ̗v<CC97><76><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g>
|
||||
<<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><EFBFBD>>
|
||||
<P><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>G<EFBFBD><EFBFBD><EFBFBD>W<EFBFBD><EFBFBD><EFBFBD>ŎԂ𑖂点<EFBFBD>邱<EFBFBD>Ƃ<EFBFBD><EFBFBD>ł<EFBFBD><EFBFBD>Ȃ<EFBFBD><EFBFBD>B<EFBFBD>i<EFBFBD>v<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>j</P>
|
||||
</<2F><><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><EFBFBD>>
|
||||
</<2F>Ɩ<EFBFBD><C696><EFBFBD><EFBFBD><EFBFBD>>
|
||||
</<2F>Ɩ<EFBFBD><C696><EFBFBD><F18D9083>X<EFBFBD>g>
|
||||
</<2F>T<EFBFBD><54>>
|
BIN
3rd_party/pugixml/docs/samples/weekly-utf-16.xml
vendored
Normal file
BIN
3rd_party/pugixml/docs/samples/weekly-utf-16.xml
vendored
Normal file
Binary file not shown.
78
3rd_party/pugixml/docs/samples/weekly-utf-8.xml
vendored
Normal file
78
3rd_party/pugixml/docs/samples/weekly-utf-8.xml
vendored
Normal file
@ -0,0 +1,78 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE 週報 SYSTEM "weekly-utf-8.dtd">
|
||||
<!-- 週報サンプル -->
|
||||
<週報>
|
||||
<年月週>
|
||||
<年度>1997</年度>
|
||||
<月度>1</月度>
|
||||
<週>1</週>
|
||||
</年月週>
|
||||
|
||||
<氏名>
|
||||
<氏>山田</氏>
|
||||
<名>太郎</名>
|
||||
</氏名>
|
||||
|
||||
<業務報告リスト>
|
||||
<業務報告>
|
||||
<業務名>XMLエディターの作成</業務名>
|
||||
<業務コード>X3355-23</業務コード>
|
||||
<工数管理>
|
||||
<見積もり工数>1600</見積もり工数>
|
||||
<実績工数>320</実績工数>
|
||||
<当月見積もり工数>160</当月見積もり工数>
|
||||
<当月実績工数>24</当月実績工数>
|
||||
</工数管理>
|
||||
<予定項目リスト>
|
||||
<予定項目>
|
||||
<P>XMLエディターの基本仕様の作成</P>
|
||||
</予定項目>
|
||||
</予定項目リスト>
|
||||
<実施事項リスト>
|
||||
<実施事項>
|
||||
<P>XMLエディターの基本仕様の作成</P>
|
||||
</実施事項>
|
||||
<実施事項>
|
||||
<P>競合他社製品の機能調査</P>
|
||||
</実施事項>
|
||||
</実施事項リスト>
|
||||
<上長への要請事項リスト>
|
||||
<上長への要請事項>
|
||||
<P>特になし</P>
|
||||
</上長への要請事項>
|
||||
</上長への要請事項リスト>
|
||||
<問題点対策>
|
||||
<P>XMLとは何かわからない。</P>
|
||||
</問題点対策>
|
||||
</業務報告>
|
||||
|
||||
<業務報告>
|
||||
<業務名>検索エンジンの開発</業務名>
|
||||
<業務コード>S8821-76</業務コード>
|
||||
<工数管理>
|
||||
<見積もり工数>120</見積もり工数>
|
||||
<実績工数>6</実績工数>
|
||||
<当月見積もり工数>32</当月見積もり工数>
|
||||
<当月実績工数>2</当月実績工数>
|
||||
</工数管理>
|
||||
<予定項目リスト>
|
||||
<予定項目>
|
||||
<P><A href="http://www.goo.ne.jp">goo</A>の機能を調べてみる</P>
|
||||
</予定項目>
|
||||
</予定項目リスト>
|
||||
<実施事項リスト>
|
||||
<実施事項>
|
||||
<P>更に、どういう検索エンジンがあるか調査する</P>
|
||||
</実施事項>
|
||||
</実施事項リスト>
|
||||
<上長への要請事項リスト>
|
||||
<上長への要請事項>
|
||||
<P>開発をするのはめんどうなので、Yahoo!を買収して下さい。</P>
|
||||
</上長への要請事項>
|
||||
</上長への要請事項リスト>
|
||||
<問題点対策>
|
||||
<P>検索エンジンで車を走らせることができない。(要調査)</P>
|
||||
</問題点対策>
|
||||
</業務報告>
|
||||
</業務報告リスト>
|
||||
</週報>
|
12
3rd_party/pugixml/docs/samples/xgconsole.xml
vendored
Normal file
12
3rd_party/pugixml/docs/samples/xgconsole.xml
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<Profile FormatVersion="1">
|
||||
<Tools>
|
||||
<Tool Filename="jam" AllowIntercept="true">
|
||||
<Description>Jamplus build system</Description>
|
||||
</Tool>
|
||||
<Tool Filename="mayabatch.exe" AllowRemote="true" OutputFileMasks="*.dae" DeriveCaptionFrom="lastparam" Timeout="40" />
|
||||
<Tool Filename="meshbuilder_*.exe" AllowRemote="false" OutputFileMasks="*.mesh" DeriveCaptionFrom="lastparam" Timeout="10" />
|
||||
<Tool Filename="texbuilder_*.exe" AllowRemote="true" OutputFileMasks="*.tex" DeriveCaptionFrom="lastparam" />
|
||||
<Tool Filename="shaderbuilder_*.exe" AllowRemote="true" DeriveCaptionFrom="lastparam" />
|
||||
</Tools>
|
||||
</Profile>
|
43
3rd_party/pugixml/docs/samples/xpath_error.cpp
vendored
Normal file
43
3rd_party/pugixml/docs/samples/xpath_error.cpp
vendored
Normal file
@ -0,0 +1,43 @@
|
||||
#include "pugixml.hpp"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
int main()
|
||||
{
|
||||
pugi::xml_document doc;
|
||||
if (!doc.load_file("xgconsole.xml")) return -1;
|
||||
|
||||
// tag::code[]
|
||||
// Exception is thrown for incorrect query syntax
|
||||
try
|
||||
{
|
||||
doc.select_nodes("//nodes[#true()]");
|
||||
}
|
||||
catch (const pugi::xpath_exception& e)
|
||||
{
|
||||
std::cout << "Select failed: " << e.what() << std::endl;
|
||||
}
|
||||
|
||||
// Exception is thrown for incorrect query semantics
|
||||
try
|
||||
{
|
||||
doc.select_nodes("(123)/next");
|
||||
}
|
||||
catch (const pugi::xpath_exception& e)
|
||||
{
|
||||
std::cout << "Select failed: " << e.what() << std::endl;
|
||||
}
|
||||
|
||||
// Exception is thrown for query with incorrect return type
|
||||
try
|
||||
{
|
||||
doc.select_nodes("123");
|
||||
}
|
||||
catch (const pugi::xpath_exception& e)
|
||||
{
|
||||
std::cout << "Select failed: " << e.what() << std::endl;
|
||||
}
|
||||
// end::code[]
|
||||
}
|
||||
|
||||
// vim:et
|
36
3rd_party/pugixml/docs/samples/xpath_query.cpp
vendored
Normal file
36
3rd_party/pugixml/docs/samples/xpath_query.cpp
vendored
Normal file
@ -0,0 +1,36 @@
|
||||
#include "pugixml.hpp"
|
||||
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
int main()
|
||||
{
|
||||
pugi::xml_document doc;
|
||||
if (!doc.load_file("xgconsole.xml")) return -1;
|
||||
|
||||
// tag::code[]
|
||||
// Select nodes via compiled query
|
||||
pugi::xpath_query query_remote_tools("/Profile/Tools/Tool[@AllowRemote='true']");
|
||||
|
||||
pugi::xpath_node_set tools = query_remote_tools.evaluate_node_set(doc);
|
||||
std::cout << "Remote tool: ";
|
||||
tools[2].node().print(std::cout);
|
||||
|
||||
// Evaluate numbers via compiled query
|
||||
pugi::xpath_query query_timeouts("sum(//Tool/@Timeout)");
|
||||
std::cout << query_timeouts.evaluate_number(doc) << std::endl;
|
||||
|
||||
// Evaluate strings via compiled query for different context nodes
|
||||
pugi::xpath_query query_name_valid("string-length(substring-before(@Filename, '_')) > 0 and @OutputFileMasks");
|
||||
pugi::xpath_query query_name("concat(substring-before(@Filename, '_'), ' produces ', @OutputFileMasks)");
|
||||
|
||||
for (pugi::xml_node tool = doc.first_element_by_path("Profile/Tools/Tool"); tool; tool = tool.next_sibling())
|
||||
{
|
||||
std::string s = query_name.evaluate_string(tool);
|
||||
|
||||
if (query_name_valid.evaluate_boolean(tool)) std::cout << s << std::endl;
|
||||
}
|
||||
// end::code[]
|
||||
}
|
||||
|
||||
// vim:et
|
28
3rd_party/pugixml/docs/samples/xpath_select.cpp
vendored
Normal file
28
3rd_party/pugixml/docs/samples/xpath_select.cpp
vendored
Normal file
@ -0,0 +1,28 @@
|
||||
#include "pugixml.hpp"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
int main()
|
||||
{
|
||||
pugi::xml_document doc;
|
||||
if (!doc.load_file("xgconsole.xml")) return -1;
|
||||
|
||||
// tag::code[]
|
||||
pugi::xpath_node_set tools = doc.select_nodes("/Profile/Tools/Tool[@AllowRemote='true' and @DeriveCaptionFrom='lastparam']");
|
||||
|
||||
std::cout << "Tools:\n";
|
||||
|
||||
for (pugi::xpath_node_set::const_iterator it = tools.begin(); it != tools.end(); ++it)
|
||||
{
|
||||
pugi::xpath_node node = *it;
|
||||
std::cout << node.node().attribute("Filename").value() << "\n";
|
||||
}
|
||||
|
||||
pugi::xpath_node build_tool = doc.select_node("//Tool[contains(Description, 'build system')]");
|
||||
|
||||
if (build_tool)
|
||||
std::cout << "Build tool: " << build_tool.node().attribute("Filename").value() << "\n";
|
||||
// end::code[]
|
||||
}
|
||||
|
||||
// vim:et
|
38
3rd_party/pugixml/docs/samples/xpath_variables.cpp
vendored
Normal file
38
3rd_party/pugixml/docs/samples/xpath_variables.cpp
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
#include "pugixml.hpp"
|
||||
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
int main()
|
||||
{
|
||||
pugi::xml_document doc;
|
||||
if (!doc.load_file("xgconsole.xml")) return -1;
|
||||
|
||||
// tag::code[]
|
||||
// Select nodes via compiled query
|
||||
pugi::xpath_variable_set vars;
|
||||
vars.add("remote", pugi::xpath_type_boolean);
|
||||
|
||||
pugi::xpath_query query_remote_tools("/Profile/Tools/Tool[@AllowRemote = string($remote)]", &vars);
|
||||
|
||||
vars.set("remote", true);
|
||||
pugi::xpath_node_set tools_remote = query_remote_tools.evaluate_node_set(doc);
|
||||
|
||||
vars.set("remote", false);
|
||||
pugi::xpath_node_set tools_local = query_remote_tools.evaluate_node_set(doc);
|
||||
|
||||
std::cout << "Remote tool: ";
|
||||
tools_remote[2].node().print(std::cout);
|
||||
|
||||
std::cout << "Local tool: ";
|
||||
tools_local[0].node().print(std::cout);
|
||||
|
||||
// You can pass the context directly to select_nodes/select_node
|
||||
pugi::xpath_node_set tools_local_imm = doc.select_nodes("/Profile/Tools/Tool[@AllowRemote = string($remote)]", &vars);
|
||||
|
||||
std::cout << "Local tool imm: ";
|
||||
tools_local_imm[0].node().print(std::cout);
|
||||
// end::code[]
|
||||
}
|
||||
|
||||
// vim:et
|
Reference in New Issue
Block a user