Skip to content

Latest commit

 

History

History
120 lines (94 loc) · 3.14 KB

README.rst

File metadata and controls

120 lines (94 loc) · 3.14 KB

Melina can convert meta.xml to meta language (similar to protobuf) and back.

melina --meta-out DIR1 meta.xml  # to meta
melina --xml-out DIR2 meta.meta  # back to xml

melina --meta-stdout meta.xml > x.meta  # or to stdout

This is how melina language looks like:

/// pdmeta: "1.1", domain: "f", product: "b", release: "AX", version: "1.5", revision: "198"

// line above is a header with meta module versions.
// It needs to be the first symbol in file and start with '///'

mo SCALAR
{
    // you can define managed objects like structs in C++

    bool x;
    int y;
    string z;
};

mo COMPLEX
{
    // enum/struct fields contain definition of enum/struct
    // enum/struct name should begin with small letter - after all it's a name of variable

    enum x
    {
        A = 1,
        B,
        C = 2
    };

    struct y
    {
        int z;
        struct v { int w; };
    };
};

mo CARDINALITY
{
    // you can define cardinality of each managed object or struct field

    int x; // required by default
    optional int y; // optional integer, may be null
    repeated int z; // list of integers
    repeated(15) int z; // at most 15 'z' integers
};

mo DEFAULTS
{
    // bool, int, string, enum can have default values

    bool x [default = true];
    int y [default = 12];
    string z [default = "foo bar"];
    enum v [default = 12] { A = 1, B = 12 };
};

mo RANGES
{
    // int/string fields can specify allowed ranges
    // if int has a 3-param specifier, it's considered a "float"

    int(0..12) x;  // allowed integers from 0 to 12 inclusive
    int(-0.5, 0.5, 0.001) y;  // allowed floats from -0.5 to 0.5 inclusive with step 0.001
    string(0..10) z; // allowed string length from 0 to 10 chars inclusive
};

mo UNITS
{
    // integers can have units (for documentational purposes)

    int y [units = "kbps"];
};

/**
 * Example managed object description.
 */
mo COMMENTS
{
    // you can use C++-style '//foo' or '/*foo*/' comments in meta files
    // doxygen-style comments '///foo' and '/**foo*/' are treated as mo/field description,
    // if present immediately above or rightwards of mo/field

    int x;  /// Example scalar field description
    int y;  /** Example scalar field description */

    /**
     * Example complex type description.
     */
    struct z
    {
    };

    /// Example complex type description.
    struct v
    {
    };
};

mo CHILDREN -> FIRST, SECOND, THIRD(10)
{
    // managed object can have children defined
    // children can have max count specified in parens (at most 10 THIRD children)
};

mo(hc) FLAGS
{
    // each managed object has: hidden('h'), create('c'), update('u'), delete('d') flags.
    // If not specified, hidden is assumed false, rest is assumed true.
    // Specification may be provided as 'hcud' letters in parens.
};