initial commit
This commit is contained in:
commit
34dc6053c2
13
build.sh
Executable file
13
build.sh
Executable file
|
@ -0,0 +1,13 @@
|
|||
valac -v \
|
||||
--pkg gee-0.8 \
|
||||
--pkg gio-2.0 \
|
||||
--pkg pluie-echo-0.2 \
|
||||
--pkg pluie-yaml-0.5 \
|
||||
src/Pluie/Berel.Meta.vala \
|
||||
src/Pluie/Berel.HeaderDef.vala \
|
||||
src/Pluie/Berel.Sepline.vala \
|
||||
src/Pluie/Berel.Comment.vala \
|
||||
src/Pluie/Berel.Extension.vala \
|
||||
src/Pluie/Berel.Key.vala \
|
||||
src/Pluie/Berel.Keys.vala \
|
||||
main.vala -o main
|
36
main.vala
Normal file
36
main.vala
Normal file
|
@ -0,0 +1,36 @@
|
|||
using GLib;
|
||||
using Gee;
|
||||
using Pluie;
|
||||
|
||||
int main (string[] args)
|
||||
{
|
||||
Echo.init(false);
|
||||
|
||||
var path = "./resources/berel.yml";
|
||||
of.echo (path);
|
||||
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 ();
|
||||
if ((done = root != null)) {
|
||||
root.display_childs ();
|
||||
var berel = (Berel.Meta) Yaml.Builder.from_node (root.first ());
|
||||
of.echo("software : %s %s".printf (berel.keys.software.name, berel.keys.software.address));
|
||||
of.echo("version : %s".printf (berel.keys.version));
|
||||
of.echo("type : %s".printf (berel.keys.ltype));
|
||||
of.echo("date : %s".printf (berel.keys.date));
|
||||
of.echo("license : %s %s".printf (berel.keys.license.name, berel.keys.license.address));
|
||||
of.echo("author : %s %s".printf (berel.keys.author.name, berel.keys.author.address));
|
||||
of.echo("copyright : %s %s".printf (berel.keys.copyright.name, berel.keys.copyright.address));
|
||||
print (berel.tpl);
|
||||
of.echo ();
|
||||
print(berel.get_template ("vala"));
|
||||
}
|
||||
of.rs (done);
|
||||
of.echo ();
|
||||
return (int) done;
|
||||
|
||||
}
|
||||
|
87
resources/berel.yml
Normal file
87
resources/berel.yml
Normal file
|
@ -0,0 +1,87 @@
|
|||
%YAML 1.2
|
||||
%TAG !v! tag:pluie.org,2018:vala/
|
||||
---
|
||||
!v!Pluie.Berel.Meta meta :
|
||||
!v!Pluie.Berel.Keys keys :
|
||||
software :
|
||||
name : pluie-yaml
|
||||
address : <https://git.pluie.org/pluie/lib-yaml>
|
||||
version : 0.53
|
||||
ltype : library
|
||||
date : 2018
|
||||
license :
|
||||
name : GPLv3.0
|
||||
address : <http://www.gnu.org/licenses/>
|
||||
author :
|
||||
name : a-Sansara
|
||||
address : <[dev]at[pluie]dot[org]>
|
||||
copyright :
|
||||
name : pluie.org
|
||||
address : <http://www.pluie.org>
|
||||
!v!Gee.ArrayList headers :
|
||||
- !v!Pluie.Berel.HeaderDef sh :
|
||||
file :
|
||||
- build.sh
|
||||
startline : 2
|
||||
!v!Pluie.Berel.Sepline sepline :
|
||||
motif : "# "
|
||||
repeat : 40
|
||||
extension :
|
||||
- .sh
|
||||
!v!Pluie.Berel.Comment comment :
|
||||
start : "#^#"
|
||||
end : "#^#"
|
||||
begin : "# "
|
||||
- !v!Pluie.Berel.HeaderDef meson :
|
||||
file :
|
||||
- meson.sh
|
||||
startline : 1
|
||||
!v!Pluie.Berel.Sepline sepline :
|
||||
motif : "# "
|
||||
repeat : 40
|
||||
extension :
|
||||
- .build
|
||||
!v!Pluie.Berel.Comment comment :
|
||||
start : "#^#"
|
||||
end : "#^#"
|
||||
begin : "# "
|
||||
- !v!Pluie.Berel.HeaderDef vala :
|
||||
dir :
|
||||
- src
|
||||
- samples
|
||||
file :
|
||||
- install.vala.in
|
||||
extension :
|
||||
- .vala
|
||||
- .c
|
||||
startline : 1
|
||||
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^
|
44
src/Pluie/Berel.Comment.vala
Normal file
44
src/Pluie/Berel.Comment.vala
Normal file
|
@ -0,0 +1,44 @@
|
|||
using GLib;
|
||||
using Pluie;
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public class Pluie.Berel.Comment : Yaml.Object
|
||||
{
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public string start { get; set; }
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public string end { get; set; }
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public string begin { get; set; }
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public bool match_start (string data)
|
||||
{
|
||||
return data.index_of (this.start) == 0;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public bool match_end (string data)
|
||||
{
|
||||
return data.last_index_of (this.end) == data.length - begin.length;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public string get_line (string data)
|
||||
{
|
||||
return "%s%s".printf (this.begin, data);
|
||||
}
|
||||
}
|
7
src/Pluie/Berel.Extension.vala
Normal file
7
src/Pluie/Berel.Extension.vala
Normal file
|
@ -0,0 +1,7 @@
|
|||
using GLib;
|
||||
using Pluie;
|
||||
|
||||
public class Pluie.Berel.Extension : Yaml.Object
|
||||
{
|
||||
public Gee.ArrayList<string> list { get; set; }
|
||||
}
|
58
src/Pluie/Berel.HeaderDef.vala
Normal file
58
src/Pluie/Berel.HeaderDef.vala
Normal file
|
@ -0,0 +1,58 @@
|
|||
using GLib;
|
||||
using Pluie;
|
||||
|
||||
public class Pluie.Berel.HeaderDef : Yaml.Object
|
||||
{
|
||||
public Gee.ArrayList<string> file { get; set; }
|
||||
public Gee.ArrayList<string> dir { get; set; }
|
||||
public int startline { get; set; }
|
||||
public Berel.Sepline sepline { get; set; }
|
||||
public Gee.ArrayList<string> extension { get; set; }
|
||||
public Berel.Comment comment { get; set; }
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
static construct
|
||||
{
|
||||
Yaml.Register.add_type (
|
||||
typeof (Berel.HeaderDef),
|
||||
typeof (Gee.ArrayList)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
protected override void yaml_construct ()
|
||||
{
|
||||
this.file = new Gee.ArrayList<string> ();
|
||||
this.extension = new Gee.ArrayList<string> ();
|
||||
this.dir = new Gee.ArrayList<string> ();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public override void populate_from_node (string name, GLib.Type type, Yaml.Node node) {
|
||||
if (type == typeof (Gee.ArrayList)) {
|
||||
foreach (var child in node) {
|
||||
switch (name) {
|
||||
case "extension":
|
||||
this.extension.add(child.data);
|
||||
break;
|
||||
case "file":
|
||||
this.file.add(child.data);
|
||||
break;
|
||||
case "dir":
|
||||
this.dir.add(child.data);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
var obj = Yaml.Builder.from_node(node, type);
|
||||
this.set (node.name, obj);
|
||||
}
|
||||
}
|
||||
}
|
8
src/Pluie/Berel.Key.vala
Normal file
8
src/Pluie/Berel.Key.vala
Normal file
|
@ -0,0 +1,8 @@
|
|||
using GLib;
|
||||
using Pluie;
|
||||
|
||||
public class Pluie.Berel.Key : Yaml.Object
|
||||
{
|
||||
public string name { get; internal set; }
|
||||
public string address { get; internal set; }
|
||||
}
|
84
src/Pluie/Berel.Keys.vala
Normal file
84
src/Pluie/Berel.Keys.vala
Normal file
|
@ -0,0 +1,84 @@
|
|||
using GLib;
|
||||
using Pluie;
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public class Pluie.Berel.Keys : Yaml.Object
|
||||
{
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public Berel.Key software { get; internal set; }
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public string version { get; internal set; }
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public string ltype { get; internal set; }
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public string date { get; internal set; }
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public Berel.Key license { get; internal set; }
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public Berel.Key author { get; internal set; }
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public Berel.Key copyright { get; internal set; }
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public string get_all (HeaderDef hd)
|
||||
{
|
||||
var properties = this.get_class ().list_properties;
|
||||
Berel.Key? ck = null;
|
||||
string? cs = null;
|
||||
foreach (var p in properties) {
|
||||
if (p.value_type.is_a(typeof (Berel.Key))) {
|
||||
|
||||
}
|
||||
}
|
||||
foreach
|
||||
var str = """@software : %15s %s
|
||||
@version : %s %s
|
||||
@type : %s
|
||||
@date : %s
|
||||
".printf (
|
||||
""";
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public string replace_var (string varname)
|
||||
{
|
||||
string val = "";
|
||||
var list = varname.split(".", 2);
|
||||
if (list.length == 1) {
|
||||
if (this.get_class ().find_property (varname) != null) {
|
||||
this.get(varname, out val);
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
Berel.Key? k = null;
|
||||
this.get(list[0], out k);
|
||||
if (k != null) {
|
||||
if (k.get_class ().find_property (list[1]) != null) {
|
||||
k.get(list[1], out val);
|
||||
}
|
||||
}
|
||||
}
|
||||
return val;
|
||||
}
|
||||
}
|
147
src/Pluie/Berel.Meta.vala
Normal file
147
src/Pluie/Berel.Meta.vala
Normal file
|
@ -0,0 +1,147 @@
|
|||
using GLib;
|
||||
using Pluie;
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public class Pluie.Berel.Meta : Yaml.Object
|
||||
{
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public Berel.Keys keys { get; internal set; }
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public Gee.ArrayList<Berel.HeaderDef> headers { get; internal set; }
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public string tpl { get; internal set; }
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private Gee.HashMap<string, string> varlist { get; internal set; }
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
static construct
|
||||
{
|
||||
Yaml.Register.add_type (
|
||||
typeof (Berel.Meta),
|
||||
typeof (Gee.ArrayList)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
protected override void yaml_construct ()
|
||||
{
|
||||
this.headers = new Gee.ArrayList<Berel.HeaderDef> ();
|
||||
this.varlist = new Gee.HashMap<string, string> ();
|
||||
Yaml.Register.add_namespace("Gee", "Pluie.Berel");
|
||||
Dbg.msg ("%s (%s) instantiated".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 (Gee.ArrayList)) {
|
||||
foreach (var child in node) {
|
||||
switch (name) {
|
||||
case "headers":
|
||||
this.headers.add((Berel.HeaderDef) Yaml.Builder.from_node (child, typeof (Berel.HeaderDef)));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
var obj = Yaml.Builder.from_node(node, type);
|
||||
if (name == "keys") {
|
||||
this.set (node.name, (Berel.Keys ) obj);
|
||||
}
|
||||
else {
|
||||
this.set (node.name, obj);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public string get_template (string type)
|
||||
{
|
||||
var headerdef = this.get_header_by_type (type);
|
||||
var count = 1;
|
||||
this.tpl_replace_var (headerdef);
|
||||
StringBuilder sb = new StringBuilder ("");
|
||||
foreach (string line in this.tpl.split ("\\n")) {
|
||||
if (count == 1) {
|
||||
//~ sb.append (this.comment.start
|
||||
}
|
||||
count++;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public void tpl_replace_var (HeaderDef hd)
|
||||
{
|
||||
MatchInfo? mi = null;
|
||||
Regex reg = new Regex ("\\^([^\\^]+)\\^");
|
||||
if (reg.match (this.tpl, 0, out mi)) {
|
||||
this.replacing (mi.fetch (1), hd);
|
||||
while (mi.next ()) {;
|
||||
this.replacing (mi.fetch (1), hd);
|
||||
}
|
||||
}
|
||||
foreach (var entry in this.varlist.entries) {
|
||||
if (entry.value.length > 0) {
|
||||
this.tpl = this.tpl.replace("^%s^".printf (entry.key), entry.value);
|
||||
}
|
||||
}
|
||||
var s = this.tpl.split("\\n");
|
||||
foreach (unowned string str in s) {
|
||||
print ("%s\n", hd.comment.get_line(str));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private void replacing (string key, HeaderDef hd)
|
||||
{
|
||||
if (!this.varlist.has_key (key)) {
|
||||
switch (key) {
|
||||
case "sepline" :
|
||||
this.varlist.set (key, hd.sepline.to_string ());
|
||||
break;
|
||||
case "keys" :
|
||||
this.varlist.set (key, this.keys.get_all (hd));
|
||||
break;
|
||||
default :
|
||||
this.varlist.set (key, this.keys.replace_var(key));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public Berel.HeaderDef? get_header_by_type (string type)
|
||||
{
|
||||
Berel.HeaderDef? hd = null;
|
||||
foreach (var def in this.headers) {
|
||||
if (def.yaml_name == type) {
|
||||
hd = def;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return hd;
|
||||
}
|
||||
}
|
34
src/Pluie/Berel.Sepline.vala
Normal file
34
src/Pluie/Berel.Sepline.vala
Normal file
|
@ -0,0 +1,34 @@
|
|||
using GLib;
|
||||
using Pluie;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public class Pluie.Berel.Sepline : Yaml.Object
|
||||
{
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public string motif { get; set; }
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public int repeat { get; set; }
|
||||
/**
|
||||
*
|
||||
*/
|
||||
string? data { internal get; internal set; }
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public string to_string ()
|
||||
{
|
||||
if (this.data == null) {
|
||||
StringBuilder sb = new StringBuilder("");
|
||||
for (var i = 0; i < this.repeat; i++) sb.append (this.motif);
|
||||
data = sb.str;
|
||||
}
|
||||
return this.data;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user