Compare commits

...

19 Commits

Author SHA1 Message Date
a-sansara
3794af72b2 add minimal Gee.HashMap support 2018-09-06 18:46:44 +02:00
a-Sansara
626e88b37f update readme amend valadoc 2018-09-05 03:02:32 +02:00
a-Sansara
6d58329670 version 0.60 2018-09-05 02:33:21 +02:00
a-Sansara
83e6aa5729 fix processor 2018-09-05 02:07:59 +02:00
a-Sansara
c019ff1749 update gitignore, hide local mess 2018-09-05 02:06:58 +02:00
a-Sansara
3f8c77ebd7 fix & automated valadoc deployment 2018-09-05 02:06:06 +02:00
a-Sansara
3b915dcc92 add LOCAL build option 2018-09-05 02:04:22 +02:00
a-sansara
36f7cdcc6f fix processor 2018-09-04 18:47:16 +02:00
a-sansara
1ef7559309 fix error on Processor for nested mapping entries 2018-08-31 18:14:20 +02:00
a-sansara
48c00f3ae5 improve doc 2018-08-29 18:42:10 +02:00
a-sansara
f73d7d8545 amend readme 2018-08-29 16:59:06 +02:00
a-sansara
c840747e18 version 0.55 2018-08-29 16:37:11 +02:00
a-sansara
2acc2930ce extract samples classes from lib 2018-08-29 16:27:04 +02:00
a-sansara
487a5cd107 use berel to write files header 2018-08-28 14:57:04 +02:00
a-Sansara
ca6a46421d fix error loading bad file 2018-08-28 01:58:14 +02:00
a-Sansara
efe4a48d8f fix lines count in yaml_root 2018-08-24 21:03:56 +02:00
a-sansara
8dc1e7e436 amend 2018-08-24 18:50:32 +02:00
a-sansara
91aab4ab5c improve doc 2018-08-24 18:43:19 +02:00
a-sansara
2b11962eb6 add Yaml.serialize & Yaml.deserialize 2018-08-24 14:11:19 +02:00
57 changed files with 2942 additions and 1545 deletions

74
.berel.yml Normal file
View File

@ -0,0 +1,74 @@
%YAML 1.2
%TAG !v! tag:pluie.org,2018:vala/
---
!v!Pluie.Berel.Meta meta :
keys :
software : pluie-yaml; <https://git.pluie.org/pluie/lib-yaml>
version : 0.60
type : library
date : 2018
license : GPLv3.0; <http://www.gnu.org/licenses/>
author : a-Sansara; <[dev]at[pluie]dot[org]>
copyright : pluie.org; <http://www.pluie.org>
headers :
- sh :
file :
- build.sh
- valadoc.sh
startline : 2 # to embed shebang before header tpl
sepline :
motif : "# "
repeat : 40
comment :
start : "#^#"
end : "#^#"
begin : "# "
- meson :
file :
- meson.build
- src/meson.build
sepline :
motif : "# "
repeat : 40
comment :
start : "#^#"
end : "#^#"
begin : "# "
- vala :
dir :
- src
- samples
extension :
- .vala
- .c
sepline :
motif : " *"
repeat : 40
comment :
start : "/*^"
end : "^*/"
begin : " * "
tpl : |
^sepline^
^keys^
^sepline^
This file is part of ^software.name^.
^software.name^ is free software (free as in speech) : 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 3 of the License,
or (at your option) any later version.
^software.name^ 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 ^software.name^. If not, see ^license.address^.
^sepline^

4
.gitignore vendored
View File

@ -2,3 +2,7 @@ build/
bin/ bin/
doc/ doc/
pluie-yaml-*.tar.gz pluie-yaml-*.tar.gz
.geany
docfix*
docsvg.tar.gz
tag-generated.yml

View File

