package Image::DS9::Grammar;
use strict;
use warnings;
use Image::DS9::PConsts;
use constant REGIONFORMAT => ENUM( qw( ds9 ciao saotng saoimage pros xy ) );
# TODO:
# about?
# analysis
# shm
our %Grammar =
(
#------------------------------------------------------
array =>
[
[
[],
{ args => [ PDL ],
attrs => [ new => BOOL ],
query => QNONE,
bufarg => 1
},
{ args => [ SCALARREF ],
attrs => [ new => BOOL,
bitpix => INT,
skip => INT,
-o => [ ( -a => [ xdim => INT, ydim => INT ] ),
( dim => INT ) ],
],
query => QNONE,
bufarg => 1
}
],
],
#------------------------------------------------------
bin =>
[
[
['about'],
{ args => [ FLOAT, FLOAT ] }
],
[
['buffersize'],
{ args => [ INT ] }
],
# cols can take 2 or three arguments. the current interface
# doesn't handle this elegantly, so try 3 args first. it'll
# always be the one to be queried, so have it return an indeterminate
# length array (which isn't length checked yet anyway)
[
['cols'],
{ args => [ STRING, STRING, STRING ],
rvals => [ ARRAY ]
},
{ args => [ STRING, STRING ] }
],
[
['factor'],
{ args => [ FLOAT, FLOAT ], rvals => [ ARRAY ] },
{ args => [ FLOAT ], rvals => [ ARRAY ] }
],
[
['depth'],
{ args => [ INT ] }
],
[
['filter'],
{ args => [ STRING_STRIP ] }
],
[
['function'],
{ args => [ ENUM( 'average', 'sum' ) ] }
],
[
[ REWRITE('tofit', 'to fit') ],
{ query => QNONE }
],
[
[ 'to fit' ],
{ query => QNONE }
],
[
[ 'smooth', 'function' ],
{ args => [ ENUM( 'boxcar', 'tophat', 'gaussian' ) ] }
],
[
[ 'smooth', 'radius' ],
{ args => [ FLOAT ] }
],
[
[ 'smooth' ],
{ args => [ BOOL ] }
],
],
#------------------------------------------------------
blink =>
[
[
[ EPHEMERAL('state') ],
{ rvals => [ BOOL ], query => QONLY },
],
[
[],
{ query => QNONE },
]
],
#------------------------------------------------------
cd =>
[
[
[],
{ args => [STRING] }
]
],
#------------------------------------------------------
cmap =>
[
[
['file'],
{ args => [ STRING ] }
],
[
['invert'],
{ args => [ BOOL ] }
],
[
['value'],
{ args => [ FLOAT, FLOAT ] }
],
[
[],
{ args => [ STRING ] }
],
],
#------------------------------------------------------
contour =>
[
[
['copy'],
{ query => QNONE }
],
[
['paste'],
{ args => [ COORDSYS, SKYFRAME, COLOR, FLOAT ], query => QNONE },
{ args => [ COORDSYS, COLOR, FLOAT ], query => QNONE }
],
[
['save'],
{ args => [ STRING, COORDSYS ], query => QNONE },
{ args => [ STRING, COORDSYS, SKYFRAME ], query => QNONE }
],
[
['load'],
{ args => [ STRING, COORDSYS, COLOR, FLOAT ], query => QNONE },
{ args => [ STRING, COORDSYS, SKYFRAME, COLOR, FLOAT ], query => QNONE }
],
[
[],
{ args => [ BOOL ] }
],
],
#------------------------------------------------------
crosshair =>
[
[
[],
{ rvals => [STRING, STRING] },
{ args => [ COORDSYS ],
query => QARGS|QYES,
rvals => [STRING,STRING] },
{ args => [ COORDSYS, SKYFORMAT ],
query => QARGS|QYES,
rvals => [STRING, STRING] },
{ args => [ COORDSYS, SKYFRAME ],
query => QARGS|QYES,
rvals => [STRING, STRING] },
{ args => [ COORDSYS, SKYFRAME, SKYFORMAT ],
query => QARGS|QYES,
rvals => [STRING, STRING] },
{ args => [ COORD_RA, COORD_DEC, COORDSYS ],
query => QNONE,
},
{ args => [ COORD_RA, COORD_DEC, COORDSYS, SKYFRAME ],
query => QNONE,
}
],
],
#------------------------------------------------------
cursor =>
[
[
[],
{ args => [ FLOAT, FLOAT ], query => QNONE }
]
],
#------------------------------------------------------
dsssao =>
[
[
['name'],
{ args => [ STRING ] }
],
[
['coord'],
{ args => [ COORD_RA, COORD_DEC ] }
],
[
['size'],
{ args => [ FLOAT, FLOAT ] }
],
],
#------------------------------------------------------
dsseso =>
[
[
['name'],
{ args => [ STRING ] }
],
[
['coord'],
{ args => [ COORD_RA, COORD_DEC ] }
],
[
['survey'],
{ args => [ ENUM( 'dss', 'dss2-red', 'dss2-blue', 'dss2-infrared' ) ] }
],
[
['size'],
{ args => [ FLOAT, FLOAT ] }
],
],
#------------------------------------------------------
dssstsci =>
[
[
['name'],
{ args => [ STRING ] }
],
[
['coord'],
{ args => [ COORD_RA, COORD_DEC ] }
],
[
['size'],
{ args => [ FLOAT, FLOAT ] }
],
[
['survey'],
{ args => [ ENUM( qw{ poss2ukstu_red
poss2ukstu_ir
poss2ukstu_blue
poss1_blue
poss1_red
all
quickv
phase2_gsc2
phase2_gsc1
}
)
]
}
],
],
#------------------------------------------------------
exit =>
[
[
[],
{ query => QNONE }
],
],
#------------------------------------------------------
file =>
[
[
[ENUM('fits', 'mosaic', 'mosaicimage')],
{ args => [ STRING ],
attrs => [ new => BOOL ],
query => QNONE
}
],
[
['array'],
{ args => [ STRING ],
attrs => [ new => BOOL,
bitpix => INT,
skip => INT,
-o => [ [ -a => [ xdim => FLOAT, ydim => FLOAT ] ],
[ dim => FLOAT ] ],
],
query => QNONE,
}
],
[
['url'],
{ args => [ STRING ],
attrs => [ new => BOOL ],
query => QNONE,
}
],
[
['save'],
{ args => [ STRING ],
query => QNONE,
}
],
[
['save', 'gz'],
{ args => [ STRING ],
query => QNONE,
}
],
[
['save', 'resample'],
{ args => [ STRING ],
query => QNONE,
}
],
[
['save', 'resample', 'gz'],
{ args => [ STRING ],
query => QNONE,
}
],
[
[],
{ args => [ STRING ],
attrs => [ new => BOOL,
extname => STRING,
filter => STRING_STRIP,
bin => ARRAY(1,2),
],
}
],
],
#------------------------------------------------------
fits =>
[
[
['mosaic'],
{ args => [ SCALARREF ],
attrs => [ new => BOOL,
extname => STRING,
filter => STRING_STRIP,
bin => ARRAY(1,2),
],
query => QNONE,
bufarg => 1,
cvt => 0,
retref => 1,
chomp => 0,
}
],
[
['mosaicimage'],
{ args => [ SCALARREF ],
attrs => [ new => BOOL,
extname => STRING,
filter => STRING_STRIP,
bin => ARRAY(1,2),
],
query => QNONE,
bufarg => 1,
cvt => 0,
retref => 1,
chomp => 0,
}
],
[
['type'],
{ query => QONLY }
],
[
['image', 'gz'],
{ query => QONLY,
cvt => 0,
rvals => [STRING],
retref => 1,
chomp => 0,
}
],
[
['image'],
{ query => QONLY,
cvt => 0,
rvals => [STRING],
retref => 1,
chomp => 0,
}
],
[
['resample', 'gz'],
{ query => QONLY,
cvt => 0,
rvals => [STRING],
retref => 1,
chomp => 0,
}
],
[
['resample'],
{ query => QONLY,
cvt => 0,
rvals => [STRING],
retref => 1,
chomp => 0,
}
],
[
[],
{ args => [ SCALARREF ],
attrs => [ new => BOOL,
extname => STRING,
filter => STRING_STRIP,
bin => ARRAY(1,2),
],
query => QYES,
bufarg => 1,
cvt => 0,
retref => 1,
chomp => 0,
}
],
],
#------------------------------------------------------
frame =>
[
[
['all'],
{ query => QONLY, rvals => [ ARRAY ], retref => 1 }
],
[
['first'],
{ query => QNONE }
],
[
['next'],
{ query => QNONE }
],
[
['prev'],
{ query => QNONE }
],
[
['last'],
{ query => QNONE }
],
[
['new', 'rgb'],
{ query => QNONE }
],
[
['new'],
{ query => QNONE }
],
[
['center'],
{ query => QNONE },
{ args => [ INT ], query => QNONE },
{ args => [ ENUM( 'all' ) ], query => QNONE }
],
[
['clear'],
{ query => QNONE },
{ args => [ INT ], query => QNONE },
{ args => [ ENUM( 'all' ) ], query => QNONE }
],
[
['delete'],
{ query => QNONE },
{ args => [ INT ], query => QNONE },
{ args => [ ENUM( 'all' ) ], query => QNONE }
],
[
['reset'],
{ query => QNONE },
{ args => [ INT ], query => QNONE },
{ args => [ ENUM( 'all' ) ], query => QNONE }
],
[
['refresh'],
{ query => QNONE },
{ args => [ INT ], query => QNONE },
{ args => [ ENUM( 'all' ) ], query => QNONE }
],
[
['hide'],
{ query => QNONE },
{ args => [ INT ], query => QNONE },
{ args => [ ENUM( 'all' ) ], query => QNONE }
],
[
['show'],
{ query => QNONE },
{ args => [ INT ], query => QNONE },
{ args => [ ENUM( 'all' ) ], query => QNONE }
],
[
['move'],
{ args => [ ENUM( 'first', 'back', 'forward', 'last' ) ], query => QNONE }
],
[
['frameno'],
{ args => [ INT ] },
],
[
[],
{ args => [ INT ] }
],
],
#------------------------------------------------------
grid =>
[
[
['load'],
{ args => [ STRING ], query => QNONE },
],
[
['save'],
{ args => [ STRING ], query => QNONE },
],
[
[],
{ args => [ BOOL ] }
],
],
#------------------------------------------------------
height =>
[
[
[],
{ args => [INT] }
]
],
#------------------------------------------------------
iconify =>
[
[
[],
{ args => [ BOOL ] }
],
],
#------------------------------------------------------
lower =>
[
[
[],
{ query => QNONE }
],
],
#------------------------------------------------------
minmax =>
[
[
['mode'],
{ args => [ ENUM( 'scan', 'sample', 'datamin', 'irafmin' ) ] }
],
[
['interval'],
{ args => [ INT ] }
],
[
[],
{ args => [ ENUM( 'scan', 'sample', 'datamin', 'irafmin' ) ] }
],
],
#------------------------------------------------------
mode =>
[
[
[],
{ args => [ ENUM( 'pointer', 'crosshair', 'colorbar', 'pan',
'zoom', 'rotate', 'examine' ) ],
}
],
],
#------------------------------------------------------
nameserver =>
[
[
['name'],
{ args => [STRING], query => QNONE }
],
[
['server'],
{ args => [ ENUM( 'ned-sao', 'ned-eso', 'simbad-sao', 'simbad-eso' ) ] },
],
[
['skyformat'],
{ args => [ SKYFORMAT ] }
],
[
[],
{ args => [STRING], query => QNONE }
],
],
#------------------------------------------------------
orient =>
[
[
[],
{ args => [ ENUM( 'none', 'x', 'y', 'xy' ) ] },
],
],
#------------------------------------------------------
page =>
[
[
['setup', 'orientation'],
{ args => [ ENUM( 'portrait', 'landscape' ) ], }
],
[
['setup', 'pagescale'],
{ args => [ ENUM( 'scaled', 'fixed' ) ], }
],
[
['setup', 'pagesize'],
{ args => [ ENUM( 'letter', 'legal', 'tabloid', 'poster', 'a4' ) ], }
],
],
#------------------------------------------------------
pan =>
[
[
[ 'to' ],
{ args => [ COORD_RA, COORD_DEC ], query => QNONE },
{ args => [ COORD_RA, COORD_DEC, COORDSYS ], query => QNONE },
{ args => [ COORD_RA, COORD_DEC, COORDSYS, SKYFORMAT ], query => QNONE },
{ args => [ COORD_RA, COORD_DEC, COORDSYS, SKYFRAME ], query => QNONE },
{ args => [ COORD_RA, COORD_DEC, COORDSYS, SKYFRAME, SKYFORMAT ],
query => QNONE },
],
[
[ REWRITE( 'abs', 'to' ) ],
{ args => [ COORD_RA, COORD_DEC ], query => QNONE },
{ args => [ COORD_RA, COORD_DEC, COORDSYS ], query => QNONE },
{ args => [ COORD_RA, COORD_DEC, COORDSYS, SKYFORMAT ], query => QNONE },
{ args => [ COORD_RA, COORD_DEC, COORDSYS, SKYFRAME ], query => QNONE },
{ args => [ COORD_RA, COORD_DEC, COORDSYS, SKYFRAME, SKYFORMAT ],
query => QNONE },
],
[
[ EPHEMERAL( 'rel' ) ],
{ args => [ COORD_RA, COORD_DEC ], query => QNONE },
{ args => [ COORD_RA, COORD_DEC, COORDSYS ], query => QNONE },
{ args => [ COORD_RA, COORD_DEC, COORDSYS, SKYFORMAT ], query => QNONE },
{ args => [ COORD_RA, COORD_DEC, COORDSYS, SKYFRAME ], query => QNONE },
{ args => [ COORD_RA, COORD_DEC, COORDSYS, SKYFRAME, SKYFORMAT ],
query => QNONE },
],
[
[],
{ args => [ COORD_RA, COORD_DEC ], query => QNONE },
{ args => [ COORD_RA, COORD_DEC, COORDSYS ], query => QNONE },
{ args => [ COORD_RA, COORD_DEC, COORDSYS, SKYFORMAT ], query => QNONE },
{ args => [ COORD_RA, COORD_DEC, COORDSYS, SKYFRAME ], query => QNONE },
{ args => [ COORD_RA, COORD_DEC, COORDSYS, SKYFRAME, SKYFORMAT ],
query => QNONE },
{ rvals => [STRING, STRING],
cvt => 0
},
{ args => [ COORDSYS, SKYFORMAT ],
query => QONLY,
rvals => [STRING, STRING],
cvt => 0
},
{ args => [ COORDSYS, SKYFRAME, SKYFORMAT ],
query => QONLY,
rvals => [STRING, STRING],
cvt => 0
},
{ args => [ COORDSYS, SKYFRAME ],
query => QONLY,
rvals => [STRING, STRING],
cvt => 0
},
{ args => [ COORDSYS ],
query => QONLY,
rvals => [STRING, STRING],
cvt => 0
},
],
],
#------------------------------------------------------
pixeltable =>
[
[
[],
{ args => [ BOOL ] },
],
],
#------------------------------------------------------
print =>
[
[
['destination'],
{ args => [ ENUM( 'printer', 'file' ) ] },
],
[
['command'],
{ args => [ STRING ] },
],
[
['filename'],
{ args => [ STRING ] },
],
[
['palette'],
{ args => [ ENUM( 'rgb', 'cmyk', 'gray' ) ] },
],
[
['level'],
{ args => [ ENUM( '1', '2' ) ] },
],
[
['resolution'],
{ args => [ ENUM( qw( 53 72 75 150 300 600 )) ] },
],
[
[],
{ query => QNONE }
],
],
#------------------------------------------------------
quit =>
[
[
[],
{ query => QNONE },
]
],
#------------------------------------------------------
raise =>
[
[
[],
{ query => QNONE },
]
],
#------------------------------------------------------
regions =>
[
[
[ENUM( qw( movefront moveback selectall selectnone deleteall )) ],
{ query => QNONE },
],
[
[ENUM( qw( load save ) )],
{ args => [ STRING ], query => QNONE },
],
[
['format'],
{ args => [ REGIONFORMAT ] },
],
[
['system'],
{ args => [ COORDSYS ] },
],
[
['sky'],
{ args => [ SKYFRAME ] },
],
[
['skyformat'],
{ args => [ SKYFORMAT ] },
],
[
['strip'],
{ args => [ BOOL ] },
],
[
[ENUM(qw(source background include exclude selected)) ],
{ query => QONLY }
],
[
['shape'],
{ args => [STRING] }
],
[
['width'],
{ args => [INT] }
],
[
['color'],
{ args => [ENUM(qw( black white red green blue cyan magenta yellow))] }
],
[
[],
{ args => [STRING_NL],
query => QNONE,
bufarg => 1,
},
{ query => QYES|QONLY|QATTR,
rvals => [ STRING ],
attrs => [
-format => REGIONFORMAT,
-system => COORDSYS,
-sky => SKYFRAME,
-skyformat => SKYFORMAT,
-strip => BOOL,
-prop => ENUM(qw( select edit move rotate delete fixed
include source )),
]
}
],
],
#------------------------------------------------------
rotate =>
[
[
[ 'to' ],
{ args => [FLOAT], query => QNONE },
],
[
[ REWRITE( 'abs', 'to' ) ],
{ args => [FLOAT], query => QNONE },
],
[
[ EPHEMERAL( 'rel' ) ],
{ args => [FLOAT], query => QNONE },
],
[
[],
{ args => [FLOAT] },
],
],
#------------------------------------------------------
saveas =>
[
[
[ENUM( qw( jpeg tiff png ppm ) )],
{ args => [ STRING ], query => QNONE },
]
],
#------------------------------------------------------
scale =>
[
[
['datasec'],
{ args => [ BOOL ] },
],
[
['limits'],
{ args => [ FLOAT, FLOAT ] },
],
[
['mode'],
{ args => [ ENUM( qw( minmax zscale zmax ) ) ] },
{ args => [ FLOAT ] },
],
[
['scope'],
{ args => [ ENUM( qw( local global ) ) ] },
],
[
[],
{ args => [ ENUM( qw( linear log squared sqrt histequ ) ) ] }
],
],
#------------------------------------------------------
single =>
[
[
[ EPHEMERAL('state') ],
{ rvals => [ BOOL ], query => QONLY },
],
[
[],
{ query => QNONE },
]
],
#------------------------------------------------------
source =>
[
[
[],
{ args => [STRING], query => QNONE },
],
],
#------------------------------------------------------
tcl =>
[
[
[],
{ args => [STRING], query => QNONE },
],
],
#------------------------------------------------------
tile =>
[
[
[ 'mode' ],
{ args => [ ENUM('grid', 'column', 'row' ) ] }
],
[
['grid', 'mode'],
{args => [ ENUM('automatic','manual') ] },
],
[
['grid', 'layout'],
{ args => [ INT, INT ] },
],
[
[ 'grid', 'gap' ],
{ args => [ INT ] },
],
[
[ENUM('grid', 'row', 'column')],
{ query => QNONE },
],
[
[ EPHEMERAL('state') ],
{ rvals => [ BOOL ], query => QONLY },
],
[
[],
{ args => [ BOOL ] }
],
],
#------------------------------------------------------
update =>
[
[],
{ attrs => [ now => BOOL ], query => QNONE },
{ args => [ INT, FLOAT, FLOAT, FLOAT, FLOAT ],
attrs => [ now => BOOL ],
query => QNONE }
],
#------------------------------------------------------
version =>
[
[
[],
{ rvals => [STRING],
query => QONLY },
],
],
#------------------------------------------------------
view =>
[
[
[ENUM( qw( info
panner
magnifier
buttons
filename
object
minmax
lowhigh
frame
red
green
blue
) )],
{ args => [ BOOL ] },
],
[
['layout'],
{ args => [ ENUM( 'vertical', 'horizontal' ) ] },
],
[
['colorbar', 'numerics' ],
{ args => [ BOOL ] },
],
[
['colorbar'],
{ args => [ ENUM( 'vertical', 'horizontal' ) ] },
{ args => [ BOOL ] },
],
[
['graph', 'vertical' ],
{ args => [ BOOL ] },
],
[
['graph', 'horizontal' ],
{ args => [ BOOL ] },
],
[
[COORDSYS],
{ args => [ BOOL ] },
]
],
#------------------------------------------------------
vo =>
[
[
[],
{ args => [ STRING ] }
],
],
#------------------------------------------------------
wcs =>
[
[
['system'],
{ args => [ WCSS ] }
],
[
['sky'],
{ args => [ SKYFRAME ] }
],
[
['skyformat'],
{ args => [ SKYFORMAT ] }
],
[
['align'],
{ args => [ BOOL ] }
],
[
['reset'],
{ query => QNONE },
],
[
['replace', 'file' ],
{ args => [ STRING ], query => QNONE },
],
[
['append', 'file' ],
{ args => [ STRING ], query => QNONE },
],
[
[ENUM( 'replace', 'append' )],
{ args => [ WCS_SCALARREF ], query => QNONE, bufarg => 1 },
{ args => [ WCS_HASH ], query => QNONE, bufarg => 1 },
{ args => [ WCS_ARRAY ], query => QNONE, bufarg => 1 },
],
[
[],
{ args => [ WCSS ] },
],
],
#------------------------------------------------------
web =>
[
[
[],
{ args => [STRING] }
]
],
#------------------------------------------------------
width =>
[
[
[],
{ args => [INT] }
]
],
#------------------------------------------------------
zoom =>
[
[
[ 'to' ],
{ args => [FLOAT], query => QNONE },
{ args => ['fit'], query => QNONE },
],
[
[ REWRITE( 'abs' => 'to') ],
{ args => [FLOAT], query => QNONE },
],
[
[ EPHEMERAL('rel') ],
{ args => [FLOAT], query => QNONE },
],
[
[ REWRITE( '0' => 'to fit' ) ],
{ query => QNONE },
],
[
[ REWRITE( tofit => 'to fit' ) ],
{ query => QNONE },
],
[
[],
{ args => [FLOAT] }
],
]
);
1;