add Yaml.serialize & Yaml.deserialize
This commit is contained in:
parent
7dde273ef7
commit
2b11962eb6
|
@ -61,7 +61,9 @@ configure_file(
|
||||||
sources = [
|
sources = [
|
||||||
'build/install.vala',
|
'build/install.vala',
|
||||||
'src/vala/Pluie/Io.Reader.vala',
|
'src/vala/Pluie/Io.Reader.vala',
|
||||||
|
'src/vala/Pluie/Io.InputChunkStream.vala',
|
||||||
'src/vala/Pluie/Io.StreamLineMark.vala',
|
'src/vala/Pluie/Io.StreamLineMark.vala',
|
||||||
|
'src/vala/Pluie/Io.Writter.vala',
|
||||||
'src/vala/Pluie/Yaml.global.vala',
|
'src/vala/Pluie/Yaml.global.vala',
|
||||||
'src/vala/Pluie/Yaml.AbstractChild.vala',
|
'src/vala/Pluie/Yaml.AbstractChild.vala',
|
||||||
'src/vala/Pluie/Yaml.AbstractNode.vala',
|
'src/vala/Pluie/Yaml.AbstractNode.vala',
|
||||||
|
|
|
@ -64,7 +64,7 @@ int main (string[] args)
|
||||||
// sum of the bytes of 'text' that already have been written to the stream
|
// sum of the bytes of 'text' that already have been written to the stream
|
||||||
written += dos.write (data[written:data.length]);
|
written += dos.write (data[written:data.length]);
|
||||||
}
|
}
|
||||||
of.echo ("write %lld bytes in `%s`".printf ((long) written, genpath));
|
of.echo ("write %ld bytes in `%s`".printf ((long) written, genpath));
|
||||||
Yaml.Dumper.show_yaml_string (root, true, true, true);
|
Yaml.Dumper.show_yaml_string (root, true, true, true);
|
||||||
} catch (Error e) {
|
} catch (Error e) {
|
||||||
stderr.printf ("%s\n", e.message);
|
stderr.printf ("%s\n", e.message);
|
||||||
|
|
113
samples/yaml-serialize.vala
Normal file
113
samples/yaml-serialize.vala
Normal file
|
@ -0,0 +1,113 @@
|
||||||
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
*
|
||||||
|
* @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;
|
||||||
|
|
||||||
|
public void test_object(Yaml.Example 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 ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
Yaml.Example obj = (Yaml.Example) Yaml.Builder.from_node (root.first ());
|
||||||
|
obj = (Yaml.Example) 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.echo ("");
|
||||||
|
of.action ("Deserialize zdata from", obj.yaml_name);
|
||||||
|
message ("*");
|
||||||
|
root = Yaml.deserialize (zdata);
|
||||||
|
message ("*");
|
||||||
|
root.display_childs ();
|
||||||
|
of.action ("Yaml build first child", obj.yaml_name);
|
||||||
|
obj = (Yaml.Example) Yaml.Builder.from_node (root.first ());
|
||||||
|
message ("*");
|
||||||
|
test_object (obj);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return (int) done;
|
||||||
|
}
|
79
src/vala/Pluie/Io.InputChunkStream.vala
Normal file
79
src/vala/Pluie/Io.InputChunkStream.vala
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
*
|
||||||
|
* @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;
|
||||||
|
class Pluie.Io.InputChunkStream : Object
|
||||||
|
{
|
||||||
|
protected ulong chunk_index;
|
||||||
|
protected uint8 chunk_size;
|
||||||
|
protected uint8 buffer_size;
|
||||||
|
protected uint8[] buffer;
|
||||||
|
protected FileStream fs;
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
public bool eof ()
|
||||||
|
{
|
||||||
|
bool stop = this.fs.eof ();
|
||||||
|
if (stop) {
|
||||||
|
this.buffer = null;
|
||||||
|
}
|
||||||
|
return stop;
|
||||||
|
}
|
||||||
|
public unowned uint8[] read ()
|
||||||
|
{
|
||||||
|
if (!this.eof ()) {
|
||||||
|
this.buffer_size = (uint8) this.fs.read (this.buffer);
|
||||||
|
this.chunk_index++;
|
||||||
|
}
|
||||||
|
return this.buffer;
|
||||||
|
}
|
||||||
|
public unowned uint8 get_buffer_size ()
|
||||||
|
{
|
||||||
|
return this.buffer_size;
|
||||||
|
}
|
||||||
|
public unowned uint8[] get_buffer ()
|
||||||
|
{
|
||||||
|
return this.buffer;
|
||||||
|
}
|
||||||
|
public ulong get_chunk_index ()
|
||||||
|
{
|
||||||
|
return this.chunk_index-1;
|
||||||
|
}
|
||||||
|
public uint8 get_chunk_size ()
|
||||||
|
{
|
||||||
|
return this.chunk_size;
|
||||||
|
}
|
||||||
|
}
|
|
@ -142,4 +142,18 @@ public class Pluie.Io.Reader
|
||||||
return this.readable;
|
return this.readable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
95
src/vala/Pluie/Io.Writter.vala
Normal file
95
src/vala/Pluie/Io.Writter.vala
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
*
|
||||||
|
* @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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* basic writer
|
||||||
|
*/
|
||||||
|
public class Pluie.Io.Writter
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* current file path
|
||||||
|
*/
|
||||||
|
public string path { get; internal set; }
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public File file { get; internal set; }
|
||||||
|
/**
|
||||||
|
* stream used to read the file
|
||||||
|
*/
|
||||||
|
DataOutputStream stream;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* construct a reader
|
||||||
|
* by adding {@link Io.StreamLineMark}
|
||||||
|
* @param path the path to load
|
||||||
|
*/
|
||||||
|
public Writter (string path)
|
||||||
|
{
|
||||||
|
this.path = path;
|
||||||
|
this.file = File.new_for_path (path);
|
||||||
|
try {
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* read current stream by line
|
||||||
|
* @param mark a mark used to operate possible future rewind
|
||||||
|
* @return current readed line
|
||||||
|
*/
|
||||||
|
public bool write (uint8[] data)
|
||||||
|
{
|
||||||
|
bool done = false;
|
||||||
|
try {
|
||||||
|
long written = 0;
|
||||||
|
while (written < data.length) {
|
||||||
|
// sum of the bytes that already have been written to the stream
|
||||||
|
written += stream.write (data[written:data.length]);
|
||||||
|
}
|
||||||
|
done = written == data.length;
|
||||||
|
}
|
||||||
|
catch (GLib.Error e) {
|
||||||
|
of.error (e.message);
|
||||||
|
}
|
||||||
|
return done;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -110,8 +110,7 @@ public abstract class Pluie.Yaml.AbstractNode : GLib.Object
|
||||||
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 +118,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
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -101,9 +101,9 @@ public class Pluie.Yaml.Config
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public Yaml.Node root_node ()
|
public Yaml.Root root_node ()
|
||||||
{
|
{
|
||||||
return this.finder.context;
|
return this.finder.context as Yaml.Root;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -56,11 +56,11 @@ public class Pluie.Yaml.Dumper
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public static bool SHOW_COLORS { get; internal set; default = false; }
|
static bool SHOW_COLOR { get; internal set; default = false; }
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public static bool SHOW_LINE { get; internal set; default = false; }
|
static bool SHOW_LINE { get; internal set; default = false; }
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -86,16 +86,11 @@ 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");
|
||||||
}
|
}
|
||||||
|
@ -108,8 +103,7 @@ public class Pluie.Yaml.Dumper
|
||||||
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 +112,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 +122,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 +150,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 () : ""));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -193,7 +187,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 +199,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 +212,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)
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -116,6 +116,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, ...)
|
||||||
|
|
|
@ -87,6 +87,72 @@ namespace Pluie
|
||||||
MAPPING_NOT_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);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static uint8[] serialize (GLib.Object? obj)
|
||||||
|
{
|
||||||
|
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 writter = new Io.Writter (path);
|
||||||
|
if (writter.write (content.data)) {
|
||||||
|
try {
|
||||||
|
var gzfile = File.new_for_path (path + ".gz");
|
||||||
|
convert (writter.file, gzfile, new ZlibCompressor (ZFORMAT));
|
||||||
|
var reader = new Io.InputChunkStream(path + ".gz", 80);
|
||||||
|
while (!reader.eof ()) {
|
||||||
|
var b = reader.read ();
|
||||||
|
a.append_vals (b, reader.get_buffer_size ());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (GLib.Error e) {
|
||||||
|
of.error (e.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return a.data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
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);
|
||||||
|
convert (writter.file, file, new ZlibDecompressor (ZFORMAT));
|
||||||
|
var config = new Yaml.Config (dpath);
|
||||||
|
obj = config.root_node ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* haxadecimal sequence
|
* haxadecimal sequence
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue
Block a user