begin tag impl

This commit is contained in:
a-sansara 2018-08-08 18:01:10 +02:00
parent 79a5c4704c
commit a3ba700140
12 changed files with 252 additions and 3 deletions

View File

@ -180,6 +180,16 @@ vala code :
#### via iterator
```vala
var config = new Yaml.Config (path);
var root = config.root_node ();
foreach (var child in root) {
of.echo (child.to_string ());
}
```
or
```vala
var config = new Yaml.Config (path);
var root = config.root_node ();

View File

@ -60,6 +60,7 @@ sources = [
'build/install.vala',
'src/vala/Pluie/Io.Reader.vala',
'src/vala/Pluie/Io.StreamLineMark.vala',
'src/vala/Pluie/Db.Profile.vala',
'src/vala/Pluie/Yaml.global.vala',
'src/vala/Pluie/Yaml.AbstractChild.vala',
'src/vala/Pluie/Yaml.AbstractNode.vala',
@ -70,6 +71,7 @@ sources = [
'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.Scalar.vala',
'src/vala/Pluie/Yaml.Scanner.vala',
'src/vala/Pluie/Yaml.Sequence.vala',

View File

@ -5,6 +5,7 @@ bo :
user : dev
password : mysql
charset : utf8
port : 3306
therapy :
driver : mysql
@ -13,3 +14,4 @@ therapy :
user : dev
password : mysql
charset : utf8
port : !!int 3306

80
samples/yamlize.vala Normal file
View File

@ -0,0 +1,80 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : lib-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.4
* @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 lib-yaml.
*
* lib-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.
*
* lib-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 lib-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 + "/config/db.yml";
var done = false;
of.title ("Pluie Yaml Library", Pluie.Yaml.VERSION, "a-sansara");
Pluie.Yaml.Scanner.DEBUG = false;
var config = new Yaml.Config (path, true);
Yaml.Node root = (Yaml.Node) config.root_node ();
Gee.HashMap<string, Db.Profile> db = new Gee.HashMap<string, Db.Profile> ();
if ((done = root != null)) {
foreach (var node in root) {
of.action ("Yamlize DB profile", node.name);
db[node.name] = new Db.Profile ();
if (db[node.name].yamlize (node)) {
foreach (var p in db[node.name].get_class().list_properties ()) {
var g = (node as Yaml.Mapping).item (p.name);
if (g.tag == null) {
var v = null;
db[node.name].get(p.name, &v);
of.keyval (p.name, v != null ? v : "null");
}
else {
//~ of.echo ("tag is %s".printf (g.tag));
if (g.tag == "int") {
int z = -1;
db[node.name].get(p.name, ref z);
of.keyval (p.name, z.to_string ());
}
}
}
}
node = node.next_sibling ();
}
}
of.echo ("param [%s] port as int %d".printf ("bo", db["bo"].port));
of.echo ("param [%s] port as int %d".printf ("therapy", db["therapy"].port));
of.rs (done);
of.echo ();
return (int) done;
}

View File

@ -0,0 +1,44 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : lib-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.4
* @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 lib-yaml.
*
* lib-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.
*
* lib-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 lib-yaml. If not, see <http://www.gnu.org/licenses/>.
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/
/**
* a test class to implements yamlize
*/
public class Pluie.Db.Profile : Yaml.Object
{
public string driver { get; set; }
public string host { get; set; }
public string dbname { get; set; }
public string user { get; set; }
public string password { get; set; }
public string charset { get; set; }
public int port { get; set; }
}

View File

@ -51,6 +51,11 @@ public abstract class Pluie.Yaml.AbstractChild : Yaml.AbstractNode
*/
public string? anchor { get; internal set; default = null; }
/**
*
*/
public string? tag { get; internal set; default = null; }
/**
* default Yaml.Node constructor
* @param parent the parent node

View File

@ -34,7 +34,7 @@ using Pluie;
/**
* abstract class representing a node
*/
public abstract class Pluie.Yaml.AbstractNode : Object
public abstract class Pluie.Yaml.AbstractNode : GLib.Object
{
/**
* universal unique identifier

View File

@ -34,7 +34,7 @@ using Pluie;
/**
* Finder class used to easily retriew Yaml.Node
*/
public class Pluie.Yaml.Finder : Object
public class Pluie.Yaml.Finder : GLib.Object
{
/**

View File

@ -273,7 +273,7 @@ public class Pluie.Yaml.Node : Yaml.AbstractChild, Pluie.Yaml.Collection
*/
public override string to_string (bool withIndent = Yaml.DBG_SHOW_INDENT, bool withParent = Yaml.DBG_SHOW_PARENT, bool withUuid = Yaml.DBG_SHOW_UUID, bool withLevel = Yaml.DBG_SHOW_LEVEL, bool withCount = Yaml.DBG_SHOW_COUNT, bool withRefCount = Yaml.DBG_SHOW_REF)
{
return "%s%s%s%s%s%s%s%s%s".printf (
return "%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 ()
@ -294,6 +294,7 @@ public class Pluie.Yaml.Node : Yaml.AbstractChild, Pluie.Yaml.Collection
)),
withCount ? of.c (ECHO.MICROTIME).s (" %d".printf(this.count ())) : "",
withUuid ? of.c (ECHO.COMMENT).s (" %s".printf(this.uuid[0:8]+"...")) : "",
this.tag != null ? of.c (ECHO.OPTION_SEP).s (" %s".printf(this.tag)) : "",
//~ of.c (ECHO.NUM).s ("%d".printf (this.level)),
of.c (ECHO.OPTION).s ("]")
);

View File

@ -0,0 +1,72 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* @software : lib-yaml <https://git.pluie.org/pluie/lib-yaml>
* @version : 0.4
* @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 lib-yaml.
*
* lib-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.
*
* lib-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 lib-yaml. If not, see <http://www.gnu.org/licenses/>.
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/
using GLib;
using Gee;
/**
* a test class to implements yamlize
*/
public abstract class Pluie.Yaml.Object : GLib.Object
{
/**
*
*/
public bool yamlize (Yaml.Node node)
{
bool done = false;
try {
if (node!= null && !node.empty ()) {
Iterator<Yaml.Node> it = node.iterator ();
foreach (var child in node) {
foreach (var p in this.get_class ().list_properties ()) {
if (p.name == child.name) {
if (child.tag != null) {
switch (child.tag) {
case "int" :
this.set (p.name, int.parse(child.first ().data));
break;
}
}
else {
this.set (p.name, child.first ().data);
}
}
}
}
}
}
catch (GLib.Error e) {
of.warn (e.message);
done = false;
}
done = true;
return done;
}
}

View File

@ -61,6 +61,16 @@ public class Pluie.Yaml.Processor
*/
string? ckey;
/**
* current tag suffix
*/
string? tagSuffix;
/**
* current tag handle
*/
string? tagHandle;
/**
* Events list
*/
@ -198,6 +208,8 @@ public class Pluie.Yaml.Processor
this.change = false;
this.ckey = null;
this.idAnchor = null;
this.tagHandle = null;
this.tagSuffix = null;
this.beginFlowSeq = false;
}
@ -285,6 +297,12 @@ public class Pluie.Yaml.Processor
*/
private void on_value ()
{
if (this.event.evtype.is_tag ()) {
of.keyval ("tag", this.event.evtype.to_string ());
this.tagSuffix = this.event.data["suffix"];
this.tagHandle = this.event.data["handle"];
this.event = this.next_event ();
}
if (this.event.evtype.is_scalar ()) {
this.on_scalar ();
}
@ -389,6 +407,11 @@ public class Pluie.Yaml.Processor
private void on_update ()
{
if (this.change) {
if (this.tagSuffix != null) {
of.action ("setting tag");
this.node.tag = this.tagSuffix;
of.echo (this.node.to_string ());
}
if (this.node.ntype.is_collection () && (this.node.empty() || (!this.node.first().ntype.is_scalar ()))) {
this.parent_node = this.node;
}
@ -396,6 +419,8 @@ public class Pluie.Yaml.Processor
this.parent_node = this.node.parent;
}
this.prev_node = this.node;
this.tagHandle = null;
this.tagSuffix = null;
this.node = null;
this.change = false;
}

View File

@ -124,6 +124,14 @@ namespace Pluie
return this == EVT.ALIAS;
}
/**
* @return event is tag
*/
public bool is_tag ()
{
return this == EVT.TAG;
}
/**
* @return event is key
*/