wild-doc 0.0.0

You can read and write data using XML and output various structured documents.You can also program using javascript(v8).
Documentation
wild-doc-0.0.0 has been yanked.

semilattice-script

Example

use chrono::TimeZone;
use semilattice_script::*;

let dir="./ss-test/";
if std::path::Path::new(dir).exists(){
    std::fs::remove_dir_all(dir).unwrap();
    std::fs::create_dir_all(dir).unwrap();
}else{
    std::fs::create_dir_all(dir).unwrap();
}
let mut ss=SemilatticeScript::new(
    dir
    ,IncludeLocal::new("./include/")
).unwrap();

//update data.
ss.exec(r#"<ss><ss:session name="hoge">
    <ss:update commit="1">
        <collection name="person">
            <field name="name">Noah</field>
            <field name="country">US</field>
        </collection>
        <collection name="person">
            <field name="name">Liam</field>
            <field name="country">US</field>
        </collection>
        <collection name="person">
            <field name="name">Olivia</field>
            <field name="country">UK</field>
        </collection>
    </ss:update>
</ss:session></ss>"#);

//select data.
let r=ss.exec(r#"<ss>
    <ss:search name="p" collection="person">
    </ss:search>
    <ss:result var="q" search="p">
        <div>
            find <ss:print ss:value="ss.v('q').length" /> persons.
        </div>
        <ul>
            <ss:for var="r" index="i" ss:in="ss.v('q')"><li>
                <ss:print ss:value="ss.v('r').row" /> : <ss:print ss:value="ss.v('r').field('name')" /> : <ss:print ss:value="ss.v('r').field('country')" />
            </li></ss:for>
        </ul>
    </ss:result>
</ss>"#);
println!("{}",r);

//seaech data
let r=ss.exec(r#"<ss>
    <ss:search name="p" collection="person">
        <field name="country" method="match" value="US" />
    </ss:search>
    <ss:result var="q" search="p">
        <div>
            find <ss:print ss:value="ss.v('q').length" /> persons from the US.
        </div>
        <ul>
            <ss:for var="r" index="i" ss:in="ss.v('q')"><li>
                <ss:print ss:value="ss.v('r').row" /> : <ss:print ss:value="ss.v('r').field('name')" /> : <ss:print ss:value="ss.v('r').field('country')" />
            </li></ss:for>
        </ul>
        <ss:include src="'hoge.xml'" />
    </ss:result>
</ss>"#);
println!("{}",r);

//use javascript
let r=ss.exec(r#"<ss>
    <ss:script>
        const ymd=function(){
            const now=new Date();
            return now.getFullYear()+"-"+(now.getMonth()+1)+"-"+now.getDate();
        };
        const uk="UK";
    </ss:script>
    <ss:search name="p" collection="person">
        <field name="country" method="match" ss:value="uk" />
    </ss:search>
    <ss:result var="q" search="p">
        <div>
            <ss:print ss:value="ymd()" />
        </div>
        <div>
            find <ss:print ss:value="ss.v('q').length" /> persons from the <ss:print ss:value="uk" />.
        </div>
        <ul>
            <ss:for var="r" index="i" ss:in="ss.v('q')"><li>
                <ss:print ss:value="ss.v('r').row" /> : <ss:print ss:value="ss.v('r').field('name')" /> : <ss:print ss:value="ss.v('r').field('country')" />
            </li></ss:for>
        </ul>
    </ss:result>
</ss>"#);
println!("{}",r);

//search in update section.
ss.exec(r#"<ss><ss:session name="hoge">
    <ss:update commit="1">
        <ss:search name="person" collection="person"></ss:search>
        <ss:result var="q" search="person">
            <ss:for var="r" index="i" ss:in="ss.v('q')">
                hoge:<ss:print ss:value="ss.v('r').row" />
                <collection name="person" ss:row="ss.v('r').row">
                    <field name="name">Renamed <ss:print ss:value="ss.v('r').field('name')" /></field>
                    <field name="country"><ss:print ss:value="ss.v('r').field('country')" /></field>
                </collection>
            </ss:for>
        </ss:result>
    </ss:update>
</ss:session></ss>"#);
let r=ss.exec(r#"<ss>
    <ss:search name="p" collection="person"></ss:search>
    <ss:result var="q" search="p">
        <div>
            find <ss:print ss:value="ss.v('q').length" /> persons.
        </div>
        <ul>
            <ss:for var="r" index="i" ss:in="ss.v('q')"><li>
                <ss:print ss:value="ss.v('r').row" /> : <ss:print ss:value="ss.v('r').field('name')" /> : <ss:print ss:value="ss.v('r').field('country')" />
            </li></ss:for>
        </ul>
    </ss:result>
</ss>"#);
println!("{}",r);