@ -28,7 +28,7 @@ GNU GPL v3
## Prerequisites ## Prerequisites
`valac meson ninja libyaml glib gobject gmodule gee pluie-echo` `valac meson ninja libyaml glib gobject gmodule gio gee pluie-echo`
see https://git.pluie.org/pluie/libpluie-echo in order to install pluie-echo-0.2 pkg see https://git.pluie.org/pluie/libpluie-echo in order to install pluie-echo-0.2 pkg
@ -45,15 +45,32 @@ sudo ninja install -C build
## Compilation ## Compilation
``` ```
valac --pkg pluie-echo-0.2 --pkg pluie-yaml-0.4 main.vala valac --pkg glib-2.0 \
--pkg gobject-2.0 \
--pkg gmodule-2.0 \
--pkg gio-2.0 \
--pkg gee-0.8 \
--pkg pluie-echo-0.2 \
--pkg pluie-yaml-0.4 \
main.vala
``` ```
You can use `./build.sh` to rebuild/install the **pluie-yaml** lib and compile samples files You can use `./build.sh` to rebuild/install the **pluie-yaml** lib and compile samples files
```
# rebuild lib + build all samples
./build.sh
# rebuild lib + build only single sample (give sample file name without extension)
./build.sh yaml-serialize
# rebuild lib in local mode
# local mode avoid to rebuild when modifying yaml files in resources dir
# must be in the root directory
./build.sh yaml-serialize 1
```
## Api / Documentation ## Api / Documentation
https://pluie.org/pluie-yaml-0.5/index.htm https://pluie.org/pluie-yaml-0.6/index.htm
## Docker ## Docker
@ -280,7 +297,7 @@ on yaml side, proceed like that :
%YAML 1.2 %YAML 1.2
%TAG !v! tag:pluie.org,2018:vala/ %TAG !v! tag:pluie.org,2018:vala/
--- ---
!v!Pluie.Yaml.Example test1 : !v!Pluie.Samples.YamlObject test1 :
myname : test1object myname : test1object
type_int : !v!int 3306 type_int : !v!int 3306
type_bool : !v!bool false type_bool : !v!bool false
@ -291,12 +308,12 @@ on yaml side, proceed like that :
type_float : !v!float 42.36 type_float : !v!float 42.36
type_double : !v!double 95542123.4579512128 type_double : !v!double 95542123.4579512128
type_enum : !v!Pluie.Yaml.NODE_TYPE scalar # or int type_enum : !v!Pluie.Yaml.NODE_TYPE scalar # or int
!v!Pluie.Yaml.ExampleChild type_object : !v!Pluie.Samples.YamlChild type_object :
toto : totovalue1 toto : totovalue1
tata : tatavalue1 tata : tatavalue1
titi : 123 titi : 123
tutu : 1 tutu : 1
!v!Pluie.Yaml.ExampleStruct type_struct : !v!Pluie.Samples.YamlStruct type_struct :
red : !v!uint8 214 red : !v!uint8 214
green : !v!uint8 78 green : !v!uint8 78
blue : 153 blue : 153
@ -311,16 +328,18 @@ on yaml side, proceed like that :
**note :** **note :**
only the first level of yaml node matching a vala object need a tag. only the first level of yaml node matching a vala object need a tag.
**pluie-yaml** has mechanisms to retriew properties types of a Yaml.Object. **pluie-yaml** has mechanisms to retriew properties types of a Yaml.Object.
So basic vala types tag, enum tag, struct tag and derived Yaml.Object (here ExampleChild) So basic vala types tag, enum tag, struct tag and derived Yaml.Object (here Samples.YamlObject & Samples.YamlChild)
or GLib.Object vala tags are not necessary inside a Yaml.Object. or GLib.Object.
vala tags are not necessary inside a Yaml.Object.
on vala side : on vala side :
```vala ```vala
using pluie;
... ...
var obj = (Yaml.Example) Yaml.Builder.from_node (root.first ()); var obj = (Samples.YamlObject) Yaml.Builder.from_node (root.first ());
of.echo("obj.type_int : %d".printf (obj.type_int)); of.echo("obj.type_int : %d".printf (obj.type_int));
// calling ExampleChild method // calling Samples.YamlChild method
obj.type_object.method_a () obj.type_object.method_a ()
``` ```
@ -337,13 +356,15 @@ We cannot do introspection on Structure's properties, so you need to implement a
First at all, in the static construct of your class, you need to register (properties) types that need some glue for instanciation. First at all, in the static construct of your class, you need to register (properties) types that need some glue for instanciation.
```vala ```vala
public class Yaml.Example : Yaml.Object using Pluie;
public class Pluie.Samples.YamlObject : Yaml.Object
{ {
static construct static construct
{ {
Yaml.Object.register.add_type ( Yaml.Register.add_type (
typeof (Yaml.Example), // owned type typeof (Samples.YamlObject), // owner type
typeof (Yaml.ExampleStruct), // property type typeof (Samples.YamlStruct), // property type
typeof (Gee.ArrayList) // property type typeof (Gee.ArrayList) // property type
); );
} }
@ -353,13 +374,13 @@ public class Yaml.Example : Yaml.Object
Secondly you must override the `public void populate_from_node (Glib.Type, Yaml.Node node)` Yaml.Object original method. Secondly you must override the `public void populate_from_node (Glib.Type, Yaml.Node node)` Yaml.Object original method.
`populate_from_node` is automatically called by the Yaml.Builder if the type property is prealably registered. `populate_from_node` is automatically called by the Yaml.Builder if the type property is prealably registered.
Example of implementation from `src/vala/Pluie/Yaml.Example.vala` : Example of implementation from `src/vala/Pluie/Samples.YamlObject.vala` :
```vala ```vala
public override void populate_from_node(GLib.Type type, Yaml.Node node) public override void populate_from_node(GLib.Type type, Yaml.Node node)
{ {
if (type == typeof (Yaml.ExampleStruct)) { if (type == typeof (Samples.YamlStruct)) {
this.type_struct = ExampleStruct.from_yaml_node (node); this.type_struct = Samples.YamlStruct.from_yaml_node (node);
} }
else if (type == typeof (Gee.ArrayList)) { else if (type == typeof (Gee.ArrayList)) {
this.type_gee_al = new Gee.ArrayList<string> (); this.type_gee_al = new Gee.ArrayList<string> ();
@ -375,9 +396,9 @@ Once your class has this glue, you can deal with complex object and populate the
directly from yaml files. directly from yaml files.
for more details see : for more details see :
* `src/vala/Pluie/Yaml.Example.vala` * `src/vala/Pluie/Samples.YamlObject.vala`
* `src/vala/Pluie/Yaml.ExampleChild.vala` * `src/vala/Pluie/Samples.YamlChild.vala`
* `src/vala/Pluie/Yaml.ExampleStruct.vala` * `src/vala/Pluie/Samples.YamlStruct.vala`
* `samples/yaml-tag.vala` * `samples/yaml-tag.vala`
code from samples/yaml-tag.vala : code from samples/yaml-tag.vala :
@ -399,7 +420,7 @@ reverse build mechanism is also possible but have the same limitation.
root.display_childs (); root.display_childs ();
of.action ("Yaml.Builder.from_node", root.first ().name); of.action ("Yaml.Builder.from_node", root.first ().name);
var obj = (Yaml.Example) Yaml.Builder.from_node (root.first ()); var obj = (Samples.YamlObject) Yaml.Builder.from_node (root.first ());
obj.type_object.method_a (); obj.type_object.method_a ();
of.action ("Yaml.Builder.to_node", obj.get_type ().name ()); of.action ("Yaml.Builder.to_node", obj.get_type ().name ());
@ -412,7 +433,7 @@ reverse build mechanism is also possible but have the same limitation.
you need to override the `public Yaml.Node? populate_to_node(GLib.Type type, string name)` Yaml.Object original method you need to override the `public Yaml.Node? populate_to_node(GLib.Type type, string name)` Yaml.Object original method
`populate_to_node` is also automatically called by the Yaml.Builder if the type property is prealably registered. `populate_to_node` is also automatically called by the Yaml.Builder if the type property is prealably registered.
Example of implementation from `src/vala/Pluie/Yaml.Example.vala` : Example of implementation from `src/vala/Pluie/Samples.YamlObject.vala` :
```vala ```vala
public override Yaml.Node? populate_to_node(GLib.Type type, string name) public override Yaml.Node? populate_to_node(GLib.Type type, string name)
@ -420,11 +441,8 @@ Example of implementation from `src/vala/Pluie/Yaml.Example.vala` :
Yaml.Node? node = base.populate_to_node (type, name); Yaml.Node? node = base.populate_to_node (type, name);
// non Yaml.Object type & registered type // non Yaml.Object type & registered type
if (node == null) { if (node == null) {
if (type == typeof (Yaml.ExampleStruct)) { if (type == typeof (Samples.YamlStruct)) {
node = new Yaml.Mapping (null, name); node = this.type_struct.to_yaml_node (name);
new Yaml.Mapping.with_scalar (node, "red" , this.type_struct.red.to_string ());
new Yaml.Mapping.with_scalar (node, "green", this.type_struct.green.to_string ());
new Yaml.Mapping.with_scalar (node, "blue" , this.type_struct.blue.to_string ());
} }
else if (type == typeof (Gee.ArrayList)) { else if (type == typeof (Gee.ArrayList)) {
node = new Yaml.Sequence (null, name); node = new Yaml.Sequence (null, name);
@ -437,6 +455,10 @@ Example of implementation from `src/vala/Pluie/Yaml.Example.vala` :
} }
``` ```
### Serialize/Deserialize
------------------- -------------------
### more samples ### more samples
@ -454,6 +476,8 @@ see samples files in ./samples directory
* ~~add docker image~~ * ~~add docker image~~
* ~~transform Yaml.Node nodes to Yaml.Object objects~~ * ~~transform Yaml.Node nodes to Yaml.Object objects~~
* ~~transform Yaml.Object objects to Yaml.Node nodes~~ * ~~transform Yaml.Object objects to Yaml.Node nodes~~
* ~~dumper~~
* ~~serialize/deserialize~~
* manage tag directives & tag (partially done) * manage tag directives & tag (partially done)
* improve doc * improve doc
* dumper

View File

@ -1,43 +1,45 @@
#!/bin/bash #!/bin/bash
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #^# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#
# @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
# @version : 0.60
# @type : library
# @date : 2018
# @license : GPLv3.0 <http://www.gnu.org/licenses/>
# @author : a-Sansara <[dev]at[pluie]dot[org]>
# @copyright : pluie.org <http://www.pluie.org>
# #
# @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
# @version : 0.5
# @type : library
# @date : 2018
# @licence : GPLv3.0 <http://www.gnu.org/licenses/>
# @author : a-Sansara <[dev]at[pluie]dot[org]>
# @copyright : pluie.org <http://www.pluie.org/>
#
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# #
# This file is part of pluie-yaml. # This file is part of pluie-yaml.
# #
# pluie-yaml is free software (free as in speech) : you can redistribute it # pluie-yaml is free software (free as in speech) : you can redistribute it
# and/or modify it under the terms of the GNU General Public License as # and/or modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation, either version 3 of the License, # published by the Free Software Foundation, either version 3 of the License,
# or (at your option) any later version. # or (at your option) any later version.
# #
# lib-yaml is distributed in the hope that it will be useful, but WITHOUT # pluie-yaml is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
# more details. # more details.
#
# You should have received a copy of the GNU General Public License
# along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
#
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# #
# You should have received a copy of the GNU General Public License
# along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
#
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #^#
# -------------------------------------------------------- # --------------------------------------------------------
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
lib="pluie-yaml-0.5" lib="pluie-yaml-0.6"
c1="\033[1;38;5;215m" samples=" src/vala/Pluie/Samples.YamlObject.vala \
c2="\033[1;38;5;97m" src/vala/Pluie/Samples.YamlChild.vala \
cok="\033[1;38;5;37m" src/vala/Pluie/Samples.YamlStruct.vala "
cko="\033[1;38;5;204m" c1="\033[1;38;5;215m"
off="\033[m" c2="\033[1;38;5;97m"
resume= cok="\033[1;38;5;37m"
cko="\033[1;38;5;204m"
off="\033[m"
resume=
# -------------------------------------------------------- # --------------------------------------------------------
function build.title() function build.title()
{ {
@ -63,6 +65,11 @@ function build.lib()
cd "$DIR" cd "$DIR"
build.title "$lib LIB BUILD" build.title "$lib LIB BUILD"
meson --prefix=/usr ./ build meson --prefix=/usr ./ build
if [ "$1" -eq 1 ]; then
meson configure -DLOCAL=true build
else
meson configure -DLOCAL=false build
fi
if [ "$UID" != "0" ]; then if [ "$UID" != "0" ]; then
sudo ninja -v install -C build sudo ninja -v install -C build
else else
@ -95,9 +102,9 @@ function build.sample()
local f="$(basename $1)" local f="$(basename $1)"
local fx="${f:0:-5}" local fx="${f:0:-5}"
local state="FAILED" local state="FAILED"
local cmd="valac -v --pkg gee-0.8 --pkg gio-2.0 --pkg pluie-echo-0.2 --pkg $lib $1 -o ./bin/$fx" local cmd="valac -v -X -Wno-discarded-qualifiers -X -Wno-deprecated-declarations --pkg gee-0.8 --pkg gio-2.0 --pkg pluie-echo-0.2 --pkg $lib $samples $1 -o ./bin/$fx"
build.title "$f SAMPLE BUILD" build.title "$f SAMPLE BUILD"
echo -e "\n$cmd" echo
$cmd $cmd
local done=$? local done=$?
resume="$resume$done$f " resume="$resume$done$f "
@ -110,10 +117,10 @@ function build.main()
if [ ! -z "$1" ]; then if [ ! -z "$1" ]; then
onefile="./samples/$1.vala" onefile="./samples/$1.vala"
fi fi
build.lib build.lib "$2"
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
build.samples $onefile build.samples $onefile
fi fi
} }
build.main "$1" build.main "$1" "${2:-0}"

View File

@ -1,38 +0,0 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.5
* @type : library
* @date : 2018
* @licence : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org/>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* This file is part of pluie-yaml.
*
* pluie-yaml is free software (free as in speech) : 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 3 of the License,
* or (at your option) any later version.
*
* pluie-yaml 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 pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/
namespace Pluie
{
namespace Yaml
{
protected const string INSTALL_PATH = "@INSTALL_PATH@";
public const string DATA_PATH = "@DATA_PATH@";
public const string VERSION = "@VERSION@";
}
}

View File

@ -1,107 +1,87 @@
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #^# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#
# @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
# @version : 0.60
# @type : library
# @date : 2018
# @license : GPLv3.0 <http://www.gnu.org/licenses/>
# @author : a-Sansara <[dev]at[pluie]dot[org]>
# @copyright : pluie.org <http://www.pluie.org>
# #
# @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
# @version : 0.5
# @type : library
# @date : 2018
# @licence : GPLv3.0 <http://www.gnu.org/licenses/>
# @author : a-Sansara <[dev]at[pluie]dot[org]>
# @copyright : pluie.org <http://www.pluie.org/>
#
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# #
# This file is part of pluie-yaml. # This file is part of pluie-yaml.
# #
# lib-yaml is free software (free as in speech) : you can redistribute it # pluie-yaml is free software (free as in speech) : you can redistribute it
# and/or modify it under the terms of the GNU General Public License as # and/or modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation, either version 3 of the License, # published by the Free Software Foundation, either version 3 of the License,
# or (at your option) any later version. # or (at your option) any later version.
# #
# pluie-yaml is distributed in the hope that it will be useful, but WITHOUT # pluie-yaml is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
# more details. # more details.
#
# You should have received a copy of the GNU General Public License
# along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
#
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# #
project('pluie-yaml', 'vala', 'c', version:'0.5') # You should have received a copy of the GNU General Public License
# along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
#
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #^#
project('pluie-yaml', ['vala', 'c'], version:'0.6')
cc = meson.get_compiler('c') cc = meson.get_compiler('c')
dep_glib = dependency('glib-2.0')
dep_gobject = dependency('gobject-2.0')
dep_gmodule = dependency('gmodule-2.0')
dep_gio = dependency('gio-2.0')
dep_gee = dependency('gee-0.8')
dep_echo = dependency('pluie-echo-0.2')
dep_m = cc.find_library('m', required : false)
dep_yaml = cc.find_library('yaml', required : true)
#~ add_global_link_arguments('-lyaml', language : 'c')
version = meson.project_version() version = meson.project_version()
bindir = join_paths(get_option('prefix'), get_option('bindir')) bindir = join_paths(get_option('prefix'), get_option('bindir'))
datadir = join_paths(get_option('prefix'), get_option('datadir'), 'pluie/yaml') datadir = join_paths(get_option('prefix'), get_option('datadir'), 'pluie/yaml')
libdir = join_paths(get_option('prefix'), get_option('libdir'), 'pkgconfig') libdir = join_paths(get_option('prefix'), get_option('libdir'), 'pkgconfig')
incdir = join_paths(get_option('prefix'), get_option('includedir'), 'pluie') incdir = join_paths(get_option('prefix'), get_option('includedir'), 'pluie')
conf = configuration_data() conf = configuration_data()
conf.set('VERSION' , version) conf.set('VERSION' , version)
conf.set('INSTALL_PATH', bindir) conf.set('INSTALL_PATH', bindir)
conf.set('DATA_PATH' , datadir) if get_option('LOCAL')
conf.set('DATA_PATH' , './resources')
else
conf.set('DATA_PATH' , datadir)
endif
configure_file( configure_file(
input: 'install.vala.in', input: 'src/vala/install.vala.in',
output: 'install.vala', output: 'install.vala',
configuration: conf configuration: conf
) )
sources = [ install_data([
'build/install.vala', 'resources/main.yml',
'src/vala/Pluie/Io.Reader.vala', 'resources/tag.yml',
'src/vala/Pluie/Io.StreamLineMark.vala', 'resources/bug.yml',
'src/vala/Pluie/Yaml.global.vala', 'resources/test.yml',
'src/vala/Pluie/Yaml.AbstractChild.vala', 'resources/test.json'
'src/vala/Pluie/Yaml.AbstractNode.vala', ],
'src/vala/Pluie/Yaml.Builder.vala', install_dir : datadir
'src/vala/Pluie/Yaml.Collection.vala', )
'src/vala/Pluie/Yaml.Config.vala',
'src/vala/Pluie/Yaml.Dumper.vala',
'src/vala/Pluie/Yaml.Event.vala',
'src/vala/Pluie/Yaml.Example.vala',
'src/vala/Pluie/Yaml.ExampleChild.vala',
'src/vala/Pluie/Yaml.ExampleStruct.vala',
'src/vala/Pluie/Yaml.Finder.vala',
'src/vala/Pluie/Yaml.GeeBuilder.vala',
'src/vala/Pluie/Yaml.Loader.vala',
'src/vala/Pluie/Yaml.Mapping.vala',
'src/vala/Pluie/Yaml.Node.vala',
'src/vala/Pluie/Yaml.Object.vala',
'src/vala/Pluie/Yaml.Processor.vala',
'src/vala/Pluie/Yaml.Register.vala',
'src/vala/Pluie/Yaml.Root.vala',
'src/vala/Pluie/Yaml.Scalar.vala',
'src/vala/Pluie/Yaml.Scanner.vala',
'src/vala/Pluie/Yaml.Sequence.vala',
'src/vala/Pluie/Yaml.Tag.vala',
'src/c/yaml.c'
]
install_data('resources/main.yml', install_dir : datadir)
install_data('resources/tag.yml', install_dir : datadir)
install_data('resources/test.yml', install_dir : datadir)
install_data('resources/test.json', install_dir : datadir)
install_data('resources/config/db.yml', install_dir : join_paths(datadir, 'config')) install_data('resources/config/db.yml', install_dir : join_paths(datadir, 'config'))
install_data('resources/config/subdir/test.yml', install_dir : join_paths(datadir, 'config/subdir')) install_data('resources/config/subdir/test.yml', install_dir : join_paths(datadir, 'config/subdir'))
subdir('src')
add_global_arguments('-D DEBUG', language : 'valac')
libpluie_yaml = library( libpluie_yaml = library(
'pluie-yaml-' + version, 'pluie-yaml-' + version,
sources, src_files,
vala_header : 'pluie_yaml.h', vala_header : 'pluie_yaml.h',
vala_vapi : 'pluie-yaml-' +version+'.vapi', vala_vapi : 'pluie-yaml-' +version+'.vapi',
dependencies : [dep_glib, dep_gobject, dep_gmodule, dep_gio, dep_gee, dep_echo, dep_m, dep_yaml], dependencies : [
dependency('glib-2.0'),
dependency('gobject-2.0'),
dependency('gmodule-2.0'),
dependency('gio-2.0'),
dependency('gee-0.8'),
dependency('pluie-echo-0.2'),
cc.find_library('m', required : false),
cc.find_library('yaml', required : true)
],
install : true, install : true,
version : version, version : version,
install_dir : [get_option('libdir'), incdir, true] install_dir : [get_option('libdir'), incdir, true]

1
meson_options.txt Normal file
View File

@ -0,0 +1 @@
option('LOCAL', type : 'boolean', value : false)

82
resources/bug.yml Normal file
View File

@ -0,0 +1,82 @@
%YAML 1.2
%TAG !v! tag:pluie.org,2018:vala/
---
!v!Pluie.Berel.Meta meta :
!v!Gee.ArrayList keys :
- software : berel; <https://git.pluie.org/pluie/berel>
- version : 0.24
- type : program
- date : 2018
- license : GPLv3.0; <http://www.gnu.org/licenses/>
- author : a-Sansara; <[dev]at[pluie]dot[org]>
- copyright : pluie.org; <http://www.pluie.org>
!v!Gee.ArrayList headers :
- !v!Pluie.Berel.HeaderDef sh :
file :
- build.sh
startline : 2 # to embed shebang before header tpl
sepline :
motif : "# "
repeat : 40
comment :
start : "#^#"
end : "#^#"
begin : "# "
- !v!Pluie.Berel.HeaderDef meson :
file :
- meson.build
- src/meson.build
sepline :
motif : "# "
repeat : 40
comment :
start : "#^#"
end : "#^#"
begin : "# "
- !v!Pluie.Berel.HeaderDef vala :
dir :
- src
extension :
- .vala
sepline :
motif : " *"
repeat : 40
comment :
start : "/*^"
end : "^*/"
begin : " * "
tpl : |
^sepline^
^keys^
^sepline^
This file is part of ^software.name^.
^software.name^ is free software (free as in speech) : 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 3 of the License,
or (at your option) any later version.
^software.name^ 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 ^software.name^. If not, see <http://www.gnu.org/licenses/>.
^sepline^
product:
- sku : BL394D
quantity : 5
description : Basketball
price : 450.00
- sku : BL394D
quantity : 5
description : Basketball
price : 450.00

File diff suppressed because one or more lines are too long

View File

@ -1,7 +1,7 @@
%YAML 1.2 %YAML 1.2
%TAG !v! tag:pluie.org,2018:vala/ %TAG !v! tag:pluie.org,2018:vala/
--- ---
!v!Pluie.Yaml.Example test1 : !v!Pluie.Samples.YamlObject test1 :
myname : test1object myname : test1object
type_int : !v!int 3306 type_int : !v!int 3306
type_bool : !v!bool false type_bool : !v!bool false
@ -12,12 +12,12 @@
type_float : !v!float 42.36 type_float : !v!float 42.36
type_double : !v!double 95542123.4579512128 type_double : !v!double 95542123.4579512128
type_enum : !v!Pluie.Yaml.NODE_TYPE scalar # or int type_enum : !v!Pluie.Yaml.NODE_TYPE scalar # or int
!v!Pluie.Yaml.ExampleChild type_object : !v!Pluie.Samples.YamlChild type_object :
toto : totovalue1 toto : totovalue1
tata : tatavalue1 tata : tatavalue1
titi : 123 titi : 123
tutu : 1 tutu : 1
!v!Pluie.Yaml.ExampleStruct type_struct : !v!Pluie.Samples.YamlStruct type_struct :
red : !v!uint8 214 red : !v!uint8 214
green : !v!uint8 78 green : !v!uint8 78
blue : 153 blue : 153
@ -43,3 +43,35 @@
tata : tatavalue4 tata : tatavalue4
titi : 44 titi : 44
tutu : 0 tutu : 0
!v!Gee.HashMap type_gee_hmap :
- key : key1
!v!Pluie.Samples.YamlChild val :
toto : key1toto
tata : kay1tata
titi : 5
tutu : 0
- key : key2
val :
toto : key2toto
tata : kay2tata
titi : 46
tutu : 1
!v!Gee.HashMap type_gee_hmap2 :
- !v!Pluie.Samples.YamlStruct key :
red : !v!uint8 214
green : !v!uint8 78
blue : 153
!v!Pluie.Samples.YamlChild val :
toto : key1toto
tata : kay1tata
titi : 5
tutu : 0
- key :
red : !v!uint8 82
green : !v!uint8 109
blue : 35
val :
toto : key2toto
tata : kay2tata
titi : 46
tutu : 1

View File

@ -1,20 +1,20 @@
{ {
"glossary": { "glossary": {
"title": "example glossary", "title": "example glossary",
"GlossDiv": { "GlossDiv": {
"title": "S", "title": "S",
"GlossList": { "GlossList": {
"GlossEntry": { "GlossEntry": {
"ID": "SGML", "ID": "SGML",
"SortAs": "SGML", "SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language", "GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML", "Acronym": "SGML",
"Abbrev": "ISO 8879:1986", "Abbrev": "ISO 8879:1986",
"GlossDef": { "GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.", "para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"] "GlossSeeAlso": ["GML", "XML"]
}, },
"GlossSee": "markup" "GlossSee": "markup"
} }
} }
} }

View File

@ -1,3 +1,32 @@
/*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* This file is part of pluie-yaml.
*
* pluie-yaml is free software (free as in speech) : 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 3 of the License,
* or (at your option) any later version.
*
* pluie-yaml 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 pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml> * @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
@ -40,7 +69,7 @@ int main (string[] args)
var done = false; var done = false;
of.title ("Pluie Yaml Library", Pluie.Yaml.VERSION, "a-sansara"); of.title ("Pluie Yaml Library", Pluie.Yaml.VERSION, "a-sansara");
Pluie.Yaml.DEBUG = false; Pluie.Yaml.DEBUG = true;
var loader = new Yaml.Loader (path, true, true); var loader = new Yaml.Loader (path, true, true);
if ((done = loader.done)) { if ((done = loader.done)) {
var root = loader.get_nodes (); var root = loader.get_nodes ();

85
samples/yaml-bug.vala Normal file
View File

@ -0,0 +1,85 @@
/*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* This file is part of pluie-yaml.
*
* pluie-yaml is free software (free as in speech) : 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 3 of the License,
* or (at your option) any later version.
*
* pluie-yaml 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 pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.5
* @type : library
* @date : 2018
* @licence : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org/>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* This file is part of pluie-yaml.
*
* pluie-yaml is free software (free as in speech) : 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 3 of the License,
* or (at your option) any later version.
*
* pluie-yaml 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 pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/
using GLib;
using Gee;
using Pluie;
int main (string[] args)
{
Echo.init(false);
var path = Yaml.DATA_PATH + "/bug.yml";
var done = false;
of.title ("Pluie Yaml Library", Pluie.Yaml.VERSION, "a-sansara");
Pluie.Yaml.DEBUG = false;
Yaml.Loader.PACK_NESTED_ENTRIES = true;
var loader = new Yaml.Loader (path, true, true);
if ((done = loader.done)) {
var root = loader.get_nodes ();
done = root != null;
}
of.rs (done);
of.echo ();
return (int) done;
}

View File

@ -1,3 +1,32 @@
/*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* This file is part of pluie-yaml.
*
* pluie-yaml is free software (free as in speech) : 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 3 of the License,
* or (at your option) any later version.
*
* pluie-yaml 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 pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml> * @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>

View File

@ -1,3 +1,32 @@
/*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* This file is part of pluie-yaml.
*
* pluie-yaml is free software (free as in speech) : 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 3 of the License,
* or (at your option) any later version.
*
* pluie-yaml 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 pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml> * @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
@ -46,30 +75,13 @@ int main (string[] args)
if ((done = root != null)) { if ((done = root != null)) {
root.display_childs (); root.display_childs ();
of.action("Yaml.Node", "to_yaml_string"); of.action("Yaml.Node", "to_yaml_string");
string yaml = root.to_yaml_string (); string genpath = "./tag-generated.yml";
try { var writter = new Io.Writter (genpath, true);
string genpath = "./tag-generated.yml"; long written = 0;
// an output file in the current working directory writter.write (root.to_yaml_string ().data, out written);
var file = File.new_for_path (genpath); of.echo ("write %ld bytes in `%s`".printf ((long) written, genpath));
// delete if file already exists Yaml.Dumper.show_yaml_string (root, true, true, true);
if (file.query_exists ()) {
file.delete ();
}
var dos = new DataOutputStream (file.create (FileCreateFlags.REPLACE_DESTINATION));
uint8[] data = yaml.data;
long written = 0;
while (written < data.length) {
// sum of the bytes of 'text' that already have been written to the stream
written += dos.write (data[written:data.length]);
}
of.echo ("write %lld bytes in `%s`".printf ((long) written, genpath));
Yaml.Dumper.show_yaml_string (root, true, true, true);
} catch (Error e) {
stderr.printf ("%s\n", e.message);
return 1;
}
} }

View File

@ -1,3 +1,32 @@
/*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* This file is part of pluie-yaml.
*
* pluie-yaml is free software (free as in speech) : 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 3 of the License,
* or (at your option) any later version.
*
* pluie-yaml 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 pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml> * @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>

View File

@ -1,3 +1,32 @@
/*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* This file is part of pluie-yaml.
*
* pluie-yaml is free software (free as in speech) : 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 3 of the License,
* or (at your option) any later version.
*
* pluie-yaml 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 pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml> * @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>

View File

@ -1,3 +1,32 @@
/*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* This file is part of pluie-yaml.
*
* pluie-yaml is free software (free as in speech) : 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 3 of the License,
* or (at your option) any later version.
*
* pluie-yaml 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 pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml> * @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>

View File

@ -1,3 +1,32 @@
/*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* This file is part of pluie-yaml.
*
* pluie-yaml is free software (free as in speech) : 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 3 of the License,
* or (at your option) any later version.
*
* pluie-yaml 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 pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml> * @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>

132
samples/yaml-serialize.vala Normal file
View File

@ -0,0 +1,132 @@
/*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* This file is part of pluie-yaml.
*
* pluie-yaml is free software (free as in speech) : 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 3 of the License,
* or (at your option) any later version.
*
* pluie-yaml 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 pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
using GLib;
using Gee;
using Pluie;
public void test_object(Samples.YamlObject obj)
{
of.action ("Test Object", obj.yaml_name);
obj.type_object.method_a ();
if (obj.type_gee_al != null) {
of.keyval("yaml_name" , "%s" .printf(obj.yaml_name));
of.keyval("type_int" , "%d" .printf(obj.type_int));
of.keyval("type_bool" , "%s" .printf(obj.type_bool.to_string ()));
of.keyval("type_char" , "%c" .printf(obj.type_char));
of.keyval("type_string" , "%s" .printf(obj.type_string));
of.keyval("type_uchar" , "%u" .printf(obj.type_uchar));
of.keyval("type_uint" , "%u" .printf(obj.type_uint));
of.keyval("type_float" , "%f" .printf(obj.type_float));
of.keyval("type_double" , "%f" .printf(obj.type_double));
of.keyval("type_struct" , "%s" .printf(obj.type_struct.to_string ()));
of.keyval("type_enum" , "%d (%s)" .printf(obj.type_enum, obj.type_enum.infos()));
of.keyval("type_gee_al", "(%s<%s>)" .printf(obj.type_gee_al.get_type ().name (), obj.type_gee_al.element_type.name ()));
foreach (var v in obj.type_gee_al) {
of.echo(" - item : %g".printf (v));
}
of.keyval("type_object", "(%s)" .printf(obj.type_object.get_type ().name ()));
of.keyval(" toto" , "%s (string)" .printf(obj.type_object.toto));
of.keyval(" tapa" , "%s (string)" .printf(obj.type_object.tata));
of.keyval(" titi" , "%d (int)" .printf(obj.type_object.titi));
of.keyval(" tutu" , "%s (bool)" .printf(obj.type_object.tutu.to_string ()));
obj.type_object.method_a ();
of.keyval("type_gee_alobject", "(%s<%s>)" .printf(obj.type_gee_alobject.get_type ().name (), obj.type_gee_alobject.element_type.name ()));
foreach (var child in obj.type_gee_alobject) {
of.echo(" == entry (%s) ==".printf(child.get_type ().name ()));
of.keyval(" toto" , "%s (string)" .printf(child.toto));
of.keyval(" tapa" , "%s (string)" .printf(child.tata));
of.keyval(" titi" , "%d (int)" .printf(child.titi));
of.keyval(" tutu" , "%s (bool)" .printf(child.tutu.to_string ()));
child.method_a ();
}
if (obj.type_gee_hmap != null) {
of.keyval("type_gee_hmap", "(%s<%s, %s>)" .printf(obj.type_gee_hmap.get_type ().name (), obj.type_gee_hmap.key_type.name (), obj.type_gee_hmap.value_type.name ()));
foreach (var child in obj.type_gee_hmap.entries) {
of.echo(" == entry (%s) ==".printf(child.key));
of.keyval(" toto" , "%s (string)" .printf(child.value.toto));
of.keyval(" tapa" , "%s (string)" .printf(child.value.tata));
of.keyval(" titi" , "%d (int)" .printf(child.value.titi));
of.keyval(" tutu" , "%s (bool)" .printf(child.value.tutu.to_string ()));
}
}
if (obj.type_gee_hmap2 != null) {
of.keyval("type_gee_hmap", "(%s<%s, %s>)" .printf(obj.type_gee_hmap2.get_type ().name (), obj.type_gee_hmap2.key_type.name (), obj.type_gee_hmap2.value_type.name ()));
foreach (var child in obj.type_gee_hmap2.entries) {
of.echo(" == key ==");
of.keyval(" obj :" , "%s" .printf(child.key.to_string ()));
of.echo(" == val (%s) ==".printf(child.value.get_type ( ).name ()));
of.keyval(" toto" , "%s (string)" .printf(child.value.toto));
of.keyval(" tapa" , "%s (string)" .printf(child.value.tata));
of.keyval(" titi" , "%d (int)" .printf(child.value.titi));
of.keyval(" tutu" , "%s (bool)" .printf(child.value.tutu.to_string ()));
}
}
else {
of.echo ("hmap2 null");
}
}
}
int main (string[] args)
{
Echo.init(false);
var path = Yaml.DATA_PATH + "/tag.yml";
var done = false;
of.title ("Pluie Yaml Library", Pluie.Yaml.VERSION, "a-sansara");
Pluie.Yaml.DEBUG = false;
var config = new Yaml.Config (path, true);
var root = config.root_node ();
if ((done = root != null)) {
root.display_childs ();
of.action ("Yaml build first child", root.first ().name);
var obj = (Samples.YamlObject) Yaml.Builder.from_node (root.first ());
test_object (obj);
of.action ("Serialize", obj.yaml_name);
uint8[] zdata = Yaml.serialize (obj);
of.echo ("zdata size : %ld".printf (zdata.length));
for (var i = 0; i < zdata.length; i++) {
print ("%02x", zdata[i]);
}
of.action ("Deserialize zdata from", obj.yaml_name);
root = Yaml.deserialize (zdata);
root.display_childs ();
of.action ("Yaml build first child", obj.yaml_name);
obj = (Samples.YamlObject) Yaml.Builder.from_node (root.first ());
test_object (obj);
}
return (int) done;
}

View File

@ -1,3 +1,32 @@
/*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* This file is part of pluie-yaml.
*
* pluie-yaml is free software (free as in speech) : 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 3 of the License,
* or (at your option) any later version.
*
* pluie-yaml 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 pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml> * @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
@ -60,11 +89,12 @@ int main (string[] args)
node = node.next_sibling (); node = node.next_sibling ();
} }
} }
// hard code // hard code
Yaml.Example? o = null; Samples.YamlObject? o = null;
foreach (var entry in list.entries) { foreach (var entry in list.entries) {
if ((o = (Yaml.Example) entry.value)!=null) { if ((o = (Samples.YamlObject) entry.value)!=null) {
of.action ("Getting Hard coded values for Yaml.Object %s".printf (of.c (ECHO.MICROTIME).s (o.get_type().name ())), entry.key); of.action ("Getting Hard coded values for Samples.YamlObject %s".printf (of.c (ECHO.MICROTIME).s (o.get_type().name ())), entry.key);
of.keyval("yaml_name" , "%s" .printf(o.yaml_name)); of.keyval("yaml_name" , "%s" .printf(o.yaml_name));
of.keyval("type_int" , "%d" .printf(o.type_int)); of.keyval("type_int" , "%d" .printf(o.type_int));
of.keyval("type_bool" , "%s" .printf(o.type_bool.to_string ())); of.keyval("type_bool" , "%s" .printf(o.type_bool.to_string ()));
@ -99,6 +129,31 @@ int main (string[] args)
child.method_a (); child.method_a ();
} }
} }
if (o.type_gee_hmap != null) {
of.keyval("type_gee_hmap", "(%s<%s, %s>)" .printf(o.type_gee_hmap.get_type ().name (), o.type_gee_hmap.key_type.name (), o.type_gee_hmap.value_type.name ()));
foreach (var child in o.type_gee_hmap.entries) {
of.echo(" == entry (%s) ==".printf(child.key));
of.keyval(" toto" , "%s (string)" .printf(child.value.toto));
of.keyval(" tapa" , "%s (string)" .printf(child.value.tata));
of.keyval(" titi" , "%d (int)" .printf(child.value.titi));
of.keyval(" tutu" , "%s (bool)" .printf(child.value.tutu.to_string ()));
}
}
if (o.type_gee_hmap2 != null) {
of.keyval("type_gee_hmap", "(%s<%s, %s>)" .printf(o.type_gee_hmap2.get_type ().name (), o.type_gee_hmap2.key_type.name (), o.type_gee_hmap2.value_type.name ()));
foreach (var child in o.type_gee_hmap2.entries) {
of.echo(" == key ==");
of.keyval(" obj :" , "%s" .printf(child.key.to_string ()));
of.echo(" == val (%s) ==".printf(child.value.get_type ( ).name ()));
of.keyval(" toto" , "%s (string)" .printf(child.value.toto));
of.keyval(" tapa" , "%s (string)" .printf(child.value.tata));
of.keyval(" titi" , "%d (int)" .printf(child.value.titi));
of.keyval(" tutu" , "%s (bool)" .printf(child.value.tutu.to_string ()));
}
}
else {
of.echo ("hmap2 null");
}
} }
} }

View File

@ -1,3 +1,32 @@
/*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* This file is part of pluie-yaml.
*
* pluie-yaml is free software (free as in speech) : 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 3 of the License,
* or (at your option) any later version.
*
* pluie-yaml 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 pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml> * @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
@ -46,7 +75,7 @@ int main (string[] args)
root.first ().display_childs (); root.first ().display_childs ();
of.action ("with signal Yaml.Builder.from_node", root.first ().name); of.action ("with signal Yaml.Builder.from_node", root.first ().name);
Yaml.Example obj = (Yaml.Example) Yaml.Builder.from_node (root.first ()); Samples.YamlObject obj = (Samples.YamlObject) Yaml.Builder.from_node (root.first ());
obj.type_object.method_a (); obj.type_object.method_a ();
if (obj.type_gee_al != null) { if (obj.type_gee_al != null) {
of.keyval("type_gee_al", "(%s<%s>)" .printf(obj.type_gee_al.get_type ().name (), obj.type_gee_al.element_type.name ())); of.keyval("type_gee_al", "(%s<%s>)" .printf(obj.type_gee_al.get_type ().name (), obj.type_gee_al.element_type.name ()));

View File

@ -1,3 +1,32 @@
/*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* This file is part of pluie-yaml.
*
* pluie-yaml is free software (free as in speech) : 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 3 of the License,
* or (at your option) any later version.
*
* pluie-yaml 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 pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml> * @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
@ -103,13 +132,14 @@ int main (string[] args)
var done = false; var done = false;
of.title ("Pluie Yaml Library", Pluie.Yaml.VERSION, "a-sansara"); of.title ("Pluie Yaml Library", Pluie.Yaml.VERSION, "a-sansara");
Pluie.Yaml.DEBUG = true; Pluie.Yaml.DEBUG = false;
var config = new Yaml.Config (path, true); var config = new Yaml.Config (path, true);
var root = config.root_node () as Yaml.Root; var root = config.root_node ();
root.display_childs ();
root.first ().display_childs (); root.first ().display_childs ();
of.action ("Yaml.Builder.from_node", root.first ().name); of.action ("Yaml.Builder.from_node", root.first ().name);
var obj = (Yaml.Example) Yaml.Builder.from_node (root.first ()); Samples.YamlObject obj = (Samples.YamlObject) Yaml.Builder.from_node (root.first ());
obj.type_object.method_a (); obj.type_object.method_a ();
if (obj.type_gee_al != null) { if (obj.type_gee_al != null) {
of.keyval("type_gee_al", "(%s)" .printf(obj.type_gee_al.get_type ().name ())); of.keyval("type_gee_al", "(%s)" .printf(obj.type_gee_al.get_type ().name ()));
@ -123,91 +153,6 @@ int main (string[] args)
n.display_childs (); n.display_childs ();
} }
//~ double?[] data = { 46548970.54324546464, 2.2, 2.1, 2.4, 5.7 };
//~ var list = new Gee.ArrayList<double?> ();
//~ list.add_all_array (data);
//~ Gee.ArrayList* p = list;
//~ var mynode = new Yaml.Root ();
//~ Yaml.GeeBuilder.arraylist_to_node (p, "Gee.ArrayList<double?>", mynode);
//~ string[] data2 = { "mastring1", "mastring2", "mastring3", "mastring4", "mastring5" };
//~ var list2 = new Gee.ArrayList<string> ();
//~ list2.add_all_array (data2);
//~ p = list2;
//~ Yaml.GeeBuilder.arraylist_to_node (p, "Gee.ArrayList<string>", mynode);
//~ int[] data3 = { 123, 456, 9875, 64205, 9924563 };
//~ var list3 = new Gee.ArrayList<int> ();
//~ list3.add_all_array (data3);
//~ p = list3;
//~ Yaml.GeeBuilder.arraylist_to_node (p, "Gee.ArrayList<int>", mynode);
//~ int64?[] data4 = { 123, 456, -9875, 64205, -549924563 };
//~ var list4 = new Gee.ArrayList<int64?> ();
//~ list4.add_all_array (data4);
//~ p = list4;
//~ Yaml.GeeBuilder.arraylist_to_node (p, "Gee.ArrayList<int64?>", mynode);
//~ long?[] data5 = { 123, 456, -9875, 64205, -549924563 };
//~ var list5 = new Gee.ArrayList<long?> ();
//~ list5.add_all_array (data5);
//~ p = list5;
//~ Yaml.GeeBuilder.arraylist_to_node (p, "Gee.ArrayList<long?>", mynode);
//~ uint[] data6 = { 123, 456, 19875, 64205, 1549924563 };
//~ var list6 = new Gee.ArrayList<uint> ();
//~ list6.add_all_array (data6);
//~ p = list6;
//~ Yaml.GeeBuilder.arraylist_to_node (p, "Gee.ArrayList<uint>", mynode);
//~ uint8[] data7 = { 97, 99, 122, 72 };
//~ var list7 = new Gee.ArrayList<uint8> ();
//~ list7.add_all_array (data7);
//~ foreach (uint8 u in list7) {
//~ of.echo(" - item7 : %u".printf (u));
//~ }
//~ p = list7;
//~ Yaml.GeeBuilder.arraylist_to_node (p, "Gee.ArrayList<uint8>", mynode);
//~ uchar[] data8 = { 'a', 'c', 'z', 'H' };
//~ var list8 = new Gee.ArrayList<uchar> ();
//~ list8.add_all_array (data8);
//~ foreach (uchar u in list8) {
//~ of.echo(" - item8 : %c".printf (u));
//~ }
//~ p = list8;
//~ Yaml.GeeBuilder.arraylist_to_node (p, "Gee.ArrayList<uchar>", mynode, true);
//~ unichar[] data9 = { '水', 'は', '方', 'の', 'é', 'à', 'ï', 'Ô' };
//~ var list9 = new Gee.ArrayList<unichar> ();
//~ list9.add_all_array (data9);
//~ foreach (unichar u in list9) {
//~ of.echo(" - item9 : %s (%lu)".printf (u.to_string (), u));
//~ }
//~ p = list9;
//~ Yaml.GeeBuilder.arraylist_to_node (p, "Gee.ArrayList<unichar?>", mynode, true);
//~ uint64?[] data10 = { 4521, 8954354, 4535213213 };
//~ var list10 = new Gee.ArrayList<uint64?> ();
//~ list10.add_all_array (data10);
//~ foreach (uint64 u in list10) {
//~ of.echo(" - item10 : %s".printf (u.to_string ()));
//~ }
//~ p = list10;
//~ Yaml.GeeBuilder.arraylist_to_node (p, "Gee.ArrayList<uint64?>", mynode);
//~ mynode.display_childs ();
of.rs (done); of.rs (done);
of.echo (); of.echo ();
return (int) done; return (int) done;

View File

@ -1,3 +1,32 @@
/*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* This file is part of pluie-yaml.
*
* pluie-yaml is free software (free as in speech) : 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 3 of the License,
* or (at your option) any later version.
*
* pluie-yaml 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 pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml> * @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>

View File

@ -1,32 +1,31 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.5
* @type : library
* @date : 2018
* @licence : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org/>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* This file is part of pluie-yaml. * This file is part of pluie-yaml.
* *
* pluie-yaml is free software (free as in speech) : you can redistribute it * pluie-yaml is free software (free as in speech) : you can redistribute it
* and/or modify it under the terms of the GNU General Public License as * and/or modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the License, * published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version. * or (at your option) any later version.
* *
* pluie-yaml is distributed in the hope that it will be useful, but WITHOUT * pluie-yaml is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details. * more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>. * along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
*/
#include <stdio.h> #include <stdio.h>
#include <yaml.h> #include <yaml.h>

58
src/meson.build Normal file
View File

@ -0,0 +1,58 @@
#^# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#
# @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
# @version : 0.60
# @type : library
# @date : 2018
# @license : GPLv3.0 <http://www.gnu.org/licenses/>
# @author : a-Sansara <[dev]at[pluie]dot[org]>
# @copyright : pluie.org <http://www.pluie.org>
#
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#
# This file is part of pluie-yaml.
#
# pluie-yaml is free software (free as in speech) : 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 3 of the License,
# or (at your option) any later version.
#
# pluie-yaml 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 pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
#
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #^#
src_files = [
'src/c/yaml.c',
'build/install.vala',
'src/vala/Pluie/Io.Reader.vala',
'src/vala/Pluie/Io.InputChunkStream.vala',
'src/vala/Pluie/Io.StreamLineMark.vala',
'src/vala/Pluie/Io.Writter.vala',
'src/vala/Pluie/Yaml.global.vala',
'src/vala/Pluie/Yaml.AbstractChild.vala',
'src/vala/Pluie/Yaml.AbstractNode.vala',
'src/vala/Pluie/Yaml.Builder.vala',
'src/vala/Pluie/Yaml.Collection.vala',
'src/vala/Pluie/Yaml.Config.vala',
'src/vala/Pluie/Yaml.Dumper.vala',
'src/vala/Pluie/Yaml.Event.vala',
'src/vala/Pluie/Yaml.Finder.vala',
'src/vala/Pluie/Yaml.GeeBuilder.vala',
'src/vala/Pluie/Yaml.Loader.vala',
'src/vala/Pluie/Yaml.Mapping.vala',
'src/vala/Pluie/Yaml.Node.vala',
'src/vala/Pluie/Yaml.Object.vala',
'src/vala/Pluie/Yaml.Processor.vala',
'src/vala/Pluie/Yaml.Register.vala',
'src/vala/Pluie/Yaml.Root.vala',
'src/vala/Pluie/Yaml.Scalar.vala',
'src/vala/Pluie/Yaml.Scanner.vala',
'src/vala/Pluie/Yaml.Sequence.vala',
'src/vala/Pluie/Yaml.Tag.vala'
]

View File

@ -0,0 +1,126 @@
/*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* This file is part of pluie-yaml.
*
* pluie-yaml is free software (free as in speech) : 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 3 of the License,
* or (at your option) any later version.
*
* pluie-yaml 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 pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
using GLib;
/**
* basic class to read file by chunk
*/
class Pluie.Io.InputChunkStream : Object
{
/**
*
*/
protected ulong chunk_index;
/**
*
*/
protected uint8 chunk_size;
/**
*
*/
protected uint8 buffer_size;
/**
*
*/
protected uint8[] buffer;
/**
*
*/
protected FileStream fs;
/**
* default constructor
* @param path the path to read
* @param chunk_size the chunk size
*/
public InputChunkStream (string path, uint8 chunk_size)
{
this.chunk_size = chunk_size;
this.buffer = new uint8[this.chunk_size];
this.fs = FileStream.open (path, "r");
this.chunk_index = 0;
}
/**
* indicate if end of file of readed file is reached
*/
public bool eof ()
{
bool stop = this.fs.eof ();
if (stop) {
this.buffer = null;
}
return stop;
}
/**
* read chunk_size
*/
public unowned uint8[] read ()
{
if (!this.eof ()) {
this.buffer_size = (uint8) this.fs.read (this.buffer);
this.chunk_index++;
}
return this.buffer;
}
/**
* retriew the buffer size (chunk_size)
*/
public unowned uint8 get_buffer_size ()
{
return this.buffer_size;
}
/**
* retriew content of buffer
*/
public unowned uint8[] get_buffer ()
{
return this.buffer;
}
/**
* retriew chunk index
*/
public ulong get_chunk_index ()
{
return this.chunk_index-1;
}
/**
* retriew chunk size
*/
public uint8 get_chunk_size ()
{
return this.chunk_size;
}
}

View File

@ -1,32 +1,31 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.5
* @type : library
* @date : 2018
* @licence : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org/>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* This file is part of pluie-yaml. * This file is part of pluie-yaml.
* *
* pluie-yaml is free software (free as in speech) : you can redistribute it * pluie-yaml is free software (free as in speech) : you can redistribute it
* and/or modify it under the terms of the GNU General Public License as * and/or modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the License, * published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version. * or (at your option) any later version.
* *
* pluie-yaml is distributed in the hope that it will be useful, but WITHOUT * pluie-yaml is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details. * more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>. * along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
*/
using GLib; using GLib;
using Gee; using Gee;
@ -142,4 +141,18 @@ public class Pluie.Io.Reader
return this.readable; return this.readable;
} }
/**
* get content of loaded file
*/
public string? get_contents ()
{
string? read = null;
try {
FileUtils.get_contents (this.path, out read);
}
catch(GLib.Error e) {
of.error (e.message);
}
return read;
}
} }

View File

@ -1,32 +1,31 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.5
* @type : library
* @date : 2018
* @licence : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org/>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* This file is part of pluie-yaml. * This file is part of pluie-yaml.
* *
* pluie-yaml is free software (free as in speech) : you can redistribute it * pluie-yaml is free software (free as in speech) : you can redistribute it
* and/or modify it under the terms of the GNU General Public License as * and/or modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the License, * published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version. * or (at your option) any later version.
* *
* pluie-yaml is distributed in the hope that it will be useful, but WITHOUT * pluie-yaml is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details. * more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>. * along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
*/
/** /**
* a class representing a stream mark recording a line and it's position in the stream * a class representing a stream mark recording a line and it's position in the stream

View File

@ -0,0 +1,115 @@
/*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* This file is part of pluie-yaml.
*
* pluie-yaml is free software (free as in speech) : 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 3 of the License,
* or (at your option) any later version.
*
* pluie-yaml 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 pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
using GLib;
using Gee;
using Pluie;
/**
* basic writter class
*/
public class Pluie.Io.Writter
{
/**
* current file path
*/
public string path { get; internal set; }
/**
* current file
*/
public File file { get; internal set; }
/**
* stream used to read the file
*/
DataOutputStream stream;
/**
* construct a writter
* @param path the path to write
* @param delete_if_exists flag indicating if existing file must be removed first
*/
public Writter (string path, bool delete_if_exists = false)
{
this.path = path;
this.file = File.new_for_path (path);
try {
if (delete_if_exists) {
this.delete_file(this.file);
}
this.file = File.new_for_path (path);
this.stream = new DataOutputStream(file.create (FileCreateFlags.NONE));
if (!file.query_exists ()) {
of.error ("cannot create file '%s'".printf (path));
}
}
catch (GLib.Error e) {
of.error (e.message);
}
}
/**
* write specified data to current file
* @param data the data to write
* @param written the written data size
*/
public bool write (uint8[] data, out long? written = null)
{
bool done = false;
long w = 0;
try {
while (w < data.length) {
// sum of the bytes that already have been written to the stream
w += stream.write (data[w:data.length]);
}
done = w == data.length;
}
catch (GLib.Error e) {
of.error (e.message);
}
written = w;
return done;
}
/**
* delete current or specified file
* @param file the file to delete (current file if null)
*/
public bool delete_file(File? file = null)
{
bool done = false;
try {
((file == null) ? this.file : file).delete ();
done = true;
}
catch (GLib.Error e) {
of.error (e.message);
}
return done;
}
}

View File

@ -1,37 +1,36 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.5
* @type : library
* @date : 2018
* @licence : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org/>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* This file is part of pluie-yaml. * This file is part of pluie-yaml.
* *
* pluie-yaml is free software (free as in speech) : you can redistribute it * pluie-yaml is free software (free as in speech) : you can redistribute it
* and/or modify it under the terms of the GNU General Public License as * and/or modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the License, * published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version. * or (at your option) any later version.
* *
* pluie-yaml is distributed in the hope that it will be useful, but WITHOUT * pluie-yaml is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details. * more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>. * along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
*/
/** /**
* a test class to implements yamlize * a YamlCHild test class
*/ */
public class Pluie.Yaml.ExampleChild : Yaml.Object public class Pluie.Samples.YamlChild : Yaml.Object
{ {
public string toto { get; set; } public string toto { get; set; }
public string tata { get; set; } public string tata { get; set; }

View File

@ -0,0 +1,204 @@
/*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* This file is part of pluie-yaml.
*
* pluie-yaml is free software (free as in speech) : 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 3 of the License,
* or (at your option) any later version.
*
* pluie-yaml 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 pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
using GLib;
using Gee;
using Pluie;
/**
* a YamlObject test class
*/
public class Pluie.Samples.YamlObject : Yaml.Object
{
public string myname { get; set; }
public string type_string { get; set; }
public int type_int { get; set; }
public uint type_uint { get; set; }
public float type_float { get; set; }
public double type_double { get; set; }
public char type_char { get; set; }
public uchar type_uchar { get; set; }
public unichar type_unichar { get; set; }
public short type_short { get; set; }
public ushort type_ushort { get; set; }
public long type_long { get; set; }
public ulong type_ulong { get; set; }
public size_t type_size_t { get; set; }
public ssize_t type_ssize_t { get; set; }
public int8 type_int8 { get; set; }
public uint8 type_uint8 { get; set; }
public int16 type_int16 { get; set; }
public uint16 type_uint16 { get; set; }
public int32 type_int32 { get; set; }
public uint32 type_uint32 { get; set; }
public int64 type_int64 { get; set; }
public uint64 type_uint64 { get; set; }
public bool type_bool { get; set; }
public Samples.YamlChild type_object { get; set; }
public Yaml.NODE_TYPE type_enum { get; set; }
public Samples.YamlStruct type_struct { get; set; }
public Gee.ArrayList<double?> type_gee_al { get; set; }
public Gee.ArrayList<Samples.YamlChild> type_gee_alobject { get; set; }
public Gee.HashMap<string, Samples.YamlChild> type_gee_hmap { get; set; }
public Gee.HashMap<YamlStruct?, Samples.YamlChild> type_gee_hmap2 { get; set; }
/**
*
*/
static construct
{
Yaml.Register.add_type (
typeof (Samples.YamlObject),
typeof (Samples.YamlChild),
typeof (Samples.YamlStruct),
typeof (Gee.ArrayList),
typeof (Gee.HashMap)
);
}
/**
*
*/
protected override void yaml_construct ()
{
this.type_gee_al = new Gee.ArrayList<double?> ();
this.type_gee_alobject = new Gee.ArrayList<Samples.YamlChild> ();
this.type_gee_hmap = new Gee.HashMap<string, Samples.YamlChild> ();
this.type_gee_hmap2 = new Gee.HashMap<Samples.YamlStruct?, Samples.YamlChild> ();
Yaml.Register.add_namespace("Gee", "Pluie.Samples");
Dbg.msg ("%s (%s) instantiated".printf (this.yaml_name, this.get_type().name ()), Log.LINE, Log.FILE);
}
/**
*
*/
protected override void yaml_init ()
{
Dbg.msg ("%s (%s) initialized".printf (this.yaml_name, this.get_type().name ()), Log.LINE, Log.FILE);
}
/**
*
*/
public override void populate_from_node (string name, GLib.Type type, Yaml.Node node) {
if (type == typeof (Samples.YamlStruct)) {
this.type_struct = Samples.YamlStruct.from_yaml_node (node);
}
else if (type == typeof (Gee.ArrayList)) {
foreach (var child in node) {
switch (name) {
case "type_gee_al":
this.type_gee_al.add(double.parse(child.data));
break;
case "type_gee_alobject":
this.type_gee_alobject.add((Samples.YamlChild) Yaml.Builder.from_node (child, typeof (Samples.YamlChild)));
break;
}
}
}
else if (type == typeof (Gee.HashMap)) {
Yaml.Mapping? c;
foreach (var child in node) {
c = child as Yaml.Mapping;
switch (name) {
case "type_gee_hmap":
Value key = c.item ("key").val (typeof (string));
var entry = (Samples.YamlChild) Yaml.Builder.from_node (c.item ("val"), typeof (Samples.YamlChild));
this.type_gee_hmap.set((string) key, entry);
break;
case "type_gee_hmap2":
var key = Samples.YamlStruct.from_yaml_node (c.item ("key"));
var entry = (Samples.YamlChild) Yaml.Builder.from_node (c.item ("val"), typeof (Samples.YamlChild));
this.type_gee_hmap2.set(key, entry);
break;
}
}
}
else {
var obj = Yaml.Builder.from_node(node, type);
if (name == "type_object") {
this.set (node.name, (Samples.YamlChild) obj);
}
else {
this.set (node.name, obj);
}
}
}
/**
*
*/
public override Yaml.Node? populate_to_node (string name, GLib.Type type, Yaml.Node parent) {
Yaml.Node? node = null;
if (type == typeof (Samples.YamlStruct)) {
node = this.type_struct.to_yaml_node (name);
}
else if (type == typeof (Gee.ArrayList)) {
switch (name) {
case "type_gee_al" :
Yaml.GeeBuilder.fundamental_arraylist_to_node (this.type_gee_al, name, parent);
break;
case "type_gee_alobject" :
Yaml.Object.objects_collection_to_node (this.type_gee_alobject, name, parent);
break;
}
}
else if (type == typeof (Gee.HashMap)) {
switch (name) {
case "type_gee_hmap" :
Yaml.Object.objects_mapkstr_to_node (this.type_gee_hmap, name, parent);
break;
case "type_gee_hmap2" :
this.hmap2_to_node (name, parent);
break;
}
}
else {
base.populate_to_node (name, type, parent);
}
return node;
}
/**
*
*/
public void hmap2_to_node (string name, Yaml.Node? parent = null)
{
of.echo (Log.METHOD);
var node = new Yaml.Sequence (parent, name);
node.tag = new Yaml.Tag (Yaml.Register.resolve_namespace_type(this.type_gee_hmap2.get_type ()), "v");
var i = 0;
foreach (var child in this.type_gee_hmap2.entries) {
var entryNode = new Yaml.Mapping (node, "_%d".printf (i));
entryNode.add (child.key.to_yaml_node ("key"));
Yaml.Builder.to_node ((GLib.Object) child.value, entryNode, false, null, "val");
}
}
}

View File

@ -1,36 +1,36 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.5
* @type : library
* @date : 2018
* @licence : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org/>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* This file is part of pluie-yaml. * This file is part of pluie-yaml.
* *
* pluie-yaml is free software (free as in speech) : you can redistribute it * pluie-yaml is free software (free as in speech) : you can redistribute it
* and/or modify it under the terms of the GNU General Public License as * and/or modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the License, * published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version. * or (at your option) any later version.
* *
* pluie-yaml is distributed in the hope that it will be useful, but WITHOUT * pluie-yaml is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details. * more details.
*
* You should have received a copy of the GNU General Public License
* along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/
/**
* *
* You should have received a copy of the GNU General Public License
* along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
/**
* YamlStruct test structure
*/ */
public struct Pluie.Yaml.ExampleStruct public struct Pluie.Samples.YamlStruct
{ {
/** /**
* *
@ -46,11 +46,12 @@ public struct Pluie.Yaml.ExampleStruct
public uint blue; public uint blue;
/** /**
* * get a new YamlStruct populated by specified node
* @param node the source Yaml.Node
*/ */
public static ExampleStruct from_yaml_node (Yaml.Node node) public static YamlStruct from_yaml_node (Yaml.Node node)
{ {
ExampleStruct s = {}; YamlStruct s = {};
foreach (var child in node) { foreach (var child in node) {
var v = child.val (typeof (uint)); var v = child.val (typeof (uint));
switch (child.name) { switch (child.name) {
@ -79,6 +80,6 @@ public struct Pluie.Yaml.ExampleStruct
*/ */
public string to_string () public string to_string ()
{ {
return "%s(red:%u,green:%u,blue:%u)".printf ((typeof (ExampleStruct)).name (), this.red, this.green, this.blue); return "%s(red:%u,green:%u,blue:%u)".printf ((typeof (YamlStruct)).name (), this.red, this.green, this.blue);
} }
} }

View File

@ -1,32 +1,31 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.5
* @type : library
* @date : 2018
* @licence : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org/>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* This file is part of pluie-yaml. * This file is part of pluie-yaml.
* *
* pluie-yaml is free software (free as in speech) : you can redistribute it * pluie-yaml is free software (free as in speech) : you can redistribute it
* and/or modify it under the terms of the GNU General Public License as * and/or modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the License, * published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version. * or (at your option) any later version.
* *
* pluie-yaml is distributed in the hope that it will be useful, but WITHOUT * pluie-yaml is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details. * more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>. * along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
*/
using GLib; using GLib;
using Pluie; using Pluie;
@ -88,7 +87,7 @@ public abstract class Pluie.Yaml.AbstractChild : Yaml.AbstractNode
} }
/** /**
* check if first chikd * check if last chikd
*/ */
public bool is_last () public bool is_last ()
{ {
@ -96,7 +95,7 @@ public abstract class Pluie.Yaml.AbstractChild : Yaml.AbstractNode
} }
/** /**
* check if first chikd * get nextt sibling node
*/ */
public Yaml.Node? next_sibling () public Yaml.Node? next_sibling ()
{ {
@ -104,7 +103,7 @@ public abstract class Pluie.Yaml.AbstractChild : Yaml.AbstractNode
} }
/** /**
* check if first chikd * get previous sibling node
*/ */
public Yaml.Node? previous_sibling () public Yaml.Node? previous_sibling ()
{ {
@ -124,6 +123,9 @@ public abstract class Pluie.Yaml.AbstractChild : Yaml.AbstractNode
return done; return done;
} }
/**
* coutn childs. return 0
*/
public virtual int count () public virtual int count ()
{ {
return 0; return 0;
@ -136,6 +138,4 @@ public abstract class Pluie.Yaml.AbstractChild : Yaml.AbstractNode
{ {
this.anchor = id; this.anchor = id;
} }
} }

View File

@ -1,32 +1,31 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.5
* @type : library
* @date : 2018
* @licence : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org/>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* This file is part of pluie-yaml. * This file is part of pluie-yaml.
* *
* pluie-yaml is free software (free as in speech) : you can redistribute it * pluie-yaml is free software (free as in speech) : you can redistribute it
* and/or modify it under the terms of the GNU General Public License as * and/or modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the License, * published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version. * or (at your option) any later version.
* *
* pluie-yaml is distributed in the hope that it will be useful, but WITHOUT * pluie-yaml is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details. * more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>. * along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
*/
using GLib; using GLib;
using Gee; using Gee;
@ -89,6 +88,16 @@ public abstract class Pluie.Yaml.AbstractNode : GLib.Object
return node != null && node.uuid == this.uuid; return node != null && node.uuid == this.uuid;
} }
/**
* get a presentation string of current Yaml.Node
* @param withIndent display indentation formating
* @param withParent display parent node name
* @param withUuid display node uuid
* @param withCount display number of childs
* @param withRefCount display number of reference
* @param withTag display tag information
* @param withType display node type
*/
public virtual string to_string ( public virtual string to_string (
bool withIndent = Yaml.DBG_SHOW_INDENT, bool withIndent = Yaml.DBG_SHOW_INDENT,
bool withParent = Yaml.DBG_SHOW_PARENT, bool withParent = Yaml.DBG_SHOW_PARENT,
@ -104,14 +113,18 @@ public abstract class Pluie.Yaml.AbstractNode : GLib.Object
} }
/** /**
* get a yaml presentation of current Yaml.Node * get a gracefull yaml presentation of current Yaml.Node
* @param indent number of space for indentation
* @param show_doc flag indicating if the document start must be print
* @param show_tags flag indicating if tags must be print
* @param show_fullkeys flag indicating if full key definition must be print
*
*/ */
public string to_yaml_string ( public string to_yaml_string (
int indent = Yaml.Dumper.DEFAULT_INDENT, int indent = Yaml.Dumper.DEFAULT_INDENT,
bool show_doc = Yaml.Dumper.SHOW_DOC, bool show_doc = Yaml.Dumper.SHOW_DOC,
bool show_tags = Yaml.Dumper.SHOW_TAGS, bool show_tags = Yaml.Dumper.SHOW_TAGS,
bool show_fullkeys = Yaml.Dumper.SHOW_FULL_KEYS, bool show_fullkeys = Yaml.Dumper.SHOW_FULL_KEYS
bool show_colors = Yaml.Dumper.SHOW_COLORS
) )
{ {
return Yaml.Dumper.dump ( return Yaml.Dumper.dump (
@ -119,8 +132,7 @@ public abstract class Pluie.Yaml.AbstractNode : GLib.Object
indent, indent,
show_doc, show_doc,
show_tags, show_tags,
show_fullkeys, show_fullkeys
show_colors
); );
} }
} }

View File

@ -1,32 +1,31 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.5
* @type : library
* @date : 2018
* @licence : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org/>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* This file is part of pluie-yaml. * This file is part of pluie-yaml.
* *
* pluie-yaml is free software (free as in speech) : you can redistribute it * pluie-yaml is free software (free as in speech) : you can redistribute it
* and/or modify it under the terms of the GNU General Public License as * and/or modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the License, * published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version. * or (at your option) any later version.
* *
* pluie-yaml is distributed in the hope that it will be useful, but WITHOUT * pluie-yaml is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details. * more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>. * along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
*/
using GLib; using GLib;
using Gee; using Gee;
@ -54,7 +53,8 @@ public class Pluie.Yaml.Builder
} }
/** /**
* * retriew GLib.Type related to specified vala name
* type must be registered
*/ */
public static GLib.Type? type_from_string (string name) public static GLib.Type? type_from_string (string name)
{ {
@ -64,6 +64,7 @@ public class Pluie.Yaml.Builder
/** /**
* retriew GLib.Type related to specified vala name * retriew GLib.Type related to specified vala name
* type may be not registered
* @param name a valid vala identifier name * @param name a valid vala identifier name
*/ */
public static Type type_from_vala (string name) public static Type type_from_vala (string name)
@ -89,20 +90,40 @@ public class Pluie.Yaml.Builder
return type; return type;
} }
/**
*
*/
private static string resolve_c_subname (string name) throws GLib.RegexError
{
MatchInfo? mi = null;
bool update = false;
var reg = new Regex ("([A-Z]{1}[a-z]+)");
string? str = null;
var sb = new StringBuilder();
for (reg.match (name, 0, out mi) ; mi.matches () ; mi.next ()) {
if ((str = mi.fetch (1)) != null && str.length > 0) {
sb.append ("%s%s%s".printf (update ? "_" : "", str[0].tolower ().to_string (), str.substring(1)));
if (!update) update = true;
}
}
return update ? sb.str : name;
}
/** /**
* retriew corresponding c name related to specified vala name * retriew corresponding c name related to specified vala name
* @param name a valid vala identifier name * @param name a valid vala identifier name
*/ */
public static string resolve_c_name (string name) public static string resolve_c_name (string name)
{ {
string? str = null; string? str = null;
MatchInfo? mi = null; MatchInfo? mi = null;
StringBuilder sb = new StringBuilder (); StringBuilder sb = new StringBuilder ();
bool begin = true; bool begin = true;
try { try {
var reg = new Regex ("([^.]*).?"); var reg = new Regex ("([^.]*).?");
for (reg.match (name, 0, out mi) ; mi.matches () ; mi.next ()) { for (reg.match (name, 0, out mi) ; mi.matches () ; mi.next ()) {
if ((str = mi.fetch (1)) != null && str.length > 0) { str = Yaml.Builder.resolve_c_subname(mi.fetch (1));
if (str != null && str.length > 0) {
if (!begin) sb.append_unichar ('_'); if (!begin) sb.append_unichar ('_');
else begin = false; else begin = false;
sb.append_unichar (str[0].tolower ()); sb.append_unichar (str[0].tolower ());
@ -120,52 +141,49 @@ public class Pluie.Yaml.Builder
private delegate Type dlgType(); private delegate Type dlgType();
/** /**
* * Build an Object from a YYaml.Node
* @param node the source Yaml.Node
* @param otype used for recursion only
*/ */
public static GLib.Object? from_node (Yaml.Node node, Type otype = GLib.Type.INVALID) public static GLib.Object? from_node (Yaml.Node node, Type otype = GLib.Type.INVALID)
{ {
GLib.Object? obj = null; GLib.Object? obj = null;
try { Type type = node.tag != null ? type_from_tag (node.tag.value) : otype;
Type type = node.tag != null ? type_from_tag (node.tag.value) : otype; if (type != Type.INVALID) {
if (type != Type.INVALID) { Yaml.dbg_action ("vala type founded", "%s (%s)".printf (type.name (), type.to_string ()));
Yaml.dbg_action ("vala type founded", "%s (%s)".printf (type.name (), type.to_string ())); if (type.is_object ()) {
if (type.is_object ()) { obj = GLib.Object.new (type);
obj = GLib.Object.new (type); if (type.is_a (typeof (Yaml.Object))) {
if (type.is_a (typeof (Yaml.Object))) { (obj as Yaml.Object).set ("yaml_name", node.name);
(obj as Yaml.Object).set ("yaml_name", node.name); (obj as Yaml.Object).yaml_construct ();
(obj as Yaml.Object).yaml_construct (); }
} if (node!= null && !node.empty ()) {
if (node!= null && !node.empty ()) { GLib.ParamSpec? def = null;
GLib.ParamSpec? def = null; Yaml.Node? scalar = null;
Yaml.Node? scalar = null; foreach (var child in node) {
foreach (var child in node) { if ((def = obj.get_class ().find_property (child.name)) != null) {
if ((def = obj.get_class ().find_property (child.name)) != null) { Yaml.dbg ("== prop [%s] type is : %s".printf (child.name, def.value_type.name ()));
Yaml.dbg ("== prop [%s] type is : %s".printf (child.name, def.value_type.name ())); if (child.ntype.is_single_pair () && (scalar = child.first ()) != null) {
if (child.ntype.is_single_pair () && (scalar = child.first ()) != null) { set_from_scalar (ref obj, def.name, def.value_type, scalar.data);
set_from_scalar (ref obj, def.name, def.value_type, scalar.data);
}
else if (child.ntype.is_collection ()) {
set_from_collection (ref obj, type, child, def.value_type);
}
} }
else { else if (child.ntype.is_collection ()) {
of.warn ("property %s not found".printf (child.name)); set_from_collection (ref obj, type, child, def.value_type);
} }
} }
else {
of.warn ("property %s not found".printf (child.name));
}
} }
} }
} }
if (obj == null) {
of.warn ("searched type not found : %s".printf (type.name ()));
}
else {
if (type.is_a (typeof (Yaml.Object))) {
(obj as Yaml.Object).yaml_init ();
}
}
} }
catch (GLib.Error e) { if (obj == null) {
of.warn (e.message); of.warn ("searched type not found : %s".printf (type.name ()));
}
else {
if (type.is_a (typeof (Yaml.Object))) {
(obj as Yaml.Object).yaml_init ();
}
} }
return obj; return obj;
} }
@ -173,7 +191,7 @@ public class Pluie.Yaml.Builder
/** /**
* *
*/ */
public static void set_from_collection (ref GLib.Object obj, Type parentType, Yaml.Node node, Type type) private static void set_from_collection (ref GLib.Object obj, Type parentType, Yaml.Node node, Type type)
{ {
Yaml.dbg (" > set_from_collection %s (%s)".printf (node.name, type.name ())); Yaml.dbg (" > set_from_collection %s (%s)".printf (node.name, type.name ()));
if (type.is_a (typeof (Yaml.Object)) || Yaml.Register.is_registered_type (parentType, type)) { if (type.is_a (typeof (Yaml.Object)) || Yaml.Register.is_registered_type (parentType, type)) {
@ -187,7 +205,7 @@ public class Pluie.Yaml.Builder
/** /**
* *
*/ */
public static void set_from_scalar (ref GLib.Object obj, string name, GLib.Type type, string data) private static void set_from_scalar (ref GLib.Object obj, string name, GLib.Type type, string data)
{ {
GLib.Value v = GLib.Value(type); GLib.Value v = GLib.Value(type);
Yaml.dbg_action ("Auto setting property value %s".printf (of.c (ECHO.MICROTIME).s (type.name ())), name); Yaml.dbg_action ("Auto setting property value %s".printf (of.c (ECHO.MICROTIME).s (type.name ())), name);
@ -296,7 +314,7 @@ public class Pluie.Yaml.Builder
/** /**
* *
*/ */
public static void set_enum_value (ref Value v, GLib.Type type, string data) private static void set_enum_value (ref Value v, GLib.Type type, string data)
{ {
EnumClass kenum = (EnumClass) type.class_ref(); EnumClass kenum = (EnumClass) type.class_ref();
unowned EnumValue? enumval = kenum.get_value_by_name(data); unowned EnumValue? enumval = kenum.get_value_by_name(data);
@ -314,7 +332,7 @@ public class Pluie.Yaml.Builder
//~ of.echo ("enumValue : %d".printf (enumval.value)); //~ of.echo ("enumValue : %d".printf (enumval.value));
} }
public static string transform_param_name (string name) private static string transform_param_name (string name)
{ {
return name.replace("-", "_"); return name.replace("-", "_");
} }
@ -322,6 +340,19 @@ public class Pluie.Yaml.Builder
/** /**
* *
*/ */
private static Yaml.Tag add_tag (GLib.Type type)
{
return new Yaml.Tag (Yaml.Register.resolve_namespace_type(type), Yaml.YAML_VALA_PREFIX);
}
/**
* transform an Yaml.Object to his corresponding Yaml.Node
* @param obj the obj to transform
* @param parent the parent node
* @param root indicates if node must be add to a root node, if true a Yaml.Root node is return
* @param index for sequence entry anonymous mapping block
* @param property_name name of property name related to obj
*/
public static Yaml.Node to_node (GLib.Object obj, Yaml.Node? parent = null, bool root = true, int? index = null, string? property_name = null) public static Yaml.Node to_node (GLib.Object obj, Yaml.Node? parent = null, bool root = true, int? index = null, string? property_name = null)
{ {
string node_name = ""; string node_name = "";
@ -339,7 +370,7 @@ public class Pluie.Yaml.Builder
if (def.value_type.is_a (typeof (Yaml.Object)) || Yaml.Register.is_registered_type(obj.get_type (), def.value_type)) { if (def.value_type.is_a (typeof (Yaml.Object)) || Yaml.Register.is_registered_type(obj.get_type (), def.value_type)) {
var child = (obj as Yaml.Object).populate_to_node(name, def.value_type, node); var child = (obj as Yaml.Object).populate_to_node(name, def.value_type, node);
if (child != null) { if (child != null) {
child.tag = new Yaml.Tag (Yaml.Register.resolve_namespace_type(def.value_type), "v"); child.tag = Yaml.Builder.add_tag (def.value_type);
node.add (child); node.add (child);
} }
} }
@ -348,7 +379,7 @@ public class Pluie.Yaml.Builder
obj.get (name, out enumval); obj.get (name, out enumval);
string data = enumval.value.to_string (); string data = enumval.value.to_string ();
var n = new Yaml.Mapping.with_scalar (node, name, (string) data); var n = new Yaml.Mapping.with_scalar (node, name, (string) data);
n.tag = new Yaml.Tag (Yaml.Register.resolve_namespace_type(def.value_type), "v"); n.tag = Yaml.Builder.add_tag (def.value_type);
} }
else if (def.value_type.is_fundamental ()) { else if (def.value_type.is_fundamental ()) {
string data = Yaml.Builder.get_basic_type_value(obj, def.value_type, name); string data = Yaml.Builder.get_basic_type_value(obj, def.value_type, name);
@ -361,13 +392,7 @@ public class Pluie.Yaml.Builder
} }
} }
} }
node.tag = new Yaml.Tag (Yaml.Register.resolve_namespace_type(obj.get_type ()), "v"); node.tag = Yaml.Builder.add_tag (obj.get_type ());
if (root) { return root ? new Yaml.Root(null, true, node) : node;
var rootNode = new Yaml.Root();
rootNode.add (node);
rootNode.tag_directives["!v!"] = "tag:pluie.org,2018:vala/";
return rootNode;
}
else return node;
} }
} }

View File

@ -1,32 +1,31 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.5
* @type : library
* @date : 2018
* @licence : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org/>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* This file is part of pluie-yaml. * This file is part of pluie-yaml.
* *
* pluie-yaml is free software (free as in speech) : you can redistribute it * pluie-yaml is free software (free as in speech) : you can redistribute it
* and/or modify it under the terms of the GNU General Public License as * and/or modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the License, * published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version. * or (at your option) any later version.
* *
* pluie-yaml is distributed in the hope that it will be useful, but WITHOUT * pluie-yaml is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details. * more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>. * along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
*/
using GLib; using GLib;
using Gee; using Gee;
@ -38,14 +37,15 @@ using Pluie;
public interface Pluie.Yaml.Collection public interface Pluie.Yaml.Collection
{ {
/** /**
* retriew the child at index * retriew a child node throught specifiyed index
* @param index index of seached child * @param index index of searched child
* @return the matching child node
*/ */
public abstract Yaml.Node? item (int index); public abstract Yaml.Node? item (int index);
/** /**
* check if contains specifyed child node * check if current node contains the specifiyed child node
* @param child the child to check * @param child the child to check
*/ */
public abstract bool contains (Yaml.Node child); public abstract bool contains (Yaml.Node child);
@ -67,23 +67,25 @@ public interface Pluie.Yaml.Collection
/** /**
* retriew the first child * retriew the first child
* @return the first child node
*/ */
public abstract Yaml.Node? first (); public abstract Yaml.Node? first ();
/** /**
* retriew the last child * retriew the last child
* @return the last child node
*/ */
public abstract Yaml.Node? last (); public abstract Yaml.Node? last ();
/** /**
* retriew the next sibling of specifiyed child node * retriew the next sibling of specifiyed child node
* @param child the the reference child node * @param child the the reference child node
*/ */
public abstract Yaml.Node? child_next_sibling (Yaml.Node child); public abstract Yaml.Node? child_next_sibling (Yaml.Node child);
/** /**
* retriew the previous sibling of specifiyed child node * retriew the previous sibling of specifiyed child node
* @param child the the reference child node * @param child the the reference child node
*/ */
public abstract Yaml.Node? child_previous_sibling (Yaml.Node child); public abstract Yaml.Node? child_previous_sibling (Yaml.Node child);

View File

@ -1,40 +1,76 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.5
* @type : library
* @date : 2018
* @licence : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org/>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* This file is part of pluie-yaml. * This file is part of pluie-yaml.
* *
* pluie-yaml is free software (free as in speech) : you can redistribute it * pluie-yaml is free software (free as in speech) : you can redistribute it
* and/or modify it under the terms of the GNU General Public License as * and/or modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the License, * published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version. * or (at your option) any later version.
* *
* pluie-yaml is distributed in the hope that it will be useful, but WITHOUT * pluie-yaml is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details. * more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>. * along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
*/
/** /**
* a class to manage Yaml configuration files * Yaml.Config class to manage Yaml configuration files and provide a Yaml.Root node.
*
* Yaml.Config use a Yaml.Finder to easily retriew a particular node. <<BR>>
* The Yaml.Config.get method is bind to the Yaml.Finder.find method with <<BR>>
* the root node as context. (more details on {@link Yaml.Finder})
*
* {{{
* var config = new Yaml.Config (path);
* var node = config.get ("ship-to.address.city{0}");
* if (node != null) {
* of.echo (node.data)
* }
* }}}
*
* You can use a special import clause to embed a set of yaml files into your current document.
*
* {{{
* # | use special key word '^imports' to import other yaml config files in
* # | current yaml document
* # | '^imports' must be uniq and a direct child of root node
* # | imported files are injected as mapping nodes at top document level
* # | so you cannot use keys that already exists in the document
* ^imports :
* # you can redefine default import path with the special key '^path'
* # if you do not use it, the default path value will be the current directory
* # redefined path values are relative to the current directory (if a relative path
* # is provided)
* ^path : ./config
* # you can also define any other var by prefixing key with ^
* ^dir : subdir
* # and use it enclosed by ^
* # here final test path will be "./config/subdir/test.yml"
* test : ^dir^/test.yml
* # here final db path will be "./config/db.yml"
* db : db.yml
* }}}
*
* {{doc/img/pluie-yaml-imports2.png}}
*/ */
public class Pluie.Yaml.Config public class Pluie.Yaml.Config
{ {
/** /**
* * special char use in imports clause & imports var
*/ */
const char IMPORTS_SPE = '^'; const char IMPORTS_SPE = '^';
@ -46,7 +82,7 @@ public class Pluie.Yaml.Config
/** /**
* *
*/ */
public bool displayFile { get; internal set; } public bool display_file { get; internal set; }
/** /**
* Yaml Loader * Yaml Loader
@ -70,24 +106,30 @@ public class Pluie.Yaml.Config
/** /**
* construct a Yaml Config for specifiyed path * construct a Yaml Config for specifiyed path
* @param path the yaml path file to load
* @param display_file flag to display file
* @param mode Yaml.FIND_MODE to apply to finder
*/ */
public Config (string? path = null, bool displayFile = false, Yaml.FIND_MODE mode = Yaml.FIND_MODE.DOT) public Config (string? path = null, bool display_file = false, Yaml.FIND_MODE mode = Yaml.FIND_MODE.DOT)
{ {
Yaml.MODE = mode; Yaml.MODE = mode;
this.path = path; this.path = path;
this.displayFile = displayFile; this.display_file = display_file;
if (this.path != null) { if (this.path != null) {
this.loader = new Yaml.Loader (this.path, displayFile, false); this.loader = new Yaml.Loader (this.path, display_file, false);
Yaml.Node? root = this.loader.get_nodes (); if (this.loader.done) {
if (root != null) { Yaml.Node? root = this.loader.get_nodes ();
this.finder = new Yaml.Finder(root); if (root != null) {
this.get_imports (); this.finder = new Yaml.Finder(root);
this.get_imports ();
}
} }
} }
} }
/** /**
* find node matching specifiyed keyPath * find node matching specifiyed keyPath
* see {@link Yaml.Finder} for precisions
*/ */
public new Yaml.Node? get (string keyPath) public new Yaml.Node? get (string keyPath)
{ {
@ -99,15 +141,15 @@ public class Pluie.Yaml.Config
} }
/** /**
* * retriew the corresponding Yaml.Root node for loaded yaml file
*/ */
public Yaml.Node root_node () public Yaml.Root? root_node ()
{ {
return this.finder.context; return this.finder!=null ? this.finder.context as Yaml.Root : null;
} }
/** /**
* find node matching specifiyed keyPath *
*/ */
protected void get_imports () protected void get_imports ()
{ {
@ -138,7 +180,7 @@ public class Pluie.Yaml.Config
Yaml.Node? n = null; Yaml.Node? n = null;
Yaml.Config? conf = null; Yaml.Config? conf = null;
foreach(var entry in this.paths.entries) { foreach(var entry in this.paths.entries) {
conf = new Yaml.Config(entry.value, this.displayFile); conf = new Yaml.Config(entry.value, this.display_file);
sub = conf.loader.get_nodes (); sub = conf.loader.get_nodes ();
n = new Yaml.Mapping (root, entry.key); n = new Yaml.Mapping (root, entry.key);
foreach(var subnode in sub.list) { foreach(var subnode in sub.list) {

View File

@ -1,68 +1,67 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.5
* @type : library
* @date : 2018
* @licence : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org/>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* This file is part of pluie-yaml. * This file is part of pluie-yaml.
* *
* pluie-yaml is free software (free as in speech) : you can redistribute it * pluie-yaml is free software (free as in speech) : you can redistribute it
* and/or modify it under the terms of the GNU General Public License as * and/or modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the License, * published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version. * or (at your option) any later version.
* *
* pluie-yaml is distributed in the hope that it will be useful, but WITHOUT * pluie-yaml is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details. * more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>. * along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
*/
using GLib; using GLib;
using Gee; using Gee;
using Pluie; using Pluie;
/** /**
* interface representing a collection node * a Yaml.Dumper to dump a Yaml.Node to his file representation
*/ */
public class Pluie.Yaml.Dumper public class Pluie.Yaml.Dumper
{ {
/** /**
* * default number space indentation to apply for all nodes. default : 4
*/ */
public static int DEFAULT_INDENT { get; internal set; default = 4; } public static int DEFAULT_INDENT { get; internal set; default = 4; }
/** /**
* * flag indicating if the document start must be print
*/ */
public static bool SHOW_DOC { get; internal set; default = true; } public static bool SHOW_DOC { get; internal set; default = true; }
/** /**
* * flag indicating if tags must be print
*/ */
public static bool SHOW_TAGS { get; internal set; default = true; } public static bool SHOW_TAGS { get; internal set; default = true; }
/** /**
* * flag indicating if full key definition must be print
*/ */
public static bool SHOW_FULL_KEYS { get; internal set; default = false; } public static bool SHOW_FULL_KEYS { get; internal set; default = false; }
/** /**
* * flag indicating if enable printing colors
*/ */
public static bool SHOW_COLORS { get; internal set; default = false; } static bool SHOW_COLOR { get; internal set; default = false; }
/** /**
* * flag indicating if line number must be print
*/ */
public static bool SHOW_LINE { get; internal set; default = false; } static bool SHOW_LINE { get; internal set; default = false; }
/** /**
* * a line counter
*/ */
static int line { get; internal set; default = 0; } static int line { get; internal set; default = 0; }
@ -75,6 +74,13 @@ public class Pluie.Yaml.Dumper
/** /**
* get a gracefull yaml presentation of current Yaml.Node * get a gracefull yaml presentation of current Yaml.Node
* @param node the node to dump
* @param show_line flag indicating if line number must be print
* @param show_color flag indicating if enable printing colors
* @param show_tags flag indicating if tags must be print
* @param show_doc flag indicating if the document start must be print
* @param indent number of space for indentation
* @param show_fullkeys flag indicating if full key definition must be print
*/ */
public static void show_yaml_string ( public static void show_yaml_string (
Yaml.Node? node, Yaml.Node? node,
@ -86,30 +92,29 @@ public class Pluie.Yaml.Dumper
bool show_fullkeys = Yaml.Dumper.SHOW_FULL_KEYS bool show_fullkeys = Yaml.Dumper.SHOW_FULL_KEYS
) )
{ {
bool prev1 = SHOW_LINE;
bool prev2 = SHOW_COLORS;
bool prev3 = SHOW_TAGS;
SHOW_LINE = show_line; SHOW_LINE = show_line;
SHOW_COLORS = show_color; SHOW_COLOR = show_color;
SHOW_TAGS = show_tags; string yaml = dump (node, indent, show_doc, show_tags, show_fullkeys);
string yaml = dump (node, indent, show_doc, show_tags, show_fullkeys, show_color); SHOW_LINE = false;
SHOW_LINE = prev1; SHOW_COLOR = false;
SHOW_COLORS = prev2;
SHOW_TAGS = prev3;
of.action ("Yaml string representation for", node!= null ? node.name : "null"); of.action ("Yaml string representation for", node!= null ? node.name : "null");
print ("%s%s%s", "\n", yaml, "\n"); print ("%s%s%s", "\n", yaml, "\n");
} }
/** /**
* get a yaml presentation of current Yaml.Node * get a yaml presentation of specified Yaml.Node
* @param node the node to dump
* @param indent number of space for indentation
* @param show_doc flag indicating if the document start must be print
* @param show_tags flag indicating if tags must be print
* @param show_fullkeys flag indicating if full key definition must be print
*/ */
public static string dump ( public static string dump (
Yaml.Node? node, Yaml.Node? node,
int indent = Yaml.Dumper.DEFAULT_INDENT, int indent = Yaml.Dumper.DEFAULT_INDENT,
bool show_doc = Yaml.Dumper.SHOW_DOC, bool show_doc = Yaml.Dumper.SHOW_DOC,
bool show_tags = Yaml.Dumper.SHOW_TAGS, bool show_tags = Yaml.Dumper.SHOW_TAGS,
bool show_fullkeys = Yaml.Dumper.SHOW_FULL_KEYS, bool show_fullkeys = Yaml.Dumper.SHOW_FULL_KEYS
bool show_colors = Yaml.Dumper.SHOW_COLORS
) )
{ {
var yaml = new StringBuilder(""); var yaml = new StringBuilder("");
@ -118,7 +123,7 @@ public class Pluie.Yaml.Dumper
line = 0; line = 0;
yaml_root (ref yaml, node as Yaml.Root, show_doc); yaml_root (ref yaml, node as Yaml.Root, show_doc);
foreach (var child in node) { foreach (var child in node) {
yaml.append (Yaml.Dumper.dump (child, indent, show_doc, show_tags, show_fullkeys, show_colors)); yaml.append (Yaml.Dumper.dump (child, indent, show_doc, show_tags, show_fullkeys));
} }
} }
else if (node.ntype.is_single_pair ()) { else if (node.ntype.is_single_pair ()) {
@ -128,7 +133,7 @@ public class Pluie.Yaml.Dumper
else if (node.ntype.is_collection ()) { else if (node.ntype.is_collection ()) {
yaml_key (ref yaml, node, indent, show_tags); yaml_key (ref yaml, node, indent, show_tags);
foreach (var child in node) { foreach (var child in node) {
yaml.append (Yaml.Dumper.dump (child, indent, show_doc, show_tags, show_fullkeys, show_colors)); yaml.append (Yaml.Dumper.dump (child, indent, show_doc, show_tags, show_fullkeys));
} }
} }
else if (node.ntype.is_scalar ()) { else if (node.ntype.is_scalar ()) {
@ -156,12 +161,12 @@ public class Pluie.Yaml.Dumper
private static void yaml_tag (ref StringBuilder yaml, Yaml.Node node, bool show_tags) private static void yaml_tag (ref StringBuilder yaml, Yaml.Node node, bool show_tags)
{ {
if (node.tag != null && show_tags) { if (node.tag != null && show_tags) {
if (SHOW_COLORS) yaml.append (of.c (ECHO.COMMAND).to_string ()); if (SHOW_COLOR) yaml.append (of.c (ECHO.COMMAND).to_string ());
yaml.append ("!%s!%s".printf ( yaml.append ("!%s!%s".printf (
node.tag.handle, node.tag.handle,
node.tag.value node.tag.value
)); ));
yaml.append ("%s ".printf (SHOW_COLORS ? Color.off () : "")); yaml.append ("%s ".printf (SHOW_COLOR ? Color.off () : ""));
} }
} }
@ -173,11 +178,11 @@ public class Pluie.Yaml.Dumper
yaml.append(! SHOW_LINE ? "" : of.c (ECHO.NUM).s ("%03d %s".printf (line++, of.c (ECHO.FILE).s ("|")))); yaml.append(! SHOW_LINE ? "" : of.c (ECHO.NUM).s ("%03d %s".printf (line++, of.c (ECHO.FILE).s ("|"))));
yaml.append("%YAML %s\n".printf (Yaml.YAML_VERSION)); yaml.append("%YAML %s\n".printf (Yaml.YAML_VERSION));
foreach (var entry in node.tag_directives.entries) { foreach (var entry in node.tag_directives.entries) {
yaml.append(! SHOW_LINE ? "" : of.c (ECHO.NUM).s ("%03d %s".printf (line, of.c (ECHO.FILE).s ("|")))); yaml.append(! SHOW_LINE ? "" : of.c (ECHO.NUM).s ("%03d %s".printf (line++, of.c (ECHO.FILE).s ("|"))));
yaml.append ("%TAG %s %s\n".printf (entry.key, entry.value)); yaml.append ("%TAG %s %s\n".printf (entry.key, entry.value));
} }
if (show_doc) { if (show_doc) {
yaml.append(! SHOW_LINE ? "" : of.c (ECHO.NUM).s ("%03d %s".printf (line, of.c (ECHO.FILE).s ("|")))); yaml.append(! SHOW_LINE ? "" : of.c (ECHO.NUM).s ("%03d %s".printf (line++, of.c (ECHO.FILE).s ("|"))));
yaml.append ("---\n"); yaml.append ("---\n");
} }
} }
@ -193,7 +198,7 @@ public class Pluie.Yaml.Dumper
else if (!node.is_first ()) { else if (!node.is_first ()) {
yaml_indent (ref yaml, node, indent, true); yaml_indent (ref yaml, node, indent, true);
} }
if (node.parent != null && node.parent.ntype.is_sequence ()) yaml.append (!SHOW_COLORS ? "- " : of.c (ECHO.DATE).s ("- ")); if (node.parent != null && node.parent.ntype.is_sequence ()) yaml.append (!SHOW_COLOR ? "- " : of.c (ECHO.DATE).s ("- "));
if (wrapseq) { if (wrapseq) {
if (Yaml.DEBUG) of.warn ("node %s wrapseq ? %s".printf (node.name, wrapseq.to_string ())); if (Yaml.DEBUG) of.warn ("node %s wrapseq ? %s".printf (node.name, wrapseq.to_string ()));
} }
@ -205,8 +210,8 @@ public class Pluie.Yaml.Dumper
} }
len = (!show_tags || (node.tag == null && !node.ntype.is_collection ()) && len > 0) ? len +1 - node.name.length : 0; len = (!show_tags || (node.tag == null && !node.ntype.is_collection ()) && len > 0) ? len +1 - node.name.length : 0;
yaml.append("%s%s%s".printf( yaml.append("%s%s%s".printf(
!SHOW_COLORS ? @"%s%$(len)s ".printf (node.name, " ") : of.c (node.ntype.is_collection() ? ECHO.TIME : ECHO.OPTION).s(@"%s%$(len)s".printf (node.name, " ")), !SHOW_COLOR ? @"%s%$(len)s ".printf (node.name, " ") : of.c (node.ntype.is_collection() ? ECHO.TIME : ECHO.OPTION).s(@"%s%$(len)s".printf (node.name, " ")),
!SHOW_COLORS ? ":" : of.c (ECHO.DATE).s(":"), !SHOW_COLOR ? ":" : of.c (ECHO.DATE).s(":"),
node.ntype.is_collection () ? "\n" : " " node.ntype.is_collection () ? "\n" : " "
)); ));
} }
@ -218,10 +223,10 @@ public class Pluie.Yaml.Dumper
private static void yaml_scalar (ref StringBuilder yaml, Yaml.Node node, int indent, bool show_tags) private static void yaml_scalar (ref StringBuilder yaml, Yaml.Node node, int indent, bool show_tags)
{ {
if (!(node.parent !=null && node.parent.ntype.is_single_pair ())) yaml_indent (ref yaml, node, indent); if (!(node.parent !=null && node.parent.ntype.is_single_pair ())) yaml_indent (ref yaml, node, indent);
if (node.parent != null && node.parent.ntype.is_sequence ()) yaml.append (!SHOW_COLORS ? "- " : of.c (ECHO.DATE).s ("- ")); if (node.parent != null && node.parent.ntype.is_sequence ()) yaml.append (!SHOW_COLOR ? "- " : of.c (ECHO.DATE).s ("- "));
yaml_tag (ref yaml, node, show_tags); yaml_tag (ref yaml, node, show_tags);
yaml.append ("%s\n".printf ( yaml.append ("%s\n".printf (
!SHOW_COLORS ? node.data : of.c (ECHO.OPTION_SEP).s (node.data) !SHOW_COLOR ? node.data : of.c (ECHO.OPTION_SEP).s (node.data)
)); ));
} }
} }

View File

@ -1,39 +1,39 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.5
* @type : library
* @date : 2018
* @licence : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org/>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* This file is part of pluie-yaml. * This file is part of pluie-yaml.
* *
* pluie-yaml is free software (free as in speech) : you can redistribute it * pluie-yaml is free software (free as in speech) : you can redistribute it
* and/or modify it under the terms of the GNU General Public License as * and/or modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the License, * published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version. * or (at your option) any later version.
* *
* pluie-yaml is distributed in the hope that it will be useful, but WITHOUT * pluie-yaml is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details. * more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>. * along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
*/
using GLib; using GLib;
using Gee; using Gee;
using Pluie; using Pluie;
/** /**
* Yaml Event class * Yaml Event class populated by {@link Yaml.Scanner} and treat by the {@link Yaml.Processor} to
* build a {@link Yaml.Node} from a yaml.file
*/ */
public class Pluie.Yaml.Event public class Pluie.Yaml.Event
{ {

View File

@ -1,161 +0,0 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.5
* @type : library
* @date : 2018
* @licence : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org/>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* This file is part of pluie-yaml.
*
* pluie-yaml is free software (free as in speech) : 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 3 of the License,
* or (at your option) any later version.
*
* pluie-yaml 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 pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/
using GLib;
using Gee;
using Pluie;
/**
* a test class to implements yamlize
*/
public class Pluie.Yaml.Example : Yaml.Object
{
public string myname { get; set; }
public string type_string { get; set; }
public int type_int { get; set; }
public uint type_uint { get; set; }
public float type_float { get; set; }
public double type_double { get; set; }
public char type_char { get; set; }
public uchar type_uchar { get; set; }
public unichar type_unichar { get; set; }
public short type_short { get; set; }
public ushort type_ushort { get; set; }
public long type_long { get; set; }
public ulong type_ulong { get; set; }
public size_t type_size_t { get; set; }
public ssize_t type_ssize_t { get; set; }
public int8 type_int8 { get; set; }
public uint8 type_uint8 { get; set; }
public int16 type_int16 { get; set; }
public uint16 type_uint16 { get; set; }
public int32 type_int32 { get; set; }
public uint32 type_uint32 { get; set; }
public int64 type_int64 { get; set; }
public uint64 type_uint64 { get; set; }
public bool type_bool { get; set; }
public Yaml.ExampleChild type_object { get; set; }
public Yaml.NODE_TYPE type_enum { get; set; }
public Yaml.ExampleStruct type_struct { get; set; }
public Gee.ArrayList<double?> type_gee_al { get; set; }
public Gee.ArrayList<Yaml.ExampleChild> type_gee_alobject { get; set; }
static construct
{
Yaml.Register.add_type (
typeof (Yaml.Example),
typeof (Yaml.ExampleChild),
typeof (Yaml.ExampleStruct),
typeof (Gee.ArrayList)
);
}
/**
*
*/
protected override void yaml_construct ()
{
this.type_gee_al = new Gee.ArrayList<double?> ();
this.type_gee_alobject = new Gee.ArrayList<Yaml.ExampleChild> ();
Yaml.Register.add_namespace("Gee", "GLib");
Dbg.msg ("%s (%s) instantiated".printf (this.yaml_name, this.get_type().name ()), Log.LINE, Log.FILE);
}
/**
*
*/
protected override void yaml_init ()
{
Dbg.msg ("%s (%s) initialized".printf (this.yaml_name, this.get_type().name ()), Log.LINE, Log.FILE);
}
/**
*
*/
public override void populate_from_node (string name, GLib.Type type, Yaml.Node node) {
if (type == typeof (Yaml.ExampleStruct)) {
this.type_struct = Yaml.ExampleStruct.from_yaml_node (node);
}
else if (type == typeof (Gee.ArrayList)) {
foreach (var child in node) {
switch (name) {
case "type_gee_al":
this.type_gee_al.add(double.parse(child.data));
break;
case "type_gee_alobject":
this.type_gee_alobject.add((Yaml.ExampleChild) Yaml.Builder.from_node (child, typeof (Yaml.ExampleChild)));
break;
}
}
}
else {
var obj = Yaml.Builder.from_node(node, type);
if (name == "type_object") {
this.set (node.name, (Yaml.ExampleChild) obj);
}
else {
this.set (node.name, obj);
}
}
}
/**
* match delegate CastYamlObject
*/
public GLib.Object cast_child_collection (string name, GLib.Object obj)
{
return (GLib.Object) ((Yaml.ExampleChild) obj);
}
/**
*
*/
public override Yaml.Node? populate_to_node (string name, GLib.Type type, Yaml.Node parent) {
Yaml.Node? node = null;
if (type == typeof (Yaml.ExampleStruct)) {
node = this.type_struct.to_yaml_node (name);
}
else if (type == typeof (Gee.ArrayList)) {
switch (name) {
case "type_gee_al" :
Yaml.GeeBuilder.fundamental_arraylist_to_node (this.type_gee_al, name, parent);
break;
case "type_gee_alobject" :
Yaml.Object.objects_collection_to_node (this.type_gee_alobject, name, parent);
break;
}
}
else {
base.populate_to_node (name, type, parent);
}
return node;
}
}

View File

@ -1,32 +1,31 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.5
* @type : library
* @date : 2018
* @licence : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org/>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* This file is part of pluie-yaml. * This file is part of pluie-yaml.
* *
* pluie-yaml is free software (free as in speech) : you can redistribute it * pluie-yaml is free software (free as in speech) : you can redistribute it
* and/or modify it under the terms of the GNU General Public License as * and/or modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the License, * published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version. * or (at your option) any later version.
* *
* pluie-yaml is distributed in the hope that it will be useful, but WITHOUT * pluie-yaml is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details. * more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>. * along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
*/
using GLib; using GLib;
using Gee; using Gee;
@ -34,6 +33,19 @@ using Pluie;
/** /**
* Finder class used to easily retriew Yaml.Node * Finder class used to easily retriew Yaml.Node
*
* Path definition has two mode :
* default mode is ''Yaml.FIND_MODE.DOT''
*
* * child mapping node are separated by dot :
* * sequence entry must be enclosed in curly brace
* ex : ``grandfather.father.son{2}.age``
*
* other mode is ''Yaml.FIND_MODE.SQUARE_BRACKETS''.
*
* * node's key name must be enclosed in square brackets
* * sequence entry must be enclosed in curly brace
* ex : ``[grandfather][father][son]{2}[age]``
*/ */
public class Pluie.Yaml.Finder : GLib.Object public class Pluie.Yaml.Finder : GLib.Object
{ {
@ -53,17 +65,7 @@ public class Pluie.Yaml.Finder : GLib.Object
} }
/** /**
* find a specific child Yaml.Node corresponding to path definition * Find a specific child Yaml.Node corresponding to path definition.
* path definition has two mode.
* default mode is Yaml.FIND_MODE.DOT
* - child mapping node are separated by dot :
* - sequence entry must be enclosed in curly brace
* ex : grandfather.father.son{2}.age
*
* other mode is Yaml.FIND_MODE.DOTSQUARE_BRACKETS
* - node's key name must be enclosed in square brackets
* - sequence entry must be enclosed in curly brace
* ex : [grandfather][father][son]{2}[age]
* *
* @param path the definition to retriew the child node * @param path the definition to retriew the child node
* @param context the Yaml.Node context to operate * @param context the Yaml.Node context to operate

View File

@ -1,44 +1,46 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.5
* @type : library
* @date : 2018
* @licence : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org/>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* This file is part of pluie-yaml. * This file is part of pluie-yaml.
* *
* pluie-yaml is free software (free as in speech) : you can redistribute it * pluie-yaml is free software (free as in speech) : you can redistribute it
* and/or modify it under the terms of the GNU General Public License as * and/or modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the License, * published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version. * or (at your option) any later version.
* *
* pluie-yaml is distributed in the hope that it will be useful, but WITHOUT * pluie-yaml is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details. * more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>. * along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
*/
using GLib; using GLib;
using Gee; using Gee;
using Pluie; using Pluie;
/** /**
* a Yaml.Builder class helping to build vala Yaml.Object from Yaml.Node * a Yaml.GeeBuilder class helping to build vala Gee.Collection with fundamental type to Yaml.Node
*/ */
public class Pluie.Yaml.GeeBuilder public class Pluie.Yaml.GeeBuilder
{ {
/** /**
* * transform a Gee.Collection with fundamental type to a Yaml.Node
* @param property_name name of related property
* @param parent parent Yaml.Node of the list
* @param is_char flag indicating data with char representation
*/ */
public static Yaml.Node? fundamental_arraylist_to_node (Gee.ArrayList* o, string property_name, Yaml.Node parent, bool is_char = false) public static Yaml.Node? fundamental_arraylist_to_node (Gee.ArrayList* o, string property_name, Yaml.Node parent, bool is_char = false)
{ {

View File

@ -1,32 +1,31 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.5
* @type : library
* @date : 2018
* @licence : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org/>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* This file is part of pluie-yaml. * This file is part of pluie-yaml.
* *
* pluie-yaml is free software (free as in speech) : you can redistribute it * pluie-yaml is free software (free as in speech) : you can redistribute it
* and/or modify it under the terms of the GNU General Public License as * and/or modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the License, * published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version. * or (at your option) any later version.
* *
* pluie-yaml is distributed in the hope that it will be useful, but WITHOUT * pluie-yaml is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details. * more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>. * along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
*/
using GLib; using GLib;
using Gee; using Gee;
@ -38,42 +37,48 @@ using Pluie;
public class Pluie.Yaml.Loader public class Pluie.Yaml.Loader
{ {
/** /**
* Scanner * Flag PACK_NESTED_ENTRIES
*/ */
Yaml.Scanner scanner { public get; internal set; } public static bool PACK_NESTED_ENTRIES { public get; public set; default = false; }
/**
* Yaml.Scanner used to retriew yaml events
*/
Yaml.Scanner scanner { public get; internal set; }
/** /**
* indicate if file has been sucessfully loaded * indicate if file has been sucessfully loaded
*/ */
public bool done { get; internal set; } public bool done { get; internal set; }
/** /**
* Reader used to load content yaml file * Reader used to load content yaml file
*/ */
Io.Reader reader; Io.Reader reader;
/** /**
* default constructor of Yaml.Loader
* @param path the path of file to parse * @param path the path of file to parse
* @param displayFile display original file * @param display_file display original file
* @param displayNode display corresponding Yaml Node Graph * @param displayNode display corresponding Yaml Node Graph
*/ */
public Loader (string path, bool displayFile = false, bool displayNode = false ) public Loader (string path, bool display_file = false, bool displayNode = false )
{ {
this.reader = new Io.Reader (path); this.reader = new Io.Reader (path);
this.scanner = new Yaml.Scanner (path); if (this.reader.readable) {
if (displayFile) this.displayFile (); this.scanner = new Yaml.Scanner (path);
if (display_file) this.display_file ();
if ((this.done = this.scanner.run())) { if ((this.done = this.scanner.run())) {
if (displayNode) { if (displayNode) {
var n = this.get_nodes (); var n = this.get_nodes ();
if (n != null) n.display_childs (); if (n != null) n.display_childs ();
of.state(n != null); of.state(n != null);
}
}
else {
var evt = this.scanner.get_error_event ();
of.error ("line %d (%s)".printf (evt.line, evt.data["error"]));
this.display_file (evt.line);
} }
}
else {
var evt = this.scanner.get_error_event ();
of.error ("line %d (%s)".printf (evt.line, evt.data["error"]));
this.displayFile (evt.line);
} }
} }
@ -82,13 +87,40 @@ public class Pluie.Yaml.Loader
*/ */
public Yaml.Node? get_nodes () public Yaml.Node? get_nodes ()
{ {
return this.scanner.get_nodes (); Yaml.Node? n = this.scanner.get_nodes ();
if (PACK_NESTED_ENTRIES) {
this.pack_entries (n);
}
return n;
}
/**
*
*/
private void pack_entries (Yaml.Node? node = null)
{
bool restart = false;
if (node != null) {
if (node.ntype.is_sequence ()) {
foreach (var child in node) {
if (child.ntype.is_mapping () && child.name[0] == '_' && child.count () == 1) {
var sub = child.first ().clone_node ();
node.replace_node (child, sub);
restart = true;
break;
}
}
if (restart) pack_entries (node);
}
else foreach (var child in node) this.pack_entries (child);
}
} }
/** /**
* display original file * display original file
* @param errorLine highlight error line
*/ */
public void displayFile (int errorLine = 0) public void display_file (int errorLine = 0)
{ {
of.action (errorLine == 0 ? "Reading file" : "Invalid Yaml File", this.reader.path); of.action (errorLine == 0 ? "Reading file" : "Invalid Yaml File", this.reader.path);
of.echo (); of.echo ();

View File

@ -1,32 +1,31 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.5
* @type : library
* @date : 2018
* @licence : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org/>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* This file is part of pluie-yaml. * This file is part of pluie-yaml.
* *
* pluie-yaml is free software (free as in speech) : you can redistribute it * pluie-yaml is free software (free as in speech) : you can redistribute it
* and/or modify it under the terms of the GNU General Public License as * and/or modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the License, * published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version. * or (at your option) any later version.
* *
* pluie-yaml is distributed in the hope that it will be useful, but WITHOUT * pluie-yaml is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details. * more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>. * along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
*/
using GLib; using GLib;
using Pluie; using Pluie;
@ -43,7 +42,9 @@ public class Pluie.Yaml.Mapping : Yaml.Node
Gee.ArrayList<string>? keys { internal get; internal set; default = null; } Gee.ArrayList<string>? keys { internal get; internal set; default = null; }
/** /**
* * default Yaml.Mapping constructor
* @param parent the parent node
* @param name the node name
*/ */
public Mapping (Yaml.Node? parent = null, string? name = null) public Mapping (Yaml.Node? parent = null, string? name = null)
{ {
@ -52,7 +53,10 @@ public class Pluie.Yaml.Mapping : Yaml.Node
} }
/** /**
* * Yaml.Mapping constructor as single pair node with scalar data
* @param parent the parent node
* @param name the node name
* @param data scalar data
*/ */
public Mapping.with_scalar (Yaml.Node? parent = null, string? name = null, string? data = null) public Mapping.with_scalar (Yaml.Node? parent = null, string? name = null, string? data = null)
{ {
@ -62,8 +66,7 @@ public class Pluie.Yaml.Mapping : Yaml.Node
} }
/** /**
* add a child node to current collection (mapping or sequence) node * {@inheritDoc}
* @param child the Yaml.Node child to add
*/ */
protected override void before_add (Yaml.Node child) throws Yaml.AddNodeError protected override void before_add (Yaml.Node child) throws Yaml.AddNodeError
{ {
@ -84,8 +87,7 @@ public class Pluie.Yaml.Mapping : Yaml.Node
} }
/** /**
* add a child node to current collection (mapping or sequence) node * {@inheritDoc}
* @param child the Yaml.Node child to add
*/ */
protected override void on_added (Yaml.Node child) protected override void on_added (Yaml.Node child)
{ {
@ -99,9 +101,7 @@ public class Pluie.Yaml.Mapping : Yaml.Node
} }
/** /**
* add a child node to current collection (mapping or sequence) node * {@inheritDoc}
* @param child the Yaml.Node child to add
* @param levelUpdate flag indicating if update level is needed
*/ */
protected override void on_removed (Yaml.Node child, bool levelUpdate = true) protected override void on_removed (Yaml.Node child, bool levelUpdate = true)
{ {
@ -112,9 +112,9 @@ public class Pluie.Yaml.Mapping : Yaml.Node
} }
/** /**
* retriew a child node throught specifiyed index * retriew a child node throught specifiyed name
* @param name name of searched child * @param name name of searched child
* @return the child node * @return the matching child node
*/ */
public new Yaml.Node? item (string name) public new Yaml.Node? item (string name)
{ {
@ -129,8 +129,7 @@ public class Pluie.Yaml.Mapping : Yaml.Node
} }
/** /**
* clone current node * {@inheritDoc}
* @param name the overrinding name
*/ */
public override Yaml.Node clone_node (string? name = null) public override Yaml.Node clone_node (string? name = null)
{ {
@ -145,7 +144,7 @@ public class Pluie.Yaml.Mapping : Yaml.Node
} }
/** /**
* * get a collection of chils name
*/ */
public Gee.ArrayList<string>? child_names () public Gee.ArrayList<string>? child_names ()
{ {

View File

@ -1,37 +1,37 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.5
* @type : library
* @date : 2018
* @licence : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org/>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* This file is part of pluie-yaml. * This file is part of pluie-yaml.
* *
* pluie-yaml is free software (free as in speech) : you can redistribute it * pluie-yaml is free software (free as in speech) : you can redistribute it
* and/or modify it under the terms of the GNU General Public License as * and/or modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the License, * published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version. * or (at your option) any later version.
* *
* pluie-yaml is distributed in the hope that it will be useful, but WITHOUT * pluie-yaml is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details. * more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>. * along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
*/
using GLib; using GLib;
using Gee; using Gee;
/** /**
* a class representing a node * a class representing a yaml node no matter was his type
*/ */
public class Pluie.Yaml.Node : Yaml.AbstractChild, Pluie.Yaml.Collection public class Pluie.Yaml.Node : Yaml.AbstractChild, Pluie.Yaml.Collection
{ {
@ -76,12 +76,14 @@ public class Pluie.Yaml.Node : Yaml.AbstractChild, Pluie.Yaml.Collection
} }
catch (Yaml.AddNodeError e) { catch (Yaml.AddNodeError e) {
of.warn (e.message); of.warn (e.message);
Yaml.dbg (this.to_string ());
this.display_childs ();
} }
return done; return done;
} }
/** /**
* add a child node to current collection (mapping or sequence) node * actions to execute before adding the specified child bode
* @param child the Yaml.Node child to add * @param child the Yaml.Node child to add
*/ */
protected virtual void before_add (Yaml.Node child) throws Yaml.AddNodeError protected virtual void before_add (Yaml.Node child) throws Yaml.AddNodeError
@ -90,7 +92,7 @@ public class Pluie.Yaml.Node : Yaml.AbstractChild, Pluie.Yaml.Collection
} }
/** /**
* add a child node to current collection (mapping or sequence) node * actions to execute after adding the specified child bode
* @param child the Yaml.Node child to add * @param child the Yaml.Node child to add
*/ */
protected virtual void on_added (Yaml.Node child) protected virtual void on_added (Yaml.Node child)
@ -100,7 +102,8 @@ public class Pluie.Yaml.Node : Yaml.AbstractChild, Pluie.Yaml.Collection
/** /**
* remove a child * remove a child
* @param child the child to remove * @param child the child to remove
* @param levelUpdate flag indacting if level must be updated
*/ */
public bool remove_child (Yaml.Node child, bool levelUpdate = true) public bool remove_child (Yaml.Node child, bool levelUpdate = true)
{ {
@ -114,8 +117,9 @@ public class Pluie.Yaml.Node : Yaml.AbstractChild, Pluie.Yaml.Collection
} }
/** /**
* add a child node to current collection (mapping or sequence) node * action to exectuing after removing the specified child node
* @param child the Yaml.Node child to add * @param child the Yaml.Node child to remove
* @param levelUpdate flag indacting if level must be updated for removed child
*/ */
protected virtual void on_removed (Yaml.Node child, bool levelUpdate = true) protected virtual void on_removed (Yaml.Node child, bool levelUpdate = true)
{ {
@ -126,9 +130,7 @@ public class Pluie.Yaml.Node : Yaml.AbstractChild, Pluie.Yaml.Collection
} }
/** /**
* retriew a child node throught specifiyed index * {@inheritDoc}
* @param index index of searched child
* @return the child node
*/ */
public virtual Yaml.Node? item (int index) public virtual Yaml.Node? item (int index)
{ {
@ -136,37 +138,35 @@ public class Pluie.Yaml.Node : Yaml.AbstractChild, Pluie.Yaml.Collection
} }
/** /**
* check if current node contains the specifiyed child node * {@inheritDoc}
* @param child the child to check
*/ */
public bool contains (Yaml.Node child) { public bool contains (Yaml.Node child) {
return !this.empty () && this.list.contains (child); return !this.empty () && this.list.contains (child);
} }
/** /**
* count childnodes * {@inheritDoc}
*/ */
public override int count () { public override int count () {
return !this.empty () ? this.list.size : 0; return !this.empty () ? this.list.size : 0;
} }
/** /**
* check if empty * {@inheritDoc}
*/ */
public bool empty () { public bool empty () {
return this.list == null || this.list.size == 0; return this.list == null || this.list.size == 0;
} }
/** /**
* get an iterator * {@inheritDoc}
*/ */
public Gee.Iterator<Yaml.Node> iterator () { public Gee.Iterator<Yaml.Node> iterator () {
return this.list.iterator (); return this.list.iterator ();
} }
/** /**
* retriew the first child node * {@inheritDoc}
* @return the first child node
*/ */
public virtual Yaml.Node? first () public virtual Yaml.Node? first ()
{ {
@ -174,8 +174,7 @@ public class Pluie.Yaml.Node : Yaml.AbstractChild, Pluie.Yaml.Collection
} }
/** /**
* retriew the last child node * {@inheritDoc}
* @return the last child node
*/ */
public Yaml.Node? last () public Yaml.Node? last ()
{ {
@ -198,7 +197,7 @@ public class Pluie.Yaml.Node : Yaml.AbstractChild, Pluie.Yaml.Collection
} }
/** /**
* * {@inheritDoc}
*/ */
public Yaml.Node? child_next_sibling (Yaml.Node child) public Yaml.Node? child_next_sibling (Yaml.Node child)
{ {
@ -206,15 +205,15 @@ public class Pluie.Yaml.Node : Yaml.AbstractChild, Pluie.Yaml.Collection
} }
/** /**
* * {@inheritDoc}
*/ */
public Yaml.Node? child_previous_sibling (Yaml.Node child) public Yaml.Node? child_previous_sibling (Yaml.Node child)
{ {
return this.child_sibling (child, false); return this.child_sibling (child, false);
} }
/* /**
* * update nested indention node level and propagate approprietly level to all childs
*/ */
public virtual void update_level() public virtual void update_level()
{ {
@ -227,8 +226,9 @@ public class Pluie.Yaml.Node : Yaml.AbstractChild, Pluie.Yaml.Collection
} }
/** /**
* clone current node * clone current node (with all his children)
* @param name the name of clone * @param name the name of the clone
* @return the cloned node with cloned childs
*/ */
public virtual Yaml.Node clone_node (string? name = null) public virtual Yaml.Node clone_node (string? name = null)
{ {
@ -243,16 +243,16 @@ public class Pluie.Yaml.Node : Yaml.AbstractChild, Pluie.Yaml.Collection
} }
/** /**
* clone current node *
* @param name the name of clone
*/ */
public virtual Yaml.Node get_cloned_instance (string? name = null) internal virtual Yaml.Node get_cloned_instance (string? name = null)
{ {
return new Yaml.Node (null, this.ntype, name); return new Yaml.Node (null, this.ntype, name);
} }
/** /**
* * retriew the GLib.Value initialized with specified type (only) for single pair node
* return the pair value
*/ */
public GLib.Value val (GLib.Type type) public GLib.Value val (GLib.Type type)
{ {
@ -263,8 +263,24 @@ public class Pluie.Yaml.Node : Yaml.AbstractChild, Pluie.Yaml.Collection
return v; return v;
} }
/**
*
*/
public void replace_node (Yaml.Node child, Yaml.Node new_child)
{
int index = this.list.index_of (child);
if (index > -1) {
new_child.level = this.level + 1;
new_child.parent = this;
new_child.update_level ();
this.list.remove_at (index);
this.list.insert (index, new_child);
}
}
/** /**
* display childs * display childs
* @param withTitle display a title before the childs node presentation
*/ */
public void display_childs (bool withTitle = true) public void display_childs (bool withTitle = true)
{ {
@ -282,6 +298,13 @@ public class Pluie.Yaml.Node : Yaml.AbstractChild, Pluie.Yaml.Collection
/** /**
* get a presentation string of current Yaml.Node * get a presentation string of current Yaml.Node
* @param withIndent display indentation formating
* @param withParent display parent node name
* @param withUuid display node uuid
* @param withCount display number of childs
* @param withRefCount display number of reference
* @param withTag display tag information
* @param withType display node type
*/ */
public override string to_string ( public override string to_string (
bool withIndent = Yaml.DBG_SHOW_INDENT, bool withIndent = Yaml.DBG_SHOW_INDENT,
@ -320,7 +343,7 @@ public class Pluie.Yaml.Node : Yaml.AbstractChild, Pluie.Yaml.Collection
) )
: "", : "",
of.c (ECHO.OPTION).s ("]"), of.c (ECHO.OPTION).s ("]"),
withTag && this.ntype.is_root () ? (this as Yaml.Root).get_display_tag_directives () : "" withTag && this.ntype.is_root () && (this as Yaml.Root) !=null ? (this as Yaml.Root).get_display_tag_directives () : ""
); );
} }
} }

View File

@ -1,52 +1,52 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.5
* @type : library
* @date : 2018
* @licence : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org/>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* This file is part of pluie-yaml. * This file is part of pluie-yaml.
* *
* pluie-yaml is free software (free as in speech) : you can redistribute it * pluie-yaml is free software (free as in speech) : you can redistribute it
* and/or modify it under the terms of the GNU General Public License as * and/or modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the License, * published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version. * or (at your option) any later version.
* *
* pluie-yaml is distributed in the hope that it will be useful, but WITHOUT * pluie-yaml is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details. * more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>. * along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
*/
using GLib; using GLib;
using Gee; using Gee;
/** /**
* Yaml.Object bqse class which can be transform to a Yaml.Node structure * Yaml.Object base class which can be transform to a Yaml.Node structure
*/ */
public abstract class Pluie.Yaml.Object : GLib.Object public abstract class Pluie.Yaml.Object : GLib.Object
{ {
/** /**
* * Yaml node name
*/ */
public string yaml_name { get; internal set; } public string yaml_name { get; internal set; }
/** /**
* * associated Yaml.Register for tag resolution (full namespace names)
*/ */
public static Yaml.Register register { get; private set; } public static Yaml.Register register { get; private set; }
/** /**
* * Yaml.Tag definition
*/ */
public static Yaml.Tag yaml_tag { get; internal set; } public static Yaml.Tag yaml_tag { get; internal set; }
@ -69,7 +69,7 @@ public abstract class Pluie.Yaml.Object : GLib.Object
} }
/** /**
* * default constructor
*/ */
public virtual void yaml_construct () public virtual void yaml_construct ()
{ {
@ -77,7 +77,8 @@ public abstract class Pluie.Yaml.Object : GLib.Object
} }
/** /**
* * initialization method called by Yaml.Builder after instantiation
* and after properties has been populated
*/ */
public virtual void yaml_init () public virtual void yaml_init ()
{ {
@ -85,7 +86,10 @@ public abstract class Pluie.Yaml.Object : GLib.Object
} }
/** /**
* * build property name from a Yaml.Node
* @param name name the property to build
* @param type type the property type
* @param node the Yaml.Node source
*/ */
public virtual signal void populate_from_node (string name, GLib.Type type, Yaml.Node node) { public virtual signal void populate_from_node (string name, GLib.Type type, Yaml.Node node) {
if (type.is_a(typeof (Yaml.Object))) { if (type.is_a(typeof (Yaml.Object))) {
@ -98,7 +102,11 @@ public abstract class Pluie.Yaml.Object : GLib.Object
} }
/** /**
* * convert property name to a Yaml.node
* @param name name of the property to build
* @param type type of the property to build
* @param parent parent node of the property
* @return the resulting Yaml.Node
*/ */
public virtual signal Yaml.Node? populate_to_node (string name, GLib.Type type, Yaml.Node parent) { public virtual signal Yaml.Node? populate_to_node (string name, GLib.Type type, Yaml.Node parent) {
Yaml.Node? node = null; Yaml.Node? node = null;
@ -111,22 +119,61 @@ public abstract class Pluie.Yaml.Object : GLib.Object
} }
/** /**
* * build an object collection (Gee.Collection) to a Yaml.Node
* @param list the gee collection to transform
* @param name name of collection sequence node
* @param parent parent node of the collection
* @return the resulting Yaml.Node
*/ */
public static Yaml.Node? objects_collection_to_node (Gee.Collection list, string name, Yaml.Node? parent = null) public static Yaml.Node? objects_collection_to_node (Gee.Collection list, string name, Yaml.Node? parent = null)
{ {
of.echo (Log.METHOD);
var node = new Yaml.Sequence (parent, name); var node = new Yaml.Sequence (parent, name);
node.tag = new Yaml.Tag (Yaml.Register.resolve_namespace_type(list.get_type ()), "v"); node.tag = new Yaml.Tag (Yaml.Register.resolve_namespace_type(list.get_type ()), "v");
var it = list.iterator (); var it = list.iterator ();
var i = 0; var i = 0;
while (it.next ()) { while (it.next ()) {
var s = Yaml.Builder.to_node ( Yaml.Builder.to_node ((GLib.Object) it.get (), node, false, i++);
(GLib.Object) it.get (), }
node, return node;
false, }
i++
); /**
* build an object Gee.HashMap<string, Yaml.Object> to a Yaml.Node
* @param map the gee hashmap to transform
* @param name name of map sequence node
* @param parent parent node of the map
* @return the resulting Yaml.Node
*/
public static Yaml.Node? objects_mapkstr_to_node (Gee.HashMap map, string name, Yaml.Node? parent = null)
{
var node = new Yaml.Sequence (parent, name);
node.tag = new Yaml.Tag (Yaml.Register.resolve_namespace_type(map.get_type ()), "v");
var i = 0;
foreach (var child in map.entries) {
var entryNode = new Yaml.Mapping (node, "_%d".printf (i++));
new Yaml.Mapping.with_scalar (entryNode, "key", (string) child.key);
Yaml.Builder.to_node ((GLib.Object) child.value, entryNode, false, null, "val");
}
return node;
}
/**
* build an object Gee.HashMap<string, Yaml.Object> to a Yaml.Node
* @param map the gee hashmap to transform
* @param name name of map sequence node
* @param parent parent node of the map
* @return the resulting Yaml.Node
*/
public static Yaml.Node? objects_mapobjects_to_node (Gee.HashMap map, string name, Yaml.Node? parent = null)
{
var node = new Yaml.Sequence (parent, name);
node.tag = new Yaml.Tag (Yaml.Register.resolve_namespace_type(map.get_type ()), "v");
var i = 0;
foreach (var child in map.entries) {
var entryNode = new Yaml.Mapping (node, "_%d".printf (i++));
Yaml.Builder.to_node ((GLib.Object) child.key, entryNode, false, null, "key");
Yaml.Builder.to_node ((GLib.Object) child.value, entryNode, false, null, "val");
} }
return node; return node;
} }

View File

@ -1,32 +1,31 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.5
* @type : library
* @date : 2018
* @licence : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org/>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* This file is part of pluie-yaml. * This file is part of pluie-yaml.
* *
* pluie-yaml is free software (free as in speech) : you can redistribute it * pluie-yaml is free software (free as in speech) : you can redistribute it
* and/or modify it under the terms of the GNU General Public License as * and/or modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the License, * published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version. * or (at your option) any later version.
* *
* pluie-yaml is distributed in the hope that it will be useful, but WITHOUT * pluie-yaml is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details. * more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>. * along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
*/
using GLib; using GLib;
using Gee; using Gee;
@ -47,6 +46,21 @@ public class Pluie.Yaml.Processor
*/ */
bool change; bool change;
/**
* indicates if document start begin
*/
bool begin;
/**
* indicates if new node is a sequence entry
*/
bool isEntry;
/**
* indicates if new node is a sequence entry mapping
*/
bool isEntryMapping;
/** /**
* indicates if begon a flow sequence * indicates if begon a flow sequence
*/ */
@ -174,8 +188,8 @@ public class Pluie.Yaml.Processor
Yaml.dbg_action ("Processing events"); Yaml.dbg_action ("Processing events");
this.reset (); this.reset ();
for (var has_next = this.iterator.next (); has_next; has_next = this.iterator.next ()) { for (var has_next = this.iterator.next (); has_next; has_next = this.iterator.next ()) {
this.event = this.iterator.get (); this.event = this.iterator.get ();
Yaml.dbg (" 0>>>>> [EVENT event [%d] %s <<<<< %s".printf (this.indexEvt++, this.event.evtype.infos (), Log.METHOD)); Yaml.dbg (" [[[ EVENT %d %s ]]]".printf (this.indexEvt++, this.event.evtype.infos ()));
if (this.event.evtype.is_tag_directive ()) { if (this.event.evtype.is_tag_directive ()) {
this.on_tag_directive (); this.on_tag_directive ();
} }
@ -183,34 +197,54 @@ public class Pluie.Yaml.Processor
this.on_error (); this.on_error ();
break; break;
} }
if (this.event.evtype.is_mapping_end () || this.event.evtype.is_sequence_end ()) { if (!this.begin) {
this.on_block_end (); if (this.event.evtype.is_sequence_start () || this.event.evtype.is_mapping_start ()) {
continue; this.begin = true;
} continue;
if (this.event.evtype.is_entry ()) { }
this.on_entry (); else if (this.event.evtype.is_document_start ()) {
} this.begin = true;
if (this.beginFlowSeq && this.event.evtype.is_scalar ()) { // to do
if (!this.change) { this.event = this.next_event ();
this.on_scalar (true); if (this.event.evtype.is_tag ()) {
this.root.tag = new Yaml.Tag (this.event.data["suffix"], this.event.data["handle"].replace("!", ""));
this.event = this.next_event ();
}
continue;
} }
this.beginFlowSeq = false;
} }
if (this.event.evtype.is_key () && (this.event = this.get_value_key_event ()) != null) { else {
this.on_key (); if (this.event.evtype.is_anchor ()) {
} this.on_anchor ();
if (this.event.evtype.is_value () && (this.event = this.get_value_event ()) != null) { }
this.on_value (); else if (this.event.evtype.is_alias ()) {
if (this.event.evtype.is_mapping_start ()) { this.on_alias ();
this.on_mapping_start (); }
else if (this.event.evtype.is_mapping_end () || this.event.evtype.is_sequence_end ()) {
this.on_block_end ();
continue;
}
else if (this.event.evtype.is_key () && (this.event = this.get_value_key_event ()) != null) {
this.on_key ();
}
else if (this.event.evtype.is_entry ()) {
this.on_entry ();
}
else if (this.event.evtype.is_mapping_start ()) {
this.create_mapping (this.isEntry);
} }
else if (this.event.evtype.is_sequence_start ()) { else if (this.event.evtype.is_sequence_start ()) {
this.on_sequence_start (); this.on_sequence_start ();
} }
else if (this.event.evtype.is_value ()) {
continue;
}
else if (this.event.evtype.is_scalar ()) {
this.on_scalar ();
}
this.add_anchor_if_needed (); this.add_anchor_if_needed ();
this.ckey = null; this.on_update ();
} }
this.on_update ();
} }
this.done = error_event == null && this.root != null; this.done = error_event == null && this.root != null;
return done; return done;
@ -221,19 +255,22 @@ public class Pluie.Yaml.Processor
*/ */
private void reset () private void reset ()
{ {
this.root = new Yaml.Root (); this.root = new Yaml.Root ();
this.prev_node = this.root; this.prev_node = this.root;
this.parent_node = this.root; this.parent_node = this.root;
this.iterator = this.events.iterator (); this.iterator = this.events.iterator ();
this.change = false; this.change = false;
this.ckey = null; this.ckey = null;
this.idAnchor = null; this.idAnchor = null;
this.tagHandle = null; this.tagHandle = null;
this.keyTag = null; this.keyTag = null;
this.valueTag = null; this.valueTag = null;
this.beginFlowSeq = false; this.beginFlowSeq = false;
this.nextValueEvt = null; this.nextValueEvt = null;
this.indexEvt = 0; this.indexEvt = 0;
this.isEntry = false;
this.begin = false;
this.isEntryMapping = false;
} }
/** /**
@ -244,7 +281,20 @@ public class Pluie.Yaml.Processor
Yaml.Event? evt = null; Yaml.Event? evt = null;
if (this.iterator.has_next () && this.iterator.next ()) { if (this.iterator.has_next () && this.iterator.next ()) {
evt = this.iterator.get (); evt = this.iterator.get ();
Yaml.dbg (" 1>>>>> [EVENT event [%d] %s <<<<< %s".printf (this.indexEvt++, evt.evtype.infos (), Log.METHOD)); Yaml.dbg (" >>>>> [EVENT event [%d] %s <<<<< %s".printf (this.indexEvt++, evt.evtype.infos (), Log.METHOD));
}
return evt;
}
/**
* retriew the next Yaml Event without use of iterator
*/
private Yaml.Event? get_next_event ()
{
Yaml.Event? evt = null;
var i = this.indexEvt;
if (i < this.events.size) {
evt = this.events.get (i);
} }
return evt; return evt;
} }
@ -277,18 +327,20 @@ public class Pluie.Yaml.Processor
} }
/** /**
* retriew the next Yaml Value Event * retriew the next Yaml Value Event without use of iterator
*/ */
private Yaml.Event? get_next_value_event () private Yaml.Event? get_next_value_event ()
{ {
Yaml.Event? evt = null; Yaml.Event? evt = null;
var i = this.indexEvt+1; var i = this.indexEvt;
Yaml.dbg (" >>> %s from %d".printf (Log.METHOD, i));
var search = true; var search = true;
while (search) { while (search) {
if (i < this.events.size) { if (i < this.events.size) {
var e = this.events.get (i++); var e = this.events.get (i++);
if (e != null && e.evtype.is_value ()) { if (e != null && e.evtype.is_value ()) {
evt = this.events.get (i); evt = this.events.get (i);
Yaml.dbg (" >>> %s > %d : %s".printf (Log.METHOD, i, evt.evtype.infos ()));
break; break;
} }
} }
@ -315,27 +367,26 @@ public class Pluie.Yaml.Processor
this.error_event = this.event; this.error_event = this.event;
} }
/**
*
*/
private bool is_entry_nested_block (Yaml.Node node)
{
return node.ntype.is_sequence () && !node.empty() && node.first ().ntype.is_collection ();
}
/** /**
* *
*/ */
private void on_block_end () private void on_block_end ()
{ {
if (!this.prev_node.ntype.is_collection ()) { if (this.prev_node.ntype.is_scalar () || (this.prev_node.ntype.is_single_pair () && this.prev_node.parent != null && this.prev_node.parent.ntype.is_mapping ())) {
this.prev_node = this.prev_node.parent; this.prev_node = this.prev_node.parent;
} }
bool isSequenceWithBlock = this.prev_node.ntype.is_sequence () && !this.prev_node.empty() && this.prev_node.first ().ntype.is_collection (); this.parent_node = this.prev_node.parent != null && this.prev_node.parent != this.root
if (!isSequenceWithBlock || (isSequenceWithBlock && (this.prev_node as Yaml.Sequence).close_block)) {
this.parent_node = this.prev_node.parent != null && this.prev_node.parent != this.root
? this.prev_node.parent ? this.prev_node.parent
: this.root; : this.root;
this.prev_node = this.parent_node; this.prev_node = this.parent_node;
}
if (isSequenceWithBlock) {
var seq = this.prev_node as Yaml.Sequence;
if (seq != null) {
seq.close_block = true;
}
}
} }
/** /**
@ -343,14 +394,13 @@ public class Pluie.Yaml.Processor
*/ */
private void on_entry () private void on_entry ()
{ {
this.event = this.next_event(); this.isEntry = true;
Yaml.Event? e = null; this.ckey = null;
e = get_next_value_event (); var e = this.get_next_event ();
if (this.event.evtype.is_mapping_start () && (e!= null && !e.evtype.is_mapping_start ())) { if (e!= null && e.evtype.is_mapping_start ()) {
this.on_mapping_start (true); this.isEntryMapping = true;
} this.create_mapping (true);
else if (this.event.evtype.is_scalar ()) { this.next_event ();
this.on_scalar (true);
} }
} }
@ -382,23 +432,9 @@ public class Pluie.Yaml.Processor
private void on_key () private void on_key ()
{ {
this.on_tag (true); this.on_tag (true);
this.ckey = this.event.data["data"];
}
/**
*
*/
private void on_value ()
{
this.on_tag (false);
if (this.event.evtype.is_scalar ()) { if (this.event.evtype.is_scalar ()) {
this.on_scalar (); this.ckey = this.event.data["data"];
} Yaml.dbg (" >> node name : %s".printf (this.ckey));
else if (this.event.evtype.is_anchor ()) {
this.on_anchor ();
}
else if (this.event.evtype.is_alias ()) {
this.on_alias ();
} }
} }
@ -407,16 +443,13 @@ public class Pluie.Yaml.Processor
*/ */
private void on_scalar (bool entry = false) private void on_scalar (bool entry = false)
{ {
if (!entry) { if (this.ckey != null && this.parent_node.ntype.is_collection ()) {
if (this.ckey != null) { this.node = new Yaml.Mapping.with_scalar (this.parent_node, this.ckey, this.event.data["data"]);
this.node = new Yaml.Mapping.with_scalar (this.parent_node, this.ckey, this.event.data["data"]);
this.change = true;
}
} }
else { else {
this.node = new Yaml.Scalar (this.parent_node, this.event.data["data"]); this.node = new Yaml.Scalar (this.parent_node, this.event.data["data"]);
this.change = true;
} }
this.change = true;
} }
/** /**
@ -424,8 +457,9 @@ public class Pluie.Yaml.Processor
*/ */
private void on_anchor () private void on_anchor ()
{ {
this.idAnchor = this.event.data["id"]; if (this.event.data != null) {
this.event = this.next_event (); this.idAnchor = this.event.data["id"];
}
} }
/** /**
@ -433,12 +467,14 @@ public class Pluie.Yaml.Processor
*/ */
private void on_alias () private void on_alias ()
{ {
this.idAnchor = this.event.data["id"]; if (this.event.data != null) {
Yaml.Node? refnode = this.anchors.get(this.idAnchor); this.idAnchor = this.event.data["id"];
if (refnode != null) { Yaml.Node? refnode = this.anchors.get(this.idAnchor);
this.node = refnode.clone_node (this.ckey); if (refnode != null) {
this.parent_node.add (this.node); this.node = refnode.clone_node (this.ckey);
this.prev_node = this.node; this.parent_node.add (this.node);
this.prev_node = this.node;
}
} }
} }
@ -449,7 +485,6 @@ public class Pluie.Yaml.Processor
{ {
this.node = new Yaml.Sequence (this.parent_node, this.ckey); this.node = new Yaml.Sequence (this.parent_node, this.ckey);
this.change = true; this.change = true;
this.beginFlowSeq = true;
} }
/** /**
@ -457,11 +492,24 @@ public class Pluie.Yaml.Processor
*/ */
private void on_mapping_start (bool entry = false) private void on_mapping_start (bool entry = false)
{ {
if (entry) { this.ckey = null;
this.create_mapping (entry); this.event = this.next_event ();
this.ckey = null; if (this.event.evtype.is_key ()) {
this.event = this.next_event ();
this.on_tag (true);
if (this.event.evtype.is_scalar ()) {
this.ckey = this.event.data["data"];
}
var e = this.get_next_value_event();
if (e!=null) {
if ( e.evtype.is_sequence_start ()) {
this.on_sequence_start ();
}
else {
this.create_mapping (this.isEntry);
}
}
} }
else this.create_mapping ();
} }
/** /**
@ -469,7 +517,7 @@ public class Pluie.Yaml.Processor
*/ */
private void create_mapping (bool entry = false) private void create_mapping (bool entry = false)
{ {
if (entry) { if (entry && this.ckey == null) {
this.ckey = "_%d".printf(this.parent_node.count()); this.ckey = "_%d".printf(this.parent_node.count());
} }
this.node = new Yaml.Mapping (this.parent_node, this.ckey); this.node = new Yaml.Mapping (this.parent_node, this.ckey);
@ -481,10 +529,8 @@ public class Pluie.Yaml.Processor
*/ */
private void add_anchor_if_needed () private void add_anchor_if_needed ()
{ {
if (this.idAnchor != null) { if (this.idAnchor != null && this.node != null) {
if (this.node != null) { this.anchors.set(this.idAnchor, this.node);
this.anchors.set(this.idAnchor, this.node);
}
this.idAnchor = null; this.idAnchor = null;
} }
} }
@ -495,7 +541,10 @@ public class Pluie.Yaml.Processor
private void on_update () private void on_update ()
{ {
if (this.node != null) { if (this.node != null) {
Yaml.dbg (Log.METHOD);
Yaml.dbg (this.node.name); Yaml.dbg (this.node.name);
Yaml.dbg (this.node.ntype.infos ());
Yaml.dbg ("anchor ? %s".printf (this.idAnchor));
} }
if (this.change) { if (this.change) {
if (this.node.parent.ntype.is_sequence ()) { if (this.node.parent.ntype.is_sequence ()) {
@ -526,7 +575,10 @@ public class Pluie.Yaml.Processor
this.keyTag = null; this.keyTag = null;
this.valueTag = null; this.valueTag = null;
this.node = null; this.node = null;
this.isEntryMapping = false;
this.change = false; this.change = false;
this.isEntry = false;
this.ckey = null;
} }
} }

View File

@ -1,32 +1,31 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.5
* @type : library
* @date : 2018
* @licence : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org/>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* This file is part of pluie-yaml. * This file is part of pluie-yaml.
* *
* pluie-yaml is free software (free as in speech) : you can redistribute it * pluie-yaml is free software (free as in speech) : you can redistribute it
* and/or modify it under the terms of the GNU General Public License as * and/or modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the License, * published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version. * or (at your option) any later version.
* *
* pluie-yaml is distributed in the hope that it will be useful, but WITHOUT * pluie-yaml is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details. * more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>. * along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
*/
using GLib; using GLib;
using Pluie; using Pluie;
@ -116,6 +115,7 @@ public class Pluie.Yaml.Register
/** /**
* add one or multiple namespace for tag resolution * add one or multiple namespace for tag resolution
* namespace value ar same as in vala source code (so with dot separator)
* @param name a namespace to register * @param name a namespace to register
*/ */
public static bool add_namespace (string name, ...) public static bool add_namespace (string name, ...)

View File

@ -1,59 +1,64 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.5
* @type : library
* @date : 2018
* @licence : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org/>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* This file is part of pluie-yaml. * This file is part of pluie-yaml.
* *
* pluie-yaml is free software (free as in speech) : you can redistribute it * pluie-yaml is free software (free as in speech) : you can redistribute it
* and/or modify it under the terms of the GNU General Public License as * and/or modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the License, * published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version. * or (at your option) any later version.
* *
* pluie-yaml is distributed in the hope that it will be useful, but WITHOUT * pluie-yaml is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details. * more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>. * along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
*/
using GLib; using GLib;
using Pluie; using Pluie;
using Gee; using Gee;
/** /**
* a class representing a mapping node * a class representing a Yaml Root Node
*/ */
public class Pluie.Yaml.Root : Yaml.Mapping public class Pluie.Yaml.Root : Yaml.Mapping
{ {
/** /**
* Tags map definition * Tags directives
*/ */
public Gee.HashMap<string, string> tag_directives { get; internal set; } public Gee.HashMap<string, string> tag_directives { get; internal set; }
/** /**
* * @param name the name of the root node
*/ */
public Root (string? name = "PluieYamlRoot") public Root (string? name = "PluieYamlRoot", bool add_directive = false, Yaml.Node? child = null)
{ {
base (null, name); base (null, name);
this.ntype = Yaml.NODE_TYPE.ROOT; this.ntype = Yaml.NODE_TYPE.ROOT;
this.tag_directives = new Gee.HashMap<string, string> (); this.tag_directives = new Gee.HashMap<string, string> ();
if (add_directive) {
this.tag_directives["!%s!".printf (Yaml.YAML_VALA_PREFIX)] = Yaml.YAML_VALA_DIRECTIVE;
}
if (child != null) {
this.add (child);
}
} }
/** /**
* * get tag directives formatted for colorized output
*/ */
public string get_display_tag_directives () public string get_display_tag_directives ()
{ {

View File

@ -1,32 +1,31 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.5
* @type : library
* @date : 2018
* @licence : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org/>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* This file is part of pluie-yaml. * This file is part of pluie-yaml.
* *
* pluie-yaml is free software (free as in speech) : you can redistribute it * pluie-yaml is free software (free as in speech) : you can redistribute it
* and/or modify it under the terms of the GNU General Public License as * and/or modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the License, * published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version. * or (at your option) any later version.
* *
* pluie-yaml is distributed in the hope that it will be useful, but WITHOUT * pluie-yaml is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details. * more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>. * along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
*/
using GLib; using GLib;
using Pluie; using Pluie;
@ -48,7 +47,8 @@ public class Pluie.Yaml.Scalar : Yaml.Node
public Scalar (Yaml.Node ? parent = null, string? data = null) public Scalar (Yaml.Node ? parent = null, string? data = null)
{ {
base (parent, NODE_TYPE.SCALAR); base (parent, NODE_TYPE.SCALAR);
this.data = data; this.container = false;
this.data = data;
} }
/** /**

View File

@ -1,32 +1,31 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.5
* @type : library
* @date : 2018
* @licence : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org/>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* This file is part of pluie-yaml. * This file is part of pluie-yaml.
* *
* pluie-yaml is free software (free as in speech) : you can redistribute it * pluie-yaml is free software (free as in speech) : you can redistribute it
* and/or modify it under the terms of the GNU General Public License as * and/or modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the License, * published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version. * or (at your option) any later version.
* *
* pluie-yaml is distributed in the hope that it will be useful, but WITHOUT * pluie-yaml is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details. * more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>. * along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
*/
using GLib; using GLib;
using Gee; using Gee;
@ -126,7 +125,7 @@ public class Pluie.Yaml.Scanner
{ {
var f = GLib.File.new_for_path (this.path); var f = GLib.File.new_for_path (this.path);
try { try {
//~ f.delete (); f.delete ();
} }
catch (GLib.Error e) { catch (GLib.Error e) {
of.error (e.message); of.error (e.message);

View File

@ -1,32 +1,31 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.5
* @type : library
* @date : 2018
* @licence : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org/>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* This file is part of pluie-yaml. * This file is part of pluie-yaml.
* *
* pluie-yaml is free software (free as in speech) : you can redistribute it * pluie-yaml is free software (free as in speech) : you can redistribute it
* and/or modify it under the terms of the GNU General Public License as * and/or modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the License, * published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version. * or (at your option) any later version.
* *
* pluie-yaml is distributed in the hope that it will be useful, but WITHOUT * pluie-yaml is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details. * more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>. * along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
*/
using GLib; using GLib;
using Pluie; using Pluie;
@ -37,7 +36,7 @@ using Gee;
*/ */
public class Pluie.Yaml.Sequence : Yaml.Node public class Pluie.Yaml.Sequence : Yaml.Node
{ {
public bool close_block { get; internal set; default = false; } internal bool close_block { internal get; internal set; default = false; }
/** /**
* default Yaml.Node constructor * default Yaml.Node constructor

View File

@ -1,32 +1,32 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.5
* @type : library
* @date : 2018
* @licence : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org/>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* This file is part of pluie-yaml. * This file is part of pluie-yaml.
* *
* pluie-yaml is free software (free as in speech) : you can redistribute it * pluie-yaml is free software (free as in speech) : you can redistribute it
* and/or modify it under the terms of the GNU General Public License as * and/or modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the License, * published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version. * or (at your option) any later version.
* *
* pluie-yaml is distributed in the hope that it will be useful, but WITHOUT * pluie-yaml is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details. * more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>. * along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
*/
using GLib; using GLib;
using Gee; using Gee;

View File

@ -1,367 +1,461 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.60
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
* *
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.5
* @type : library
* @date : 2018
* @licence : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org/>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* This file is part of pluie-yaml. * This file is part of pluie-yaml.
* *
* pluie-yaml is free software (free as in speech) : you can redistribute it * pluie-yaml is free software (free as in speech) : you can redistribute it
* and/or modify it under the terms of the GNU General Public License as * and/or modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the License, * published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version. * or (at your option) any later version.
* *
* pluie-yaml is distributed in the hope that it will be useful, but WITHOUT * pluie-yaml is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details. * more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>. * along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
*/
namespace Pluie namespace Pluie.Yaml
{ {
namespace Yaml const string YAML_VERSION = "1.2";
const string YAML_VALA_PREFIX = "v";
const string YAML_VALA_DIRECTIVE = "tag:pluie.org,2018:vala/";
public static bool DEBUG = false;
public static bool DBG_SHOW_INDENT = true;
public static bool DBG_SHOW_PARENT = false;
public static bool DBG_SHOW_UUID = true;
public static bool DBG_SHOW_LEVEL = false;
public static bool DBG_SHOW_REF = false;
public static bool DBG_SHOW_COUNT = true;
public static bool DBG_SHOW_TAG = true;
public static bool DBG_SHOW_TYPE = true;
/**
*
*/
internal static void dbg_action (string msg, string? val = null)
{ {
const string YAML_VERSION = "1.2"; if (Pluie.Yaml.DEBUG) of.action (msg, val);
}
public static bool DEBUG = false; /**
*
*/
internal static void dbg_keyval (string key, string val)
{
if (Pluie.Yaml.DEBUG) of.keyval (key, val);
}
public static bool DBG_SHOW_INDENT = true; /**
public static bool DBG_SHOW_PARENT = false; *
public static bool DBG_SHOW_UUID = true; */
public static bool DBG_SHOW_LEVEL = false; internal static void dbg_state (bool done)
public static bool DBG_SHOW_REF = false; {
public static bool DBG_SHOW_COUNT = true; if (Pluie.Yaml.DEBUG) of.state (done);
public static bool DBG_SHOW_TAG = true; }
public static bool DBG_SHOW_TYPE = true;
/**
*
*/
internal static void dbg (string? msg = null)
{
if (Pluie.Yaml.DEBUG && msg != null) of.echo (msg);
}
/**
* ParseError
*/
public errordomain AddNodeError
{
MAPPING_CONTAINS_CHILD,
MAPPING_IS_SINGLE_PAIR,
MAPPING_NOT_SINGLE_PAIR
}
private const ZlibCompressorFormat ZFORMAT = ZlibCompressorFormat.GZIP;
/**
*
*/
private void convert (File source, File dest, Converter converter) throws Error {
var src_stream = source.read ();
var dst_stream = dest.replace (null, false, 0);
var conv_stream = new ConverterOutputStream (dst_stream, converter);
// 'splice' pumps all data from an InputStream to an OutputStream
conv_stream.splice (src_stream, 0);
}
/**
* serialize an object as a yaml compressed document data
* @param obj the object to serialize
* @param dest path destination if you want to write to a file
*/
public static uint8[] serialize (GLib.Object? obj, string? dest = null)
{
Array<uint8> a = new Array<uint8> ();
if (obj != null) {
var node = obj.get_type ().is_a (typeof (Yaml.Node)) ? obj as Yaml.Node : Yaml.Builder.to_node (obj);
if (node != null) {
var content = node.to_yaml_string ();
var date = new GLib.DateTime.now_local ().format ("%s");
var path = Path.build_filename (Environment.get_tmp_dir (), "pluie-yaml-%s-%s.source".printf (date, node.uuid));
var dpath = dest == null ? path + ".gz" : dest;
var writter = new Io.Writter (path);
if (writter.write (content.data)) {
try {
var gzfile = File.new_for_path (dpath);
convert (writter.file, gzfile, new ZlibCompressor (ZFORMAT));
var reader = new Io.InputChunkStream(dpath, 80);
while (!reader.eof ()) {
var b = reader.read ();
a.append_vals (b, reader.get_buffer_size ());
}
writter.delete_file ();
if (dest == null) {
writter.delete_file (gzfile);
}
}
catch (GLib.Error e) {
of.error (e.message);
}
}
}
}
return a.data;
}
/**
* deserialize yaml compressed document data to a Yaml.Object
* @param zdata the data to deserialized
*/
public static Yaml.Root deserialize (uint8[] zdata)
{
Yaml.Root? obj = null;
if (zdata.length > 0) {
var date = new GLib.DateTime.now_local ().format ("%s");
var path = Path.build_filename (Environment.get_tmp_dir (), "pluie-yaml-%s.gz".printf (date));
var dpath = Path.build_filename (Environment.get_tmp_dir (), "pluie-yaml-%s.source".printf (date));
var writter = new Io.Writter (path);
if (writter.write (zdata)) {
var file = File.new_for_path (dpath);
try {
convert (writter.file, file, new ZlibDecompressor (ZFORMAT));
var config = new Yaml.Config (dpath);
obj = config.root_node ();
writter.delete_file ();
}
catch(GLib.Error e) {
of.error (e.message);
}
}
}
return obj;
}
/**
* haxadecimal sequence
*/
const string hexa_sequence = "0123456789abcdef";
/**
* convert %02x string to uint8
* @param hex2byte string representation of hexadecimal value on 1 byte
*/
uint8 hex_to_dec (string hexbyte)
{
return (uint8) (
Yaml.hexa_sequence.index_of(hexbyte.data[0].to_string ())*16 +
Yaml.hexa_sequence.index_of(hexbyte.data[1].to_string ())
);
}
/**
* enum MatchInfo keys of Yaml.Mode.find method related to mode FIND_MODE.SQUARE_BRACKETS of Yaml.Node
*/
public enum EVT {
NONE,
STREAM_START,
STREAM_END,
VERSION_DIRECTIVE,
TAG_DIRECTIVE,
DOCUMENT_START,
DOCUMENT_END,
BLOCK_SEQUENCE_START,
BLOCK_MAPPING_START,
BLOCK_END,
FLOW_SEQUENCE_START,
FLOW_SEQUENCE_END,
FLOW_MAPPING_START,
FLOW_MAPPING_END,
BLOCK_ENTRY,
FLOW_ENTRY,
KEY,
VALUE,
ALIAS,
ANCHOR,
TAG,
SCALAR;
/**
* @return infos related to EVT
*/
public string infos ()
{
return this.to_string().substring("PLUIE_YAML_".length);
}
/**
* @return event is key
*/
public bool is_key ()
{
return this == EVT.KEY;
}
/**
* @return event is anchor
*/
public bool is_anchor ()
{
return this == EVT.ANCHOR;
}
/**
* @return event is alias
*/
public bool is_alias ()
{
return this == EVT.ALIAS;
}
/**
* @return event is tag
*/
public bool is_tag ()
{
return this == EVT.TAG;
}
/**
* @return event is tag
*/
public bool is_tag_directive ()
{
return this == EVT.TAG_DIRECTIVE;
}
/**
* @return event is key
*/
public bool is_value ()
{
return this == EVT.VALUE;
}
/**
* @return event is scalar
*/
public bool is_scalar ()
{
return this == EVT.SCALAR;
}
/**
* @return event is mapping start event
*/
public bool is_mapping_start ()
{
return this == EVT.BLOCK_MAPPING_START || this == EVT.FLOW_MAPPING_START;
}
/**
* @return event is sequence start event
*/
public bool is_sequence_start ()
{
return this == EVT.BLOCK_SEQUENCE_START || this == EVT.FLOW_SEQUENCE_START;
}
/**
* @return event is sequence end event
*/
public bool is_sequence_end ()
{
return this == EVT.BLOCK_END || this == EVT.FLOW_SEQUENCE_END;
}
/**
* @return event is sequence entry event
*/
public bool is_entry ()
{
return this == EVT.BLOCK_ENTRY || this == EVT.FLOW_ENTRY;
}
/**
* @return event is mapping end event
*/
public bool is_mapping_end ()
{
return this == EVT.BLOCK_END;
}
/**
* @return event is error event
*/
public bool is_error ()
{
return this == EVT.NONE;
}
/**
* @return event is document start event
*/
public bool is_document_start ()
{
return this == EVT.DOCUMENT_START;
}
/**
* @return event is stream start event
*/
public bool is_stream_start ()
{
return this == EVT.STREAM_START;
}
}
/**
* enum possible find mode of Yaml.Node.mode
*/
public enum FIND_MODE
{
DOT,
SQUARE_BRACKETS;
/** /**
* *
*/ */
public static void dbg_action (string msg, string? val = null) public bool is_dot ()
{ {
if (Pluie.Yaml.DEBUG) of.action (msg, val); return this == DOT;
}
/**
*
*/
public static void dbg_keyval (string key, string val)
{
if (Pluie.Yaml.DEBUG) of.keyval (key, val);
}
/**
*
*/
public static void dbg_state (bool done)
{
if (Pluie.Yaml.DEBUG) of.state (done);
}
/**
*
*/
public static void dbg (string? msg = null)
{
if (Pluie.Yaml.DEBUG && msg != null) of.echo (msg);
}
/**
* ParseError
*/
public errordomain AddNodeError
{
MAPPING_CONTAINS_CHILD,
MAPPING_IS_SINGLE_PAIR,
MAPPING_NOT_SINGLE_PAIR
}
/**
* haxadecimal sequence
*/
const string hexa_sequence = "0123456789abcdef";
/**
* convert %02x string to uint8
* @param hex2byte string representation of hexadecimal value on 1 byte
*/
uint8 hex_to_dec (string hexbyte)
{
return (uint8) (
Yaml.hexa_sequence.index_of(hexbyte.data[0].to_string ())*16 +
Yaml.hexa_sequence.index_of(hexbyte.data[1].to_string ())
);
}
/**
* enum MatchInfo keys of Yaml.Mode.find method related to mode FIND_MODE.SQUARE_BRACKETS of Yaml.Node
*/
public enum EVT {
NONE,
STREAM_START,
STREAM_END,
VERSION_DIRECTIVE,
TAG_DIRECTIVE,
DOCUMENT_START,
DOCUMENT_END,
BLOCK_SEQUENCE_START,
BLOCK_MAPPING_START,
BLOCK_END,
FLOW_SEQUENCE_START,
FLOW_SEQUENCE_END,
FLOW_MAPPING_START,
FLOW_MAPPING_END,
BLOCK_ENTRY,
FLOW_ENTRY,
KEY,
VALUE,
ALIAS,
ANCHOR,
TAG,
SCALAR;
/**
* @return infos related to EVT
*/
public string infos ()
{
return this.to_string().substring("PLUIE_YAML_".length);
}
/**
* @return event is key
*/
public bool is_key ()
{
return this == EVT.KEY;
}
/**
* @return event is anchor
*/
public bool is_anchor ()
{
return this == EVT.ANCHOR;
}
/**
* @return event is alias
*/
public bool is_alias ()
{
return this == EVT.ALIAS;
}
/**
* @return event is tag
*/
public bool is_tag ()
{
return this == EVT.TAG;
}
/**
* @return event is tag
*/
public bool is_tag_directive ()
{
return this == EVT.TAG_DIRECTIVE;
}
/**
* @return event is key
*/
public bool is_value ()
{
return this == EVT.VALUE;
}
/**
* @return event is scalar
*/
public bool is_scalar ()
{
return this == EVT.SCALAR;
}
/**
* @return event is mapping start event
*/
public bool is_mapping_start ()
{
return this == EVT.BLOCK_MAPPING_START || this == EVT.FLOW_MAPPING_START;
}
/**
* @return event is sequence start event
*/
public bool is_sequence_start ()
{
return this == EVT.BLOCK_SEQUENCE_START || this == EVT.FLOW_SEQUENCE_START;
}
/**
* @return event is sequence end event
*/
public bool is_sequence_end ()
{
return this == EVT.BLOCK_END || this == EVT.FLOW_SEQUENCE_END;
}
/**
* @return event is sequence entry event
*/
public bool is_entry ()
{
return this == EVT.BLOCK_ENTRY || this == EVT.FLOW_ENTRY;
}
/**
* @return event is mapping end event
*/
public bool is_mapping_end ()
{
return this == EVT.BLOCK_END;
}
/**
* @return event is error event
*/
public bool is_error ()
{
return this == EVT.NONE;
}
}
/**
* enum possible find mode of Yaml.Node.mode
*/
public enum FIND_MODE
{
DOT,
SQUARE_BRACKETS;
/**
*
*/
public bool is_dot ()
{
return this == DOT;
}
}
public static FIND_MODE MODE = FIND_MODE.DOT;
/**
* enum MatchInfo keys of Yaml.Mode.find method related to mode FIND_MODE.SQUARE_BRACKETS of Yaml.Node
*/
internal enum FIND_COLLECTION { PATH, OPEN, KEY, CLOSE; }
/**
* enum MatchInfo keys of Yaml.Node.find method related to mode FIND_MODE.DOT of Yaml.Node
*/
internal enum FIND_DOT { PATH, KEY, SEQUENCE; }
/**
* enum possible type of Yaml.Node
*/
public enum NODE_TYPE
{
UNDEFINED,
ROOT,
SCALAR,
SINGLE_PAIR,
MAPPING,
SEQUENCE;
/**
* @return if current NODE_TYPE match a collection node (root|mapping|sequence)
*/
public bool is_collection ()
{
return this == MAPPING || this == SEQUENCE || this == ROOT;
}
/**
* @return if current NODE_TYPE match a scalar node
*/
public bool is_scalar ()
{
return this == SCALAR;
}
/**
* @return if current NODE_TYPE match a single/pair mapping node
*/
public bool is_single_pair ()
{
return this == SINGLE_PAIR;
}
/**
* @return if current NODE_TYPE match a mapping node
*/
public bool is_mapping ()
{
return this == MAPPING;
}
/**
* @return if current NODE_TYPE match a sequence node
*/
public bool is_sequence ()
{
return this == SEQUENCE;
}
/**
* @return if current NODE_TYPE match a root node
*/
public bool is_root ()
{
return this == ROOT;
}
/**
*@return infos related to NODE_TYPE
*/
public string infos ()
{
return this.to_string().substring("PLUIE_YAML_NODE_TYPE_".length);
}
}
/**
*@return universal infos related to NODE_TYPE
*/
public string uuid ()
{
var sb = new StringBuilder();
for (var i = 0; i < 4; i++) sb.append (Random.next_int ().to_string ("%08x"));
var h = sb.str;
var d = Yaml.hex_to_dec (h.substring (16, 2));
d &= 0x3f;
d |= 0x80;
return "%s-%s-4%s-%02x%s-%s".printf (
h.substring (0, 8),
h.substring (8, 4),
h.substring (13, 3),
d,
h.substring (18, 2),
h.substring (20)
);
} }
} }
public static FIND_MODE MODE = FIND_MODE.DOT;
/**
* enum MatchInfo keys of Yaml.Mode.find method related to mode FIND_MODE.SQUARE_BRACKETS of Yaml.Node
*/
internal enum FIND_COLLECTION { PATH, OPEN, KEY, CLOSE; }
/**
* enum MatchInfo keys of Yaml.Node.find method related to mode FIND_MODE.DOT of Yaml.Node
*/
internal enum FIND_DOT { PATH, KEY, SEQUENCE; }
/**
* enum possible type of Yaml.Node
*/
public enum NODE_TYPE
{
UNDEFINED,
ROOT,
SCALAR,
SINGLE_PAIR,
MAPPING,
SEQUENCE;
/**
* @return if current NODE_TYPE match a collection node (root|mapping|sequence)
*/
public bool is_collection ()
{
return this == MAPPING || this == SEQUENCE || this == ROOT;
}
/**
* @return if current NODE_TYPE match a scalar node
*/
public bool is_scalar ()
{
return this == SCALAR;
}
/**
* @return if current NODE_TYPE match a single/pair mapping node
*/
public bool is_single_pair ()
{
return this == SINGLE_PAIR;
}
/**
* @return if current NODE_TYPE match a mapping node
*/
public bool is_mapping ()
{
return this == MAPPING;
}
/**
* @return if current NODE_TYPE match a sequence node
*/
public bool is_sequence ()
{
return this == SEQUENCE;
}
/**
* @return if current NODE_TYPE match a root node
*/
public bool is_root ()
{
return this == ROOT;
}
/**
*@return infos related to NODE_TYPE
*/
public string infos ()
{
return this.to_string().substring("PLUIE_YAML_NODE_TYPE_".length);
}
}
/**
*@return a universal unique identifier (type 4)
*/
public string uuid ()
{
var sb = new StringBuilder();
for (var i = 0; i < 4; i++) sb.append (Random.next_int ().to_string ("%08x"));
var h = sb.str;
var d = Yaml.hex_to_dec (h.substring (16, 2));
d &= 0x3f;
d |= 0x80;
return "%s-%s-4%s-%02x%s-%s".printf (
h.substring (0, 8),
h.substring (8, 4),
h.substring (13, 3),
d,
h.substring (18, 2),
h.substring (20)
);
}
} }

68
src/vala/install.vala.in Normal file
View File

@ -0,0 +1,68 @@
/*^* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.56
* @type : library
* @date : 2018
* @license : GPLv3.0 <http://www.gnu.org/licenses/>
* @author : a-Sansara <[dev]at[pluie]dot[org]>
* @copyright : pluie.org <http://www.pluie.org>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* This file is part of pluie-yaml.
*
* pluie-yaml is free software (free as in speech) : 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 3 of the License,
* or (at your option) any later version.
*
* pluie-yaml 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 pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *^*/
/**
* root namespace of various Pluie lib
*/
namespace Pluie
{
/**
* Pluie.Io is dedicated to various input/ouput operations
*/
namespace Io
{
}
/**
* Samples namespace to illustrate or test functionnalities
*/
namespace Samples
{
}
/**
* Pluie.Yaml provides various tools to deal with yaml files and yaml nodes :
*
* Use {@link Yaml.Config} to load a .yml file and build a {@link Yaml.Root} node<<BR>>
* Use {@link Yaml.Config.get} to retriew a particular {@link Yaml.Node}<<BR>>
* Use {@link Yaml.Builder} to convert a {@link Yaml.Node} into a {@link Yaml.Object}<<BR>>
* Use {@link Yaml.Dumper} to dump a {@link Yaml.Object} or {@link Yaml.Node} into a yaml string<<BR>>
* Use {@link Yaml.serialize} to serialize a {@link Yaml.Object} or {@link Yaml.Node} into a string<<BR>>
* Use {@link Yaml.deserialize} to deserialize a serialized string into a {@link Yaml.Node}<<BR>>
* Use {@link Yaml.Collection} and {@link Yaml.AbstractChild} methods for Node traversing
*/
namespace Yaml
{
protected const string INSTALL_PATH = "@INSTALL_PATH@";
public const string DATA_PATH = "@DATA_PATH@";
public const string VERSION = "@VERSION@";
}
}

View File

@ -1,39 +1,48 @@
#!/bin/bash #!/bin/bash
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #^# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#
# @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
# @version : 0.60
# @type : library
# @date : 2018
# @license : GPLv3.0 <http://www.gnu.org/licenses/>
# @author : a-Sansara <[dev]at[pluie]dot[org]>
# @copyright : pluie.org <http://www.pluie.org>
# #
# @software : pluie-yaml <https://git.pluie.org/pluie/lib-yaml>
# @version : 0.5
# @type : library
# @date : 2018
# @licence : GPLv3.0 <http://www.gnu.org/licenses/>
# @author : a-Sansara <[dev]at[pluie]dot[org]>
# @copyright : pluie.org <http://www.pluie.org/>
#
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# #
# This file is part of pluie-yaml. # This file is part of pluie-yaml.
# #
# pluie-yaml is free software (free as in speech) : you can redistribute it # pluie-yaml is free software (free as in speech) : you can redistribute it
# and/or modify it under the terms of the GNU General Public License as # and/or modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation, either version 3 of the License, # published by the Free Software Foundation, either version 3 of the License,
# or (at your option) any later version. # or (at your option) any later version.
# #
# lib-yaml is distributed in the hope that it will be useful, but WITHOUT # pluie-yaml is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
# more details. # more details.
#
# You should have received a copy of the GNU General Public License
# along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
#
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# #
# You should have received a copy of the GNU General Public License
# along with pluie-yaml. If not, see <http://www.gnu.org/licenses/>.
#
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #^#
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
lib="pluie-yaml-0.5" lib="pluie-yaml-0.6"
cd $DIR cd $DIR
valadoc --package-name=$lib --verbose --force --deps -o ./doc --pkg gee-0.8 --pkg gio-2.0 --pkg gobject-2.0 --pkg gmodule-2.0 --pkg glib-2.0 --pkg pluie-echo-0.2 ./src/vala/Pluie/*.vala ./build/install.vala valadoc --package-name=$lib --verbose --force --deps -o ./doc --pkg gee-0.8 --pkg gio-2.0 --pkg gobject-2.0 --pkg gmodule-2.0 --pkg glib-2.0 --pkg pluie-echo-0.2 ./src/vala/Pluie/*.vala ./build/install.vala
rm doc/*.png if [ $? -eq 0 ]; then
cp resources/doc-scripts.js ./doc/scripts.js rm doc/*.png
cp resources/doc-style.css ./doc/style.css cp resources/doc-scripts.js ./doc/scripts.js
rm $lib.tar.gz cp resources/doc-style.css ./doc/style.css
tar -czvf $lib.tar.gz doc/ if [ -f "./docfix" ]; then
./docfix
if [ $? -eq 0 ]; then
rm $lib.tar.gz
tar -czvf $lib.tar.gz doc/
scp $lib.tar.gz pluie@pluie.org:/home/pluie/
ssh pluie@pluie.org "./updatedoc.sh $lib"
fi
fi
fi