add dumper + attempt debug next value entry on processor

This commit is contained in:
a-sansara 2018-08-23 18:47:08 +02:00
parent 37f5e43720
commit a6d16dee96
17 changed files with 407 additions and 46 deletions

View File

@ -95,7 +95,7 @@ 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 pluie-echo-0.2 --pkg $lib $1 -o ./bin/$fx" local cmd="valac -v --pkg gee-0.8 --pkg gio-2.0 --pkg pluie-echo-0.2 --pkg $lib $1 -o ./bin/$fx"
build.title "$f SAMPLE BUILD" build.title "$f SAMPLE BUILD"
echo -e "\n$cmd" echo -e "\n$cmd"
$cmd $cmd

View File

@ -68,6 +68,7 @@ sources = [
'src/vala/Pluie/Yaml.Builder.vala', 'src/vala/Pluie/Yaml.Builder.vala',
'src/vala/Pluie/Yaml.Collection.vala', 'src/vala/Pluie/Yaml.Collection.vala',
'src/vala/Pluie/Yaml.Config.vala', 'src/vala/Pluie/Yaml.Config.vala',
'src/vala/Pluie/Yaml.Dumper.vala',
'src/vala/Pluie/Yaml.Event.vala', 'src/vala/Pluie/Yaml.Event.vala',
'src/vala/Pluie/Yaml.Example.vala', 'src/vala/Pluie/Yaml.Example.vala',
'src/vala/Pluie/Yaml.ExampleChild.vala', 'src/vala/Pluie/Yaml.ExampleChild.vala',

View File

@ -27,20 +27,43 @@
- 3.2 - 3.2
- 4.2 - 4.2
!v!Gee.ArrayList type_gee_alobject : !v!Gee.ArrayList type_gee_alobject :
- toto : totovalue1 - !v!Pluie.Yaml.ExampleChild entry1:
tata : tatavalue1 toto : totovalue1
titi : 789 tata : tatavalue1
tutu : true titi : 789
- toto : totovalue2 tutu : true
tata : tatavalue2 - !v!Pluie.Yaml.ExampleChild entry2:
titi : 456 toto : totovalue2
tutu : false tata : tatavalue2
- toto : totovalue3 titi : 456
tata : tatavalue3 tutu : false
titi : 123 - !v!Pluie.Yaml.ExampleChild entry3:
tutu : 1 toto : totovalue3
- toto : totovalue4 tata : tatavalue3
tata : tatavalue4 titi : 123
titi : 44 tutu : 1
tutu : 0 - !v!Pluie.Yaml.ExampleChild entry4:
toto : totovalue4
tata : tatavalue4
titi : 44
tutu : 0
#~ !v!Gee.ArrayList type_gee_alobject :
#~ - toto : totovalue1
#~ tata : tatavalue1
#~ titi : 789
#~ tutu : true
#~ - toto : totovalue2
#~ tata : tatavalue2
#~ titi : 456
#~ tutu : false
#~ - toto : totovalue3
#~ tata : tatavalue3
#~ titi : 123
#~ tutu : 1
#~ - toto : totovalue4
#~ tata : tatavalue4
#~ titi : 44
#~ tutu : 0

75
samples/yaml-dump.vala Normal file
View File

@ -0,0 +1,75 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @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 + "/tag.yml";
var done = false;
of.title ("Pluie Yaml Library", Pluie.Yaml.VERSION, "a-sansara");
Pluie.Yaml.DEBUG = true;
var config = new Yaml.Config (path, true);
var root = config.root_node () as Yaml.Root;
if ((done = root != null)) {
root.display_childs ();
of.action("Yaml.Node", "to_yaml_string");
string yaml = root.to_yaml_string ();
print (yaml);
try {
// an output file in the current working directory
var file = File.new_for_path ( "./tag-generated.yml");
// delete if file already exists
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]);
}
} catch (Error e) {
stderr.printf ("%s\n", e.message);
return 1;
}
}
return (int) done;
}

View File

