ENML is an human readable parsing language which is very similar to INI files. It separates its values into global entity scopes called enml-entities.
ENML objects are very useful for saving specific game data, such as high scores, user data, preferences, and more. It was designed to be very easy and fast to write and to read, by humans or non-humans.
As it may work directly with strings, the programmer may implement his own cryptography algorithm to protect data.
The syntax:
[sample.enml]
// my first entity theWall { // each attribute's value ends with a ';' character. artist = Pink Floyd; // use '\;' to write ';' characters into the attribute formation = David Gilmour\; Nick Mason\; Roger Waters\; Bob Klose; year = 1979; } // my second entity myCar { name = Beetle; year = 1978; cc = 1500; Manufacturer = Volkswagen; // it also supports multi-line values: sucessorList = Volkswagen Golf Volkswagen Jetta (Sedan) Volkswagen New Beetle Volkswagen Gol (in Brazil); // don't forget to finish with ';' } numbers { pi = 3.1415; posX = 1.5; myInteger = 13; }
Loading an ENML file and retrieving data:
const string str = GetStringFromFile(GetResourceDirectory() + "sample.enml"); enmlFile f; f.parseString(str); string name = f.get("myCar", "name"); string artist = f.get("theWall", "artist"); double myPi; f.getDouble("numbers", "pi", myPi); float posX; f.getFloat("numbers", "posX", posX); uint myInteger; f.getUInt("numbers", "myInteger", myInteger);
Writing an ENML file:
enmlFile f; enmlEntity entity; entity.add("class", "rogue"); entity.add("level", "85"); entity.add("name", "Nathan"); f.addEntity("partyMember0", entity); entity.clear(); entity.add("class", "paladin"); entity.add("level", "71"); entity.add("name", "John"); f.addEntity("partyMember1", entity); string str = f.generateString(); SaveStringToFile(GetExternalStorageDirectory() + "myFile.txt", str);
The example above will output:
[myFile.txt]
partyMember0 { class = rogue; level = 85; name = Nathan; } partyMember1 { class = paladin; level = 71; name = John; }
Heads up!
Things it cannot do:
Remarks: