#! /usr/bin/perl

use strict;

my $txt;
my $i = 0;
my $barwidth = 25;

my @data = <DATA>;
&gen( $_, @data ) for 1..2;

open( my $fh, ">", "xipergrid2.grid" ) || die;
print $fh "; grid: xipergrid2\n; generated: " . localtime() . "\n\n[Groups]\nNumberOfGroups = $i\n\n";
print $fh $txt;


sub gen
{
  my( $m, @lines ) = @_;
  
  foreach my $line ( @lines )
  {
    chomp( $line );
    if( $line =~ m{^\s*$} || $line =~ m{^\s*#} ) { next }
    
    my( $t, $g ) = split( "=", $line );
    my( $t_from, $t_to ) = split( "-", $t );
    $t_to ||= $t_from;
    
    my( $t_from_x, $t_from_y ) = split( ",", $t_from );
    my( $t_to_x, $t_to_y ) = split( ",", $t_to );
    $t_to_x++ if $t_to_x ne '@';
    $t_to_y++ if $t_to_y ne '@';
    
    my( $g_dock ) = substr( $g, 0, 2 );
    $g = substr( $g, 2 );
    my( $g_width, $g_height ) = split( "x", $g );
    $g_width  = { 0=>"/6", 1=>"/3", 2=>"/2", 3=>"/3*2", 4=>"/6*5", 5=>"", 60=>"/10*6", 80=>"/5*4" }->{$g_width};
    $g_height = { 0=>"/6", 1=>"/3", 2=>"/2", 3=>"/3*2", 4=>"/6*5", 5=>"", 60=>"/10*6", 80=>"/5*4" }->{$g_height};
    
    print "trigger: from ($t_from_x,$t_from_y), to ($t_to_x,$t_to_y)\n";
    print "grid: dock $g_dock, width $g_width, height $g_height\n";
    print "\n";
    
    $i++;
    $txt .= "[$i]\n";
    #$txt .= "; $line\n";
    
    if( $t_from_y eq '@' ) { $txt .= "TriggerTop    = [Monitor${m}Top]+([Monitor${m}Height]/2)-$barwidth\n" }
    else                   { $txt .= "TriggerTop    = [Monitor${m}Top]+([Monitor${m}Height]/14*$t_from_y)\n" }
    if( $t_to_y   eq '@' ) { $txt .= "TriggerBottom = [Monitor${m}Top]+([Monitor${m}Height]/2)+$barwidth\n" }
    else                   { $txt .= "TriggerBottom = [Monitor${m}Top]+([Monitor${m}Height]/14*$t_to_y)\n" }
    if( $t_from_x eq '@' ) { $txt .= "TriggerLeft   = [Monitor${m}Left]+([Monitor${m}Width]/2)-$barwidth\n" }
    else                   { $txt .= "TriggerLeft   = [Monitor${m}Left]+([Monitor${m}Width]/14*$t_from_x)\n" }
    if( $t_to_x   eq '@' ) { $txt .= "TriggerRight  = [Monitor${m}Left]+([Monitor${m}Width]/2)+$barwidth\n" }
    else                   { $txt .= "TriggerRight  = [Monitor${m}Left]+([Monitor${m}Width]/14*$t_to_x)\n" }
    
    if   ( $g_dock =~ m{[clr]c} ) { $txt .= "GridTop       = [Monitor${m}Top]+([Monitor${m}Height]/2)-(([Monitor${m}Height]$g_height)/2)\n" }
    elsif( $g_dock =~ m{t}      ) { $txt .= "GridTop       = [Monitor${m}Top]\n" }
    elsif( $g_dock =~ m{b}      ) { $txt .= "GridTop       = [Monitor${m}Bottom]-([Monitor${m}Height]$g_height)\n" }
    if   ( $g_dock =~ m{[clr]c} ) { $txt .= "GridBottom    = [Monitor${m}Top]+([Monitor${m}Height]/2)+(([Monitor${m}Height]$g_height)/2)\n" }
    elsif( $g_dock =~ m{t}      ) { $txt .= "GridBottom    = [Monitor${m}Top]+([Monitor${m}Height]$g_height)\n" }
    elsif( $g_dock =~ m{b}      ) { $txt .= "GridBottom    = [Monitor${m}Bottom]\n" }
    if   ( $g_dock =~ m{[ctb]c} ) { $txt .= "GridLeft      = [Monitor${m}Left]+([Monitor${m}Width]/2)-(([Monitor${m}Width]$g_width)/2)\n" }
    elsif( $g_dock =~ m{l}      ) { $txt .= "GridLeft      = [Monitor${m}Left]\n" }
    elsif( $g_dock =~ m{r}      ) { $txt .= "GridLeft      = [Monitor${m}Right]-([Monitor${m}Width]$g_width)\n" }
    if   ( $g_dock =~ m{[ctb]c} ) { $txt .= "GridRight     = [Monitor${m}Left]+([Monitor${m}Width]/2)+(([Monitor${m}Width]$g_width)/2)\n" }
    elsif( $g_dock =~ m{l}      ) { $txt .= "GridRight     = [Monitor${m}Left]+([Monitor${m}Width]$g_width)\n" }
    elsif( $g_dock =~ m{r}      ) { $txt .= "GridRight     = [Monitor${m}Right]\n" }
    
    $txt .= "\n";
    
  }  # end foreach line
}  # end gen()


__DATA__

# syntax: trigger=grid
# trigger: from_x,from_y[-to_x,to_y]
#          x is 0-13, y is 0-13, @ is centered
# grid: dock,widthxheight
# dock: t=top,b=bottom,l=left,r=right,c=center
#       tl, tr, br, bl   tc, rc, bc, lc    cc
# width/height:
#   0 = 15%
#   1 = 1/3 screen
#   2 = 1/2 screen
#   3 = 2/3 screen
#   4 = 85%
#   5 = 1/1 screen
#   9 = 4/5 screen


# top center
@,0=tc1x0
@,1=tc1x1
@,2=tc1x2
@,3=tc1x3
@,4=tc1x4
@,4-@,5.5=tc1x5

# bottom center
@,13=bc1x0
@,12=bc1x1
@,11=bc1x2
@,10=bc1x3
@,9=bc1x4
@,7.5-@,9=bc1x5

# left center
0,@=lc0x1
1,@=lc1x1
2,@=lc2x1
3,@=lc3x1
4,@=lc4x1
4,@-5.5,@=lc5x1

# right center
13,@=rc0x1
12,@=rc1x1
11,@=rc2x1
10,@=rc3x1
9,@=rc4x1
7.5,@-9,@=rc5x1

# top left
0,0=tl0x0
1,0=tl1x0
2,0=tl2x0
3,0=tl3x0
4,0=tl4x0
0,1=tl0x1
1,1=tl1x1
2,1=tl2x1
3,1=tl3x1
4,1=tl4x1
0,2=tl0x2
1,2=tl1x2
2,2=tl2x2
3,2=tl3x2
4,2=tl4x2
0,3=tl0x3
1,3=tl1x3
2,3=tl2x3
3,3=tl3x3
4,3=tl4x3
0,4=tl0x4
1,4=tl1x4
2,4=tl2x4
3,4=tl3x4
4,4=tl4x4

# top
5,0-8,0=tl5x0
5,1-8,1=tl5x1
5,2-8,2=tl5x2
5,3-8,3=tl5x3
5,4-8,4=tl5x4

# top right
13,0=tr0x0
12,0=tr1x0
11,0=tr2x0
10,0=tr3x0
9,0=tr4x0
13,1=tr0x1
12,1=tr1x1
11,1=tr2x1
10,1=tr3x1
9,1=tr4x1
13,2=tr0x2
12,2=tr1x2
11,2=tr2x2
10,2=tr3x2
9,2=tr4x2
13,3=tr0x3
12,3=tr1x3
11,3=tr2x3
10,3=tr3x3
9,3=tr4x3
13,4=tr0x4
12,4=tr1x4
11,4=tr2x4
10,4=tr3x4
9,4=tr4x4

# right
13,5-13,8=tr0x5
12,5-12,8=tr1x5
11,5-11,8=tr2x5
10,5-10,8=tr3x5
9,5-9,8=tr4x5

# bottom right
13,13=br0x0
12,13=br1x0
11,13=br2x0
10,13=br3x0
9,13=br4x0
13,12=br0x1
12,12=br1x1
11,12=br2x1
10,12=br3x1
9,12=br4x1
13,11=br0x2
12,11=br1x2
11,11=br2x2
10,11=br3x2
9,11=br4x2
13,10=br0x3
12,10=br1x3
11,10=br2x3
10,10=br3x3
9,10=br4x3
13,9=br0x4
12,9=br1x4
11,9=br2x4
10,9=br3x4
9,9=br4x4

# bottom
5,13-8,13=br5x0
5,12-8,12=br5x1
5,11-8,11=br5x2
5,10-8,10=br5x3
5,9-8,9=br5x4

# bottom left
0,13=bl0x0
1,13=bl1x0
2,13=bl2x0
3,13=bl3x0
4,13=bl4x0
0,12=bl0x1
1,12=bl1x1
2,12=bl2x1
3,12=bl3x1
4,12=bl4x1
0,11=bl0x2
1,11=bl1x2
2,11=bl2x2
3,11=bl3x2
4,11=bl4x2
0,10=bl0x3
1,10=bl1x3
2,10=bl2x3
3,10=bl3x3
4,10=bl4x3
0,9=bl0x4
1,9=bl1x4
2,9=bl2x4
3,9=bl3x4
4,9=bl4x4

# left
0,5-0,8=bl0x5
1,5-1,8=bl1x5
2,5-2,8=bl2x5
3,5-3,8=bl3x5
4,5-4,8=bl4x5

# center
6.5,6.5-6.5,6.5=cc1x1
6,6-7,7=cc60x3
5.5,5.5-7.5,7.5=cc3x80
5,5-8,8=cc80x4