@ -51,7 +51,7 @@ int main (string[] args)
foreach (var node in root) { foreach (var node in root) {
of.action ("Yaml.Object from node", node.name); of.action ("Yaml.Object from node", node.name);
of.echo (node.to_string (false)); of.echo (node.to_string (false));
if ((obj = Yaml.Builder.from_node (node)) != null) { if ((obj = (Yaml.Object) Yaml.Builder.from_node (node)) != null) {
list[node.name] = obj; list[node.name] = obj;
} }
else { else {
@ -75,16 +75,28 @@ int main (string[] args)
of.keyval("type_float" , "%f" .printf(o.type_float)); of.keyval("type_float" , "%f" .printf(o.type_float));
of.keyval("type_double" , "%f" .printf(o.type_double)); of.keyval("type_double" , "%f" .printf(o.type_double));
of.keyval("type_struct" , "%s" .printf(o.type_struct.to_string ())); of.keyval("type_struct" , "%s" .printf(o.type_struct.to_string ()));
of.keyval("type_enum" , "%d (%s)" .printf(o.type_enum, o.type_enum.infos()));
of.keyval("type_object" , "%s" .printf(o.type_object.get_type ().name ())); of.keyval("type_object" , "%s" .printf(o.type_object.get_type ().name ()));
of.keyval(" toto" , "%s (string)" .printf(o.type_object.toto)); of.keyval(" toto" , "%s (string)" .printf(o.type_object.toto));
of.keyval(" tapa" , "%s (string)" .printf(o.type_object.tata)); of.keyval(" tapa" , "%s (string)" .printf(o.type_object.tata));
of.keyval(" titi" , "%d (int)" .printf(o.type_object.titi)); of.keyval(" titi" , "%d (int)" .printf(o.type_object.titi));
of.keyval(" tutu" , "%s (bool)" .printf(o.type_object.tutu.to_string ())); of.keyval(" tutu" , "%s (bool)" .printf(o.type_object.tutu.to_string ()));
o.type_object.method_a (); o.type_object.method_a ();
if (o.type_gee_al != null) { if (o.type_gee_al!= null) {
of.keyval("type_gee_al", "(%s)" .printf(o.type_gee_al.get_type ().name ())); of.keyval("type_gee_al", "(%s)" .printf(o.type_gee_al.get_type ().name ()));
foreach (double v in o.type_gee_al) { foreach (var v in o.type_gee_al) {
of.echo(" - item : %f".printf (v)); of.echo(" - item : %g".printf (v));
}
}
if (o.type_gee_alobject != null) {
of.keyval("type_gee_alobject", "(%s<%s>)" .printf(o.type_gee_alobject.get_type ().name (), o.type_gee_alobject.element_type.name ()));
foreach (var child in o.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 ();
} }
} }
} }

View File

@ -63,17 +63,22 @@ int main (string[] args)
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 ()));
foreach (var v in obj.type_gee_al) { foreach (var v in obj.type_gee_al) {
of.echo(" - item : %f".printf (v)); of.echo(" - item : %g".printf (v));
} }
of.keyval("type_object", "(%s)" .printf(obj.type_object.get_type ().name ())); of.keyval("type_object", "(%s)" .printf(obj.type_object.get_type ().name ()));
of.echo(" - item toto : %s".printf (obj.type_object.toto)); of.keyval(" toto" , "%s (string)" .printf(obj.type_object.toto));
of.echo(" - item tata : %s".printf (obj.type_object.tata)); 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 (); 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 ())); 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) { foreach (var child in obj.type_gee_alobject) {
of.echo(" - item toto : %s".printf (child.toto)); of.echo(" == entry (%s) ==".printf(child.get_type ().name ()));
of.echo(" - item tata : %s".printf (child.tata)); 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 (); child.method_a ();
} }
} }

View File

@ -103,4 +103,16 @@ public abstract class Pluie.Yaml.AbstractNode : GLib.Object
return ""; return "";
} }
/**
* get a yaml presentation of current Yaml.Node
*/
public string to_yaml_string (
int indent = Yaml.Dumper.DEFAULT_INDENT,
bool show_doc = Yaml.Dumper.SHOW_DOC,
bool show_tags = Yaml.Dumper.SHOW_TAGS,
bool show_fullkeys = Yaml.Dumper.SHOW_FULL_KEYS
)
{
return Yaml.Dumper.dump ((Yaml.Node) this, indent, show_doc, show_tags);
}
} }

