a small update for parser: it is now possible to parse so-called "scripts" (only from 'string' type for now). sample script can look like this one, which centers two buttons inside the panel, keepeng equal button sizes:

===[cutline]===
var(stay)
  panel.left = 0,
  panel.top = 0,
  panel.width = 80,
  panel.height = 20;


// this is just a simple constants,
// use 'define' to avoid introducing new vars
define
  button.hpadding = 4,
  button.defheight = 10+6; // simple math


var
  bt0.left, // default is 0
  bt0.top,
  <stay> bt0.width = 30,
  <stay> bt0.height = button.defheight;
    // oh, yeah, this will be calculated in-place


var
  bt1.left,
  bt1.top,
  bt1.width,
  bt1.height;


// some useful macros
define
  panel.right = (panel.left+panel.width),
  panel.bottom = (panel.top+panel.height),

  bt0.right = (bt0.left+bt0.width),
  bt0.bottom = (bt0.top+bt0.height),

  bt1.right = (bt1.left+bt1.width),
  bt1.bottom = (bt1.top+bt1.height);


// button-button placement and sizes
// default strength is <required>
bt1.left >= bt0.right+button.hpadding; // buttons padding
bt1.height == bt0.height; // same height
bt1.width == bt0.width; // same width
bt1.top == bt0.top; // same vertical position


// button-panel placement (this should center buttons)
// horizontal
bt0.left-panel.left == panel.right-bt1.right;
// vertical
bt0.top-panel.top == panel.bottom-bt0.bottom;


// print values (for debug mode)
print panel.left;
print panel.top;
print panel.width;
print panel.height;

print bt0.left;
print bt0.top;
print bt0.width;
print bt0.height;

print bt1.left;
print bt1.top;
print bt1.width;
print bt1.height;
===[cutline]===

there is no support for any kind of 'autobinding' variables to class/struct properties yet, and parser code is awful. but the whole thing is slowly growing…

anyway, it's really fun to play with various layout scripts. try it yourself!

Reply via email to