faml 0.1.5

Minimalist and powerful dynamic markup language
Documentation

faml

version status

English | 简体中文

Faml is a dynamic configuration scripting language that can embed script code in the configuration file to achieve dynamic configuration update.

Manual

rust

Install: Run cargo add faml in the project directory

fn main() {
    let faml_str = r#"
[hello]
value = 12
name = $"hello {value + 12}"
"#;
    let mut eroot = FamlExpr::from_str(faml_str).unwrap();
    eroot["hello"]["value"].set_int(30);
    let root = eroot.evalute().unwrap();
    println!("{}", root["hello"]["name"].as_str()); // hello 42
}

C++

Download and compile static libraries (or dynamic libraries)

git clone git@github.com:fawdlstty/faml.git
cd faml
# Build with C API support
cargo build --release --target x86_64-pc-windows-msvc
cargo build --release --target x86_64-unknown-linux-gnu

The static library (or dynamic library) is generated in the target/release directory. Copy it to the C++ project and reference it

#include <iostream>
#include <string>

#include "faml/faml.hpp"
#ifdef _MSC_VER
#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "ntdll.lib")
#pragma comment(lib, "bcrypt.lib")
#pragma comment(lib, "Userenv.lib")
#pragma comment(lib, "faml.lib")
#endif

int main() {
    auto oexpr = faml::FamlExpr::from_str(R"(
[hello]
value = 12
name = $"hello {value + 12}"
)");
    if (oeroot.index() == 1) {
        std::cout << std::get<std::string>(oeroot) << std::endl;
        return 0;
    }
    auto eroot = std::get<faml::FamlExpr>(oeroot);
    eroot["hello"]["value"].set_int(30);
    auto oroot = eroot.evalute();
    if (oroot.index() == 1) {
        std::cout << std::get<std::string>(oroot) << std::endl;
        return 0;
    }
    auto root = std::get<faml::FamlValue>(oroot);
    std::cout << root["hello"]["name"].as_str() << std::endl; // hello 42
    return 0;
}

C#

Run command:

dotnet add package faml

Example:

using System;

namespace test {
    public class Program {
        public static void Main () {
            string src = """
[hello]
value = 12
name = $"hello {value + 12}"
""";
            var eroot = faml.FamlExpr.from_str (src);
            eroot ["hello"] ["value"].set_int (30);
            var root = eroot.evalute ();
            Console.WriteLine (root ["hello"] ["name"].as_str()); // hello 42
            Console.ReadKey ();
        }
    }
}

Other features

The value is available when the conditions are met:

[hello]

value = 12

@if value == 12
name = $"hello {value}"