View File

@ -282,7 +282,7 @@ public class Pluie.Yaml.Builder
case Type.DOUBLE : case Type.DOUBLE :
double d; double d;
obj.get (name, out d); obj.get (name, out d);
v = "%f".printf (d); v = "%g".printf (d);
break; break;
case Type.FLOAT : case Type.FLOAT :
float f; float f;

View File

@ -0,0 +1,186 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @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;
/**
* interface representing a collection node
*/
public class Pluie.Yaml.Dumper
{
/**
*
*/
public static int DEFAULT_INDENT { get; internal set; default = 4; }
/**
*
*/
public static bool SHOW_DOC { get; internal set; default = true; }
/**
*
*/
public static bool SHOW_TAGS { get; internal set; default = true; }
/**
*
*/
public static bool SHOW_FULL_KEYS { get; internal set; default = false; }
/**
*
*/
internal Dumper ()
{
}
/**
* get a yaml presentation of current Yaml.Node
*/
public static string dump (
Yaml.Node node,
int indent = Yaml.Dumper.DEFAULT_INDENT,
bool show_doc = Yaml.Dumper.SHOW_DOC,
bool show_tags = Yaml.Dumper.SHOW_TAGS,
bool show_fullkeys = Yaml.Dumper.SHOW_FULL_KEYS
)
{
var yaml = new StringBuilder("");
if (node.ntype.is_root ()) {
yaml_root (ref yaml, node as Yaml.Root, show_doc);
foreach (var child in node) {
yaml.append (Yaml.Dumper.dump (child, indent, show_doc, show_tags, show_fullkeys));
}
}
else if (node.ntype.is_single_pair ()) {
yaml_key (ref yaml, node, indent);
yaml_scalar (ref yaml, node.first (), indent);
}
else if (node.ntype.is_collection ()) {
yaml_key (ref yaml, node, indent);
foreach (var child in node) {
yaml.append (Yaml.Dumper.dump (child, indent, show_doc, show_tags, show_fullkeys));
}
}
else if (node.ntype.is_scalar ()) {
yaml_scalar (ref yaml, node, indent);
}
return yaml.str;
//~ return "%s%s%s%s%s%s%s%s%s%s%s".printf (
//~ this.level == 0 ? "" : of.s_indent ((int8) (withIndent ? (this.level-1)*4 : 0)),
//~ of.c (ECHO.OPTION).s ("["),
//~ this.name != null && !this.ntype.is_scalar ()
//~ ? of.c (ntype.is_root () ? ECHO.MICROTIME : ECHO.TIME).s ("%s".printf (this.name))
//~ : (
//~ this.ntype.is_scalar ()
//~ ? of.c(ECHO.DATE).s ("%s".printf (this.data))
//~ : ""
//~ ),
//~ withRefCount ? of.c (ECHO.COMMAND).s ("[%lu]".printf (this.ref_count)) : "",
//~ !withParent || this.parent == null
//~ ? withLevel ? of.c (ECHO.NUM).s (" %d".printf (this.level)) : ""
//~ : of.c (ECHO.SECTION).s (" "+this.parent.name)+(
//~ withLevel ? of.c (ECHO.NUM).s (" %d".printf (this.level)) : " "
//~ ),
//~ withType ? of.c (ECHO.OPTION_SEP).s (" %s".printf(this.ntype.infos ())) : "",
//~ withCount && this.ntype.is_collection () ? of.c (ECHO.MICROTIME).s (" %d".printf(this.count ())) : "",
//~ withUuid ? of.c (ECHO.COMMENT).s (" %s".printf(this.uuid[0:8]+"...")) : "",
//~ this.tag != null && withTag
//~ ? " %s%s".printf (
//~ of.c (ECHO.TITLE).s (" %s ".printf(this.tag.handle)),
//~ of.c (ECHO.DEFAULT).s (" %s".printf(this.tag.value))
//~ )
//~ : "",
//~ of.c (ECHO.OPTION).s ("]"),
//~ withTag && this.ntype.is_root () ? (this as Yaml.Root).get_display_tag_directives () : ""
//~ );
}
/**
*
*/
private static void yaml_indent (ref StringBuilder yaml, Yaml.Node node, int indent, bool wrapchild = false)
{
yaml.append("%s".printf (string.nfill ((node.level-1) * indent - (wrapchild ? 2 : 0), ' ')));
}
/**
*
*/
private static void yaml_tag (ref StringBuilder yaml, Yaml.Node node)
{
if (node.tag != null) yaml.append ("!%s!%s ".printf (node.tag.handle, node.tag.value));
}
/**
*
*/
private static void yaml_root (ref StringBuilder yaml, Yaml.Root node, bool show_doc)
{
yaml.append("%YAML %s\n".printf (Yaml.YAML_VERSION));
foreach (var entry in node.tag_directives.entries) {
yaml.append ("%TAG %s %s\n".printf (entry.key, entry.value));
}
if (show_doc) yaml.append ("---\n");
}
/**
*
*/
private static void yaml_key (ref StringBuilder yaml, Yaml.Node node, int indent)
{
bool wrapseq = node.parent.ntype.is_sequence () && node.ntype.is_mapping () && node.name[0]=='_';
bool childwrap = node.parent.parent.ntype.is_sequence () && node.parent.ntype.is_mapping () && node.parent.name[0]=='_';
if (!childwrap) yaml_indent (ref yaml, node, indent);
else if (!node.is_first ()) {
yaml_indent (ref yaml, node, indent, true);
}
if (node.parent.ntype.is_sequence ()) yaml.append ("- ");
if (wrapseq) {
of.warn ("node %s wrapseq ? %s".printf (node.name, wrapseq.to_string ()));
}
yaml_tag (ref yaml, node);
if (!wrapseq) {
yaml.append("%s:%s".printf(node.name, node.ntype.is_collection () ? "\n" : " "));
}
}
/**
*
*/
private static void yaml_scalar (ref StringBuilder yaml, Yaml.Node node, int indent)
{
if (!node.parent.ntype.is_single_pair ()) yaml_indent (ref yaml, node, indent);
if (node.parent.ntype.is_sequence ()) yaml.append ("- ");
yaml_tag (ref yaml, node);
yaml.append ("%s\n".printf (node.data));
}
}

