[DEV] start rework that does not work
This commit is contained in:
parent
4475968d31
commit
87316c738a
66
doc/build.md
Normal file
66
doc/build.md
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
Build lib & build sample {#exml_build}
|
||||||
|
========================
|
||||||
|
|
||||||
|
@tableofcontents
|
||||||
|
|
||||||
|
Download: {#exml_build_download}
|
||||||
|
=========
|
||||||
|
|
||||||
|
exml use some tools to manage source and build it:
|
||||||
|
|
||||||
|
lutin (build-system): {#exml_build_download_lutin}
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
```{.sh}
|
||||||
|
pip install lutin --user
|
||||||
|
# optionnal dependency of lutin (manage image changing size for application release)
|
||||||
|
pip install pillow --user
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
dependency: {#exml_build_download_dependency}
|
||||||
|
-----------
|
||||||
|
|
||||||
|
```{.sh}
|
||||||
|
mkdir framework
|
||||||
|
cd framework
|
||||||
|
git clone https://github.com/atria-soft/elog.git
|
||||||
|
git clone https://github.com/atria-soft/etk.git
|
||||||
|
git clone https://github.com/atria-soft/ememory.git
|
||||||
|
cd ..
|
||||||
|
```
|
||||||
|
|
||||||
|
sources: {#exml_build_download_sources}
|
||||||
|
--------
|
||||||
|
|
||||||
|
```{.sh}
|
||||||
|
cd framework
|
||||||
|
git clone https://github.com/atria-soft/exml.git
|
||||||
|
cd ..
|
||||||
|
```
|
||||||
|
|
||||||
|
Build: {#exml_build_build}
|
||||||
|
======
|
||||||
|
|
||||||
|
|
||||||
|
library: {#exml_build_build_library}
|
||||||
|
--------
|
||||||
|
|
||||||
|
```{.sh}
|
||||||
|
lutin -mdebug exml
|
||||||
|
```
|
||||||
|
|
||||||
|
Sample: {#exml_build_build_sample}
|
||||||
|
-------
|
||||||
|
|
||||||
|
```{.sh}
|
||||||
|
lutin -mdebug exml-sample
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
Run sample: {#exml_build_run_sample}
|
||||||
|
===========
|
||||||
|
|
||||||
|
```{.sh}
|
||||||
|
lutin -mdebug exml-sample?run
|
||||||
|
```
|
71
doc/mainpage.md
Normal file
71
doc/mainpage.md
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
EXML library {#mainpage}
|
||||||
|
============
|
||||||
|
|
||||||
|
@tableofcontents
|
||||||
|
|
||||||
|
What is EXML: {#exml_mainpage_what}
|
||||||
|
==================
|
||||||
|
|
||||||
|
EXML, or Ewol XML interface is a simple, small, efficient, C++ XML parser/generator that can be easily integrating into other programs.
|
||||||
|
|
||||||
|
What it does: {#exml_mainpage_what_it_does}
|
||||||
|
-------------
|
||||||
|
|
||||||
|
EXML parses an XML document, and builds from that a Document Object Model (DOM) that can be read, modified, and saved.
|
||||||
|
|
||||||
|
XML stands for "eXtensible Markup Language." It is a general purpose human and machine readable markup language to describe arbitrary data.
|
||||||
|
All those random file formats created to store application data can all be replaced with XML. One parser for everything.
|
||||||
|
|
||||||
|
http://wikipedia.org/wiki/XML
|
||||||
|
|
||||||
|
There are different ways to access and interact with XML data.
|
||||||
|
EXML uses a Document Object Model (DOM), meaning the XML data is parsed into a C++ objects that can be browsed and manipulated, and then written to disk.
|
||||||
|
You can also construct an XML document from scratch with C++ objects and write this to disk.
|
||||||
|
|
||||||
|
EXML is designed to be easy and fast to learn.
|
||||||
|
|
||||||
|
EXML is dependent of the STL (compatible with MacOs stl (CXX))
|
||||||
|
|
||||||
|
What it doesn't do: {#exml_mainpage_what_it_not_does}
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
EXML doesn't parse or use DTDs (Document Type Definitions) or XSLs (eXtensible Stylesheet Language).
|
||||||
|
|
||||||
|
What languages are supported? {#exml_mainpage_language}
|
||||||
|
=============================
|
||||||
|
|
||||||
|
EXML is written in C++.
|
||||||
|
|
||||||
|
|
||||||
|
Are there any licensing restrictions? {#exml_mainpage_license_restriction}
|
||||||
|
=====================================
|
||||||
|
|
||||||
|
EXML is **FREE software** and _all sub-library are FREE and staticly linkable !!!_
|
||||||
|
|
||||||
|
|
||||||
|
License (APACHE-2.0) {#exml_mainpage_license}
|
||||||
|
====================
|
||||||
|
|
||||||
|
Copyright EXML Edouard DUPIN
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
<http://www.apache.org/licenses/LICENSE-2.0>
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
|
||||||
|
|
||||||
|
Other pages {#exml_mainpage_sub_page}
|
||||||
|
===========
|
||||||
|
|
||||||
|
- @ref exml_build
|
||||||
|
- @ref exml_tutorial_read
|
||||||
|
- @ref exml_tutorial_write
|
||||||
|
- [**ewol coding style**](http://atria-soft.github.io/ewol/ewol_coding_style.html)
|
||||||
|
|
80
doc/read.md
Normal file
80
doc/read.md
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
Read an XML content {#exml_tutorial_read}
|
||||||
|
===================
|
||||||
|
|
||||||
|
@tableofcontents
|
||||||
|
|
||||||
|
The first thing to do when reading or writing a XML file/stream, is to declare the Document interface
|
||||||
|
|
||||||
|
Include exml
|
||||||
|
@snippet read.cpp exml_sample_include
|
||||||
|
|
||||||
|
Declare document interface
|
||||||
|
@snippet read.cpp exml_sample_declare_doc
|
||||||
|
|
||||||
|
|
||||||
|
Read an XML file {#exml_tutorial_read_file}
|
||||||
|
================
|
||||||
|
|
||||||
|
File to read: "read.xml"
|
||||||
|
@include read.xml
|
||||||
|
|
||||||
|
Reading a file is done like this:
|
||||||
|
@snippet read.cpp exml_sample_read_file
|
||||||
|
|
||||||
|
The file naming is manage by @ref etk::FSNode that provide "DATA:" start string for internal application asset. You can use external path like "./plop/file.xml" too.
|
||||||
|
|
||||||
|
|
||||||
|
Read an XML Stream {#exml_tutorial_read_stream}
|
||||||
|
==================
|
||||||
|
|
||||||
|
Reading a stream is done like this:
|
||||||
|
@snippet read.cpp exml_sample_read_stream1
|
||||||
|
|
||||||
|
In C and C++ it is very hard to read string with the \\" then to simplify parsing of xml the parser engine support the use of simple ' interface:
|
||||||
|
@snippet read.cpp exml_sample_read_stream2
|
||||||
|
|
||||||
|
|
||||||
|
Access at all Element datas {#exml_tutorial_read_folow}
|
||||||
|
===========================
|
||||||
|
|
||||||
|
In an exml::Element (or exml::Document) the sub-nodes are accessible threw an abstraction class stores in an element name **nodes**
|
||||||
|
|
||||||
|
Get a node with its name:
|
||||||
|
@snippet read.cpp exml_sample_read_get_node
|
||||||
|
|
||||||
|
Reading all file nodes:
|
||||||
|
@snippet read.cpp exml_sample_read_folow_nodes
|
||||||
|
|
||||||
|
**note:** the itElem is a simple exml::Node that can be all the xml type. you can change the type by calling: toDocument(), toElement(), toString() ...
|
||||||
|
|
||||||
|
In a C style mode:
|
||||||
|
@snippet read.cpp exml_sample_read_folow_nodes_c
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
In an exml::Element (or exml::Document or exml::Declaration) the sub-nodes are accessible threw an abstraction class stores in an element name **attributes**
|
||||||
|
|
||||||
|
Reading all Attributes of one node:
|
||||||
|
@snippet read.cpp exml_sample_read_folow_attributes
|
||||||
|
|
||||||
|
In a C style mode:
|
||||||
|
@snippet read.cpp exml_sample_read_folow_attributes_c
|
||||||
|
|
||||||
|
Get an attribute data:
|
||||||
|
@snippet read.cpp exml_sample_read_get_direct_attribute
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
In an exml::Element (or exml::Document) the internal data text can be accessible threw the interface:
|
||||||
|
|
||||||
|
Get all the data in an element in text mode:
|
||||||
|
@snippet read.cpp exml_sample_read_get_all_under_string
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
All example file {#exml_tutorial_read_all}
|
||||||
|
================
|
||||||
|
|
||||||
|
@snippet read.cpp exml_sample_read_all
|
||||||
|
|
61
doc/write.md
Normal file
61
doc/write.md
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
Write an XML content {#exml_tutorial_write}
|
||||||
|
====================
|
||||||
|
|
||||||
|
@tableofcontents
|
||||||
|
|
||||||
|
The first thing to do when reading or writing a XML file/stream, is to declare the Document interface
|
||||||
|
|
||||||
|
Include exml
|
||||||
|
@snippet read.cpp exml_sample_include
|
||||||
|
|
||||||
|
Declare document interface
|
||||||
|
@snippet read.cpp exml_sample_declare_doc
|
||||||
|
|
||||||
|
|
||||||
|
Write an XML file {#exml_tutorial_write_file}
|
||||||
|
=================
|
||||||
|
|
||||||
|
Write an xml tree is done like:
|
||||||
|
@snippet write.cpp exml_sample_write_file
|
||||||
|
|
||||||
|
|
||||||
|
Write an XML Stream {#exml_tutorial_write_stream}
|
||||||
|
===================
|
||||||
|
|
||||||
|
Writing a stream is done like this:
|
||||||
|
@snippet write.cpp exml_sample_write_stream
|
||||||
|
|
||||||
|
Operation on Tree {#exml_tutorial_write_operation}
|
||||||
|
=================
|
||||||
|
|
||||||
|
Add Node/Declaration:
|
||||||
|
@snippet write.cpp exml_sample_write_add_declaration
|
||||||
|
|
||||||
|
Add an Node/Element:
|
||||||
|
@snippet write.cpp exml_sample_write_add_element
|
||||||
|
|
||||||
|
Remove a Node/Element:
|
||||||
|
@snippet write.cpp exml_sample_write_rm_node
|
||||||
|
|
||||||
|
|
||||||
|
Add an attribute (simple version):
|
||||||
|
@snippet write.cpp exml_sample_write_add_attribute_simple
|
||||||
|
|
||||||
|
Add an attribute (complex version):
|
||||||
|
@snippet write.cpp exml_sample_write_add_attribute_complex
|
||||||
|
|
||||||
|
Remove an attribute:
|
||||||
|
@snippet write.cpp exml_sample_write_rm_attribute
|
||||||
|
|
||||||
|
Object concept {#exml_tutorial_concept}
|
||||||
|
==============
|
||||||
|
|
||||||
|
the exml concept is to abstract the implementation of the internal system. All the element are maped on shared memory.
|
||||||
|
Then if you asign an element to an other, it is the same. You need to clone it if you want to have new standalone element.
|
||||||
|
|
||||||
|
|
||||||
|
All example file {#exml_tutorial_write_all}
|
||||||
|
================
|
||||||
|
|
||||||
|
@snippet write.cpp exml_sample_write_all
|
||||||
|
|
@ -173,7 +173,7 @@ bool egami::generateDistanceFieldFile(const std::string& _input, const std::stri
|
|||||||
if (data.exist() == false) {
|
if (data.exist() == false) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// Generate distance field :
|
// Generate distance field:
|
||||||
egami::ImageMono input;
|
egami::ImageMono input;
|
||||||
/*
|
/*
|
||||||
input.resize(data.getSize());
|
input.resize(data.getSize());
|
||||||
|
45
lutin_egami-sample.py
Normal file
45
lutin_egami-sample.py
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
import lutin.module as module
|
||||||
|
import lutin.tools as tools
|
||||||
|
|
||||||
|
|
||||||
|
def get_type():
|
||||||
|
return "BINARY"
|
||||||
|
|
||||||
|
def get_sub_type():
|
||||||
|
return "TEST"
|
||||||
|
|
||||||
|
def get_desc():
|
||||||
|
return "Test software for egami"
|
||||||
|
|
||||||
|
def get_licence():
|
||||||
|
return "APACHE-2"
|
||||||
|
|
||||||
|
def get_compagny_type():
|
||||||
|
return "com"
|
||||||
|
|
||||||
|
def get_compagny_name():
|
||||||
|
return "atria-soft"
|
||||||
|
|
||||||
|
def get_maintainer():
|
||||||
|
return ["Mr DUPIN Edouard <yui.heero@gmail.com>"]
|
||||||
|
|
||||||
|
def create(target, module_name):
|
||||||
|
my_module = module.Module(__file__, module_name, get_type())
|
||||||
|
my_module.add_module_depend(['egami', 'test-debug'])
|
||||||
|
my_module.add_src_file([
|
||||||
|
'test/main.cpp',
|
||||||
|
'test/read.cpp',
|
||||||
|
'test/write.cpp'
|
||||||
|
])
|
||||||
|
my_module.copy_path('sample/read.bmp')
|
||||||
|
my_module.copy_path('sample/read.svg')
|
||||||
|
my_module.copy_path('sample/read.png')
|
||||||
|
return my_module
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
32
sample/main.cpp
Normal file
32
sample/main.cpp
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
/** @file
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
* @copyright 2016, Edouard DUPIN, all right reserved
|
||||||
|
* @license APACHE v2.0 (see license file)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <test-debug/debug.h>
|
||||||
|
#include <etk/etk.h>
|
||||||
|
#include "read.h"
|
||||||
|
#include "write.h"
|
||||||
|
|
||||||
|
int main(int argc, const char *argv[]) {
|
||||||
|
// the only one init for etk:
|
||||||
|
etk::init(argc, argv);
|
||||||
|
for (int32_t iii=0; iii<argc ; ++iii) {
|
||||||
|
std::string data = argv[iii];
|
||||||
|
if ( data == "-h"
|
||||||
|
|| data == "--help") {
|
||||||
|
TEST_PRINT("Help : ");
|
||||||
|
TEST_PRINT(" ./xxx [options]");
|
||||||
|
TEST_PRINT(" -h/--help: this help");
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
TEST_INFO("read [START] ***************************");
|
||||||
|
appl::read();
|
||||||
|
TEST_INFO("read [STOP ] ***************************");
|
||||||
|
TEST_INFO("write [START] ***************************");
|
||||||
|
appl::write();
|
||||||
|
TEST_INFO("write [STOP ] ***************************");
|
||||||
|
return 0;
|
||||||
|
}
|
54
sample/read.cpp
Normal file
54
sample/read.cpp
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
/** @file
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
* @copyright 2016, Edouard DUPIN, all right reserved
|
||||||
|
* @license APACHE v2.0 (see license file)
|
||||||
|
*/
|
||||||
|
|
||||||
|
//! [egami_sample_read_all]
|
||||||
|
#include <test-debug/debug.h>
|
||||||
|
//! [egami_sample_include]
|
||||||
|
#include <egami/egami.h>
|
||||||
|
//! [egami_sample_include]
|
||||||
|
#include "read.h"
|
||||||
|
|
||||||
|
|
||||||
|
static void readBMP() {
|
||||||
|
//! [egami_sample_declare_image]
|
||||||
|
// create an empty Image (no type and no inside data)
|
||||||
|
egami::Image image;
|
||||||
|
//! [egami_sample_declare_image]
|
||||||
|
//! [egami_sample_read_file_bmp]
|
||||||
|
image = egami::load("DATA:read.bmp");
|
||||||
|
//! [egami_sample_read_file_bmp]
|
||||||
|
TEST_INFO("image exist (BMP): " << image.exist());
|
||||||
|
}
|
||||||
|
|
||||||
|
static void readSVG() {
|
||||||
|
//! [egami_sample_read_file_svg]
|
||||||
|
egami::Image image = egami::load("DATA:read.svg");
|
||||||
|
//! [egami_sample_read_file_svg]
|
||||||
|
TEST_INFO("image exist (SVG): " << image.exist());
|
||||||
|
//! [egami_sample_read_file_svg_rescale]
|
||||||
|
image = egami::load("DATA:read.svg", ivec(800,600));
|
||||||
|
//! [egami_sample_read_file_svg_rescale]
|
||||||
|
TEST_INFO("image exist (SVG-rescale): " << image.exist());
|
||||||
|
//! [egami_sample_read_file_svg_scale_factor]
|
||||||
|
image = egami::load("DATA:read.svg", 0.5);
|
||||||
|
//! [egami_sample_read_file_svg_scale_factor]
|
||||||
|
TEST_INFO("image exist (SVG-scale): " << image.exist());
|
||||||
|
}
|
||||||
|
|
||||||
|
static void readPNG() {
|
||||||
|
//! [egami_sample_read_file_png]
|
||||||
|
egami::Image image = egami::load("DATA:read.png");
|
||||||
|
//! [egami_sample_read_file_png]
|
||||||
|
TEST_INFO("image exist (PNG): " << image.exist());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void appl::read() {
|
||||||
|
readBMP();
|
||||||
|
readSVG();
|
||||||
|
readPNG();
|
||||||
|
}
|
||||||
|
//! [egami_sample_read_all]
|
11
sample/read.h
Normal file
11
sample/read.h
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
/** @file
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
* @copyright 2016, Edouard DUPIN, all right reserved
|
||||||
|
* @license APACHE v2.0 (see license file)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace appl {
|
||||||
|
void read();
|
||||||
|
}
|
8
sample/read.xml
Normal file
8
sample/read.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="true"?>
|
||||||
|
<!-- my comment -->
|
||||||
|
<exml attributeExample="my data attribute">
|
||||||
|
coucou
|
||||||
|
<!-- comment -->
|
||||||
|
<subNodeA/>
|
||||||
|
<subNodeB/>
|
||||||
|
</exml>
|
44
sample/write.cpp
Normal file
44
sample/write.cpp
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
/** @file
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
* @copyright 2016, Edouard DUPIN, all right reserved
|
||||||
|
* @license APACHE v2.0 (see license file)
|
||||||
|
*/
|
||||||
|
|
||||||
|
//! [egami_sample_write_all]
|
||||||
|
#include <test-debug/debug.h>
|
||||||
|
#include <egami/egami.h>
|
||||||
|
#include "write.h"
|
||||||
|
|
||||||
|
|
||||||
|
static void writeBMP() {
|
||||||
|
//! [egami_sample_create_image]
|
||||||
|
// create an empty Image (no type and no inside data)
|
||||||
|
egami::Image image(ivec2(25,25));
|
||||||
|
image.set(ivec2(5,5), etk::Color<>(0x88, 0xFF, 0x00, 0xFF);
|
||||||
|
image.set(ivec2(12,15), etk::Color<>(0x88, 0xFF, 0x00, 0xFF);
|
||||||
|
image.set(ivec2(4,9), etk::Color<>(0x88, 0xFF, 0x00, 0xFF);
|
||||||
|
// ...
|
||||||
|
//! [egami_sample_create_image]
|
||||||
|
//! [egami_sample_write_file_bmp]
|
||||||
|
bool ret = egami::store(image, "DATA:read.bmp");
|
||||||
|
//! [egami_sample_write_file_bmp]
|
||||||
|
TEST_INFO("image write (BMP): " << ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void writeSVG() {
|
||||||
|
TEST_INFO("image write (SVG): Not Avaliiable");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void writePNG() {
|
||||||
|
TEST_INFO("image write (PNG): Not Avaliiable");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void appl::write() {
|
||||||
|
writeBMP();
|
||||||
|
writeSVG();
|
||||||
|
writePNG();
|
||||||
|
}
|
||||||
|
//! [egami_sample_write_all]
|
||||||
|
|
||||||
|
|
12
sample/write.h
Normal file
12
sample/write.h
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
/** @file
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
* @copyright 2016, Edouard DUPIN, all right reserved
|
||||||
|
* @license APACHE v2.0 (see license file)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace appl {
|
||||||
|
void write();
|
||||||
|
}
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user