View File

@ -145,10 +145,10 @@ public class Pluie.Yaml.Example : Yaml.Object
else if (type == typeof (Gee.ArrayList)) { else if (type == typeof (Gee.ArrayList)) {
switch (name) { switch (name) {
case "type_gee_al" : case "type_gee_al" :
Yaml.GeeBuilder.arraylist_to_node (this.type_gee_al, name, parent); Yaml.GeeBuilder.fundamental_arraylist_to_node (this.type_gee_al, name, parent);
break; break;
case "type_gee_alobject" : case "type_gee_alobject" :
Yaml.Object.collection_to_node (this.type_gee_alobject, name, parent); Yaml.Object.objects_collection_to_node (this.type_gee_alobject, name, parent);
break; break;
} }

View File

@ -40,14 +40,15 @@ public class Pluie.Yaml.GeeBuilder
/** /**
* *
*/ */
public static Yaml.Node? 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)
{ {
Yaml.dbg_action ("prop %s (type %s) has element type :".printf (property_name, o->get_type ().name ()), o->element_type.name ()); Yaml.dbg_action ("prop %s (type %s) has element type :".printf (property_name, o->get_type ().name ()), o->element_type.name ());
Yaml.Node? node = null;
var type = o->element_type; var type = o->element_type;
var node = new Yaml.Sequence (parent, property_name); if (!type.is_object () && type.is_fundamental ()) {
var it = o->iterator(); node = new Yaml.Sequence (parent, property_name);
while (it.next ()) { var it = o->iterator();
if (!type.is_object () && type.is_fundamental ()) { while (it.next ()) {
string data = ""; string data = "";
if (is_char && (type == typeof (unichar) || type == typeof (uchar))) { if (is_char && (type == typeof (unichar) || type == typeof (uchar))) {
void* d = (void*) it.get (); void* d = (void*) it.get ();
@ -85,8 +86,8 @@ public class Pluie.Yaml.GeeBuilder
data = f.to_string (); data = f.to_string ();
break; break;
case Type.DOUBLE : case Type.DOUBLE :
double* d = (double*) it.get (); var d = (double*) it.get ();
data = d.to_string (); data = "%g".printf (double.parse(d.to_string ()));
break; break;
default : default :
data = (string) it.get (); data = (string) it.get ();
@ -95,9 +96,9 @@ public class Pluie.Yaml.GeeBuilder
} }
new Yaml.Scalar (node, data); new Yaml.Scalar (node, data);
} }
else if (type.is_object ()) { }
else {
} of.error ("in %s : Gee.ArrayList.element_type (%s) is not a fundamental type".printf (Log.METHOD, type.name ()));
} }
return node; return node;
} }

View File

@ -113,14 +113,15 @@ public abstract class Pluie.Yaml.Object : GLib.Object
/** /**
* *
*/ */
public static Yaml.Node? 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 ()) {
Yaml.Builder.to_node ( var s = Yaml.Builder.to_node (
(GLib.Object) it.get (), (GLib.Object) it.get (),
node, node,
false, false,

View File

@ -77,6 +77,11 @@ public class Pluie.Yaml.Processor
*/ */
string? tagHandle; string? tagHandle;
/**
* current tag handle
*/
Yaml.Event? nextValueEvt;
/** /**
* Events list * Events list
*/ */
@ -164,6 +169,7 @@ public class Pluie.Yaml.Processor
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 ("Processing event %s".printf (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 ();
} }
@ -220,6 +226,7 @@ public class Pluie.Yaml.Processor
this.keyTag = null; this.keyTag = null;
this.valueTag = null; this.valueTag = null;
this.beginFlowSeq = false; this.beginFlowSeq = false;
this.nextValueEvt = null;
} }
/** /**
@ -256,6 +263,8 @@ public class Pluie.Yaml.Processor
var e = this.iterator.get (); var e = this.iterator.get ();
if (e != null && e.evtype.is_value ()) { if (e != null && e.evtype.is_value ()) {
evt = this.next_event (); evt = this.next_event ();
this.nextValueEvt = evt;
of.echo ("next value event is %s".printf (evt.evtype.infos ()));
} }
return evt; return evt;
} }
@ -282,10 +291,31 @@ public class Pluie.Yaml.Processor
*/ */
private void on_block_end () private void on_block_end ()
{ {
this.parent_node = this.prev_node.parent != null && this.prev_node.parent != this.root of.echo (" > [ ON BLOCK END ]");
? this.prev_node.parent.parent if (!this.prev_node.ntype.is_collection ()) {
of.echo (" *** prev not a collection deal with parent");
this.prev_node = this.prev_node.parent;
}
of.echo (" PREV WAS %s (%s)".printf (this.prev_node.ntype.infos (), this.prev_node.name));
of.echo (" PARENT WAS %s (%s)".printf (this.parent_node.ntype.infos (), this.parent_node.name));
bool isSequenceWithBlock = this.prev_node.ntype.is_sequence () && !this.prev_node.empty() && this.prev_node.first ().ntype.is_collection ();
of.echo (" !! isSequenceWithBlock ? %s".printf (isSequenceWithBlock.to_string ()));
if (!isSequenceWithBlock || (isSequenceWithBlock && (this.prev_node as Yaml.Sequence).close_block)) {
of.echo (" PREV IS NOT A SEQUENCE OR !! isSequenceWithBlock ? %s".printf (isSequenceWithBlock.to_string ()));
this.parent_node = this.prev_node.parent != null && this.prev_node.parent != this.root
? 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;
}
}
of.echo (" PREV IS %s (%s)".printf (this.prev_node.ntype.infos (), this.prev_node.name));
of.echo (" PARENT IS %s (%s)".printf (this.parent_node.ntype.infos (), this.parent_node.name));
of.echo (" < [ ON BLOCK END ]");
} }
/** /**
@ -294,7 +324,9 @@ public class Pluie.Yaml.Processor
private void on_entry () private void on_entry ()
{ {
this.event = this.next_event(); this.event = this.next_event();
if (this.event.evtype.is_mapping_start ()) { of.echo (" >>> ON ENTRY : next value event is %s".printf (this.nextValueEvt.evtype.infos ()));
if (this.event.evtype.is_mapping_start () && this.nextValueEvt.evtype.is_mapping_start ()) {
of.echo (" THE mapping start");
this.on_mapping_start (true); this.on_mapping_start (true);
} }
else if (this.event.evtype.is_scalar ()) { else if (this.event.evtype.is_scalar ()) {
@ -420,6 +452,7 @@ public class Pluie.Yaml.Processor
if (entry) { if (entry) {
this.ckey = "_%d".printf(this.parent_node.count()); this.ckey = "_%d".printf(this.parent_node.count());
} }
of.echo ("ckey : %s".printf (this.ckey));
this.node = new Yaml.Mapping (this.parent_node, this.ckey); this.node = new Yaml.Mapping (this.parent_node, this.ckey);
this.change = true; this.change = true;
} }
@ -446,6 +479,10 @@ public class Pluie.Yaml.Processor
Yaml.dbg (this.node.name); Yaml.dbg (this.node.name);
} }
if (this.change) { if (this.change) {
if (this.node.parent.ntype.is_sequence ()) {
var seq = this.node.parent as Yaml.Sequence;
if (seq != null) seq.close_block = false;
}
Yaml.dbg_action ("on change", this.node.name != null ? this.node.name : this.node.data); Yaml.dbg_action ("on change", this.node.name != null ? this.node.name : this.node.data);
if (this.keyTag != null) { if (this.keyTag != null) {
Yaml.dbg_action ("setting tag", this.keyTag.@value); Yaml.dbg_action ("setting tag", this.keyTag.@value);
@ -460,11 +497,15 @@ public class Pluie.Yaml.Processor
} }
} }
if (this.node.ntype.is_collection () && (this.node.empty() || (!this.node.first().ntype.is_scalar ()))) { if (this.node.ntype.is_collection () && (this.node.empty() || (!this.node.first().ntype.is_scalar ()))) {
of.echo (" => SET *** **parent %s (%s) TO node %s (%s) ****".printf (this.parent_node.ntype.infos (), this.parent_node.name, this.node.ntype.infos (), this.node.name));
of.echo (" => CURNODE %s (%s) has parent : %s (%s) ****".printf (this.node.ntype.infos (), this.node.name, this.node.parent.ntype.infos (), this.node.parent.name));
this.parent_node = this.node; this.parent_node = this.node;
} }
else { else {
of.echo (" => SET parent %s (%s) TO node %s (%s) ====".printf (this.parent_node.ntype.infos (), this.parent_node.name, this.node.parent.ntype.infos (), this.node.parent.name));
this.parent_node = this.node.parent; this.parent_node = this.node.parent;
} }
of.echo (" => SET prev_node %s (%s) TO node %s (%s) ====".printf (this.prev_node.ntype.infos (), this.prev_node.name, this.node.ntype.infos (), this.node.name));
this.prev_node = this.node; this.prev_node = this.node;
this.tagHandle = null; this.tagHandle = null;
this.keyTag = null; this.keyTag = null;

View File

@ -170,6 +170,7 @@ public class Pluie.Yaml.Register
Yaml.dbg ("resolve_namespace_type %u (%s) => %s".printf (serial, type.name (), name)); Yaml.dbg ("resolve_namespace_type %u (%s) => %s".printf (serial, type.name (), name));
ns_resolved.set (serial, name); ns_resolved.set (serial, name);
} }
of.echo ("resolve_namespace_type %s => %s".printf (type.name (), get_resolved_ns (type)));
return get_resolved_ns (type); return get_resolved_ns (type);
} }

View File

@ -126,7 +126,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

@ -37,6 +37,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; }
/** /**
* default Yaml.Node constructor * default Yaml.Node constructor

View File

@ -32,6 +32,8 @@ namespace Pluie
{ {
namespace Yaml namespace Yaml
{ {
const string YAML_VERSION = "1.2";
public static bool DEBUG = false; public static bool DEBUG = false;
public static bool DBG_SHOW_INDENT = true; public static bool DBG_SHOW_INDENT = true;