summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Joye <wjoye@cfa.harvard.edu>2018-04-06 21:20:41 (GMT)
committerWilliam Joye <wjoye@cfa.harvard.edu>2018-04-06 21:20:41 (GMT)
commitcf03e9e3151dd8897adb5183b7f236e87a2107c8 (patch)
tree407eb4edb93d0d16ef5c611f6fdf3158e2931b74
parent11376f9238353b2c2fc2df9d1c42a622ed93278b (diff)
downloadblt-cf03e9e3151dd8897adb5183b7f236e87a2107c8.zip
blt-cf03e9e3151dd8897adb5183b7f236e87a2107c8.tar.gz
blt-cf03e9e3151dd8897adb5183b7f236e87a2107c8.tar.bz2
add ds9 region parser
-rw-r--r--ds9/library/marker.tcl115
-rw-r--r--ds9/library/source.tcl2
-rw-r--r--ds9/parsers/regionlex.fcl115
-rw-r--r--ds9/parsers/regionparser.tac310
4 files changed, 538 insertions, 4 deletions
diff --git a/ds9/library/marker.tcl b/ds9/library/marker.tcl
index 28d14ca..453a9bc 100644
--- a/ds9/library/marker.tcl
+++ b/ds9/library/marker.tcl
@@ -61,6 +61,13 @@ proc MarkerDef {} {
set marker(skyformat) degrees
set marker(strip) 0
+ # temp
+ set marker(load,format) $marker(format)
+ set marker(load,system) $marker(system)
+ set marker(load,sky) $marker(sky)
+ set marker(load,sock) {}
+ set marker(load,fn) {}
+
array set pmarker [array get marker]
unset pmarker(copy)
unset pmarker(copy,system)
@@ -71,6 +78,12 @@ proc MarkerDef {} {
unset pmarker(skyformat)
unset pmarker(strip)
+ unset pmarker(load,format)
+ unset pmarker(load,system)
+ unset pmarker(load,sky)
+ unset pmarker(load,sock)
+ unset pmarker(load,fn)
+
set pmarker(epsilon) 3
set pmarker(dformat) degrees
set pmarker(circle,radius) 20
@@ -1391,15 +1404,29 @@ proc MarkerBackup {ch which fdir rdir} {
proc ProcessRegionsCmd {varname iname sock fn} {
upvar $varname var
upvar $iname i
-
- global ds9
- global current
global marker
- global pmarker
# we need to be realized
ProcessRealizeDS9
+ global debug
+ if {$debug(tcl,parser)} {
+ set marker(load,sock) $sock
+ set marker(load,fn) $fn
+ set marker(load,format) $marker(format)
+ set marker(load,system) $marker(system)
+ set marker(load,sky) $marker(sky)
+
+ region::YY_FLUSH_BUFFER
+ region::yy_scan_string [lrange $var $i end]
+ region::yyparse
+ incr i [expr $region::yycnt-1]
+ } else {
+
+ global ds9
+ global current
+ global pmarker
+
switch -- [string tolower [lindex $var $i]] {
epsilon {
incr i
@@ -1944,6 +1971,86 @@ proc ProcessRegionsCmd {varname iname sock fn} {
}
}
}
+}
+
+proc RegionCmdSet {which value {cmd {}}} {
+ global bin
+
+ set marker($which) $value
+ if {$cmd != {}} {
+ eval $cmd
+ }
+}
+
+proc PRegionCmdSet {which value {cmd {}}} {
+ global bin
+
+ set pmarker($which) $value
+ if {$cmd != {}} {
+ eval $cmd
+ }
+}
+
+proc RegionCmdLoad {} {
+ global marker
+ global current
+
+ if {$marker(load,sock) != {}} {
+ # xpa path
+ # fits regions files not supported
+ if {$current(frame) != {}} {
+ if {[$current(frame) has fits]} {
+ $current(frame) marker load \
+ $marker(load,format) $marker(load,sock) \
+ $marker(load,system) $marker(load,sky)
+ }
+ }
+ UpdateGroupDialog
+ } elseif {$marker(load,fn) != {}} {
+ # samp path
+ MarkerLoadFrames $fn $current(frame) \
+ $marker(load,format) $marker(load,system) $marker(load,sky)
+ }
+}
+
+proc RegionCmdLoadFn {fn all} {
+ global marker
+ global ds9
+
+ if {$all} {
+ set frames $ds9(frames)
+ } else {
+ set frames $current(frame)
+ }
+ MarkerLoadFrames $fn $frames \
+ $marker(load,format) $marker(load,system) $marker(load,sky)
+}
+
+proc RegionCmdSaveFn {fn} {
+ global marker
+ global current
+
+ if {$current(frame) == {} || ![$current(frame) has fits]} {
+ return
+ }
+
+ $current(frame) marker save "\{$fn\}" $marker(format) \
+ $marker(system) $marker(sky) $marker(skyformat) $marker(strip)
+ FileLast markerfbox $fn
+}
+
+proc RegionCmdList {} {
+ global marker
+ global current
+
+ if {$current(frame) == {} || ![$current(frame) has fits]} {
+ return
+ }
+
+ SimpleTextDialog markertxt [msgcat::mc {Region}] 80 20 insert top \
+ [$current(frame) marker list $marker(format) $marker(system) \
+ $marker(sky) $marker(skyformat) $marker(strip)]
+}
proc ProcessSendRegionsCmd {proc id param sock fn} {
global current
diff --git a/ds9/library/source.tcl b/ds9/library/source.tcl
index 555aad9..b48a8b3 100644
--- a/ds9/library/source.tcl
+++ b/ds9/library/source.tcl
@@ -224,6 +224,8 @@ source $ds9(root)/library/panparser.tcl
source $ds9(root)/library/panlex.tcl
source $ds9(root)/library/plotparser.tcl
source $ds9(root)/library/plotlex.tcl
+source $ds9(root)/library/regionparser.tcl
+source $ds9(root)/library/regionlex.tcl
source $ds9(root)/library/scaleparser.tcl
source $ds9(root)/library/scalelex.tcl
source $ds9(root)/library/skyviewparser.tcl
diff --git a/ds9/parsers/regionlex.fcl b/ds9/parsers/regionlex.fcl
new file mode 100644
index 0000000..499a7bf
--- /dev/null
+++ b/ds9/parsers/regionlex.fcl
@@ -0,0 +1,115 @@
+#tab regionparser.tab.tcl
+
+%{
+%}
+
+#include defs.fin
+
+%%
+
+
+all {return $ALL_}
+at {return $AT_}
+auto {return $AUTO_}
+autocentroid {return $AUTOCENTROID_}
+back {return $BACK_}
+background {return $BACKGROUND_}
+centroid {return $CENTROID_}
+close {return $CLOSE_}
+color {return $COLOR_}
+command {return $COMMAND_}
+composite {return $COMPOSITE_}
+coord {return $COORD_}
+coordformat {return $COORDFORMAT_}
+copy {return $COPY_}
+cut {return $CUT_}
+delete {return $DELETE_}
+deleteall {return $DELETEALL_}
+delim {return $DELIM_}
+dissolve {return $DISSOLVE_}
+edit {return $EDIT_}
+epsilon {return $EPSILON_}
+exclude {return $EXCLUDE_}
+file {return $FILE_}
+fixed {return $FIXED_}
+format {return $FORMAT_}
+front {return $FRONT_}
+getinfo {return $GETINFO_}
+group {return $GROUP_}
+groups {return $GROUPS_}
+interation {return $INTERATION_}
+include {return $INCLUDE_}
+invert {return $INVERT_}
+list {return $LIST_}
+load {return $LOAD_}
+move {return $MOVE_}
+moveback {return $MOVEBACK_}
+movefront {return $MOVEFRONT_}
+new {return $NEW_}
+nl {return $NL_}
+none {return $NONE_}
+paste {return $PASTE_}
+property {return $PROPERTY_}
+radius {return $RADIUS_}
+rotate {return $ROTATE_}
+save {return $SAVE_}
+savetemplate {return $SAVETEMPLATE_}
+select {return $SELECT_}
+selectall {return $SELECTALL_}
+selectnone {return $SELECTNONE_}
+shape {return $SHAPE_}
+show {return $SHOW_}
+showtext {return $SHOWTEXT_}
+sky {return $SKY_}
+skyformat {return $SKYFORMAT_}
+source {return $SOURCE_}
+strip {return $STRIP_}
+system {return $SYSTEM_}
+tag {return $TAG_}
+template {return $TEMPLATE_}
+undo {return $UNDO_}
+update {return $UPDATE_}
+width {return $WIDTH_}
+
+ds9 {return $DS9_}
+xml {return $XML_}
+ciao {return $CIAO_}
+saotng {return $SAOTNG_}
+pros {return $PROS_}
+saoimage {return $SAOIMAGE_}
+xy {return $XY_}
+
+circle {return $CIRCLE_}
+ellipse {return $ELLIPSE_}
+box {return $BOX_}
+polygon {return $POLYGON_}
+point {return $POINT_}
+line {return $LINE_}
+vector {return $VECTOR_}
+text {return $TEXT_}
+ruler {return $RULER_}
+compass {return $COMPASS_}
+projection {return $PROJECTION_}
+annulus {return $ANNULUS_}
+panda {return $PANDA_}
+epanda {return $EPANDA_}
+bpanda {return $BPANDA_}
+composite {return $COMPOSITE_}
+diamond {return $DIAMOND_}
+cross {return $CROSS_}
+arrow {return $ARROW_}
+boxcircle {return $BOXCIRCLE_}
+
+-format {return $-FORMAT_}
+-system {return $-SYSTEM_}
+-sky {return $-SKY_}
+
+#include yesno.fin
+#include font.fin
+#include coords.fin
+#include skyframe.fin
+#include skyformat.fin
+#include numeric.fin
+#include string.fin
+
+%%
diff --git a/ds9/parsers/regionparser.tac b/ds9/parsers/regionparser.tac
new file mode 100644
index 0000000..698fba0
--- /dev/null
+++ b/ds9/parsers/regionparser.tac
@@ -0,0 +1,310 @@
+%{
+%}
+
+#include yesno.tin
+#include font.tin
+#include coords.tin
+#include skyframe.tin
+#include skyformat.tin
+#include numeric.tin
+#include string.tin
+
+%start command
+
+%token ALL_
+%token AT_
+%token AUTO_
+%token AUTOCENTROID_
+%token BACK_
+%token BACKGROUND_
+%token CENTROID_
+%token CLOSE_
+%token COLOR_
+%token COMMAND_
+%token COMPOSITE_
+%token COORD_
+%token COORDFORMAT_
+%token COPY_
+%token CUT_
+%token DELETE_
+%token DELETEALL_
+%token DELIM_
+%token DISSOLVE_
+%token EDIT_
+%token EPSILON_
+%token EXCLUDE_
+%token FILE_
+%token FIXED_
+%token FORMAT_
+%token FRONT_
+%token GETINFO_
+%token GROUP_
+%token GROUPS_
+%token INTERATION_
+%token INCLUDE_
+%token INVERT_
+%token LIST_
+%token LOAD_
+%token MOVE_
+%token MOVEBACK_
+%token MOVEFRONT_
+%token NEW_
+%token NL_
+%token NONE_
+%token PASTE_
+%token PROPERTY_
+%token RADIUS_
+%token ROTATE_
+%token SAVE_
+%token SAVETEMPLATE_
+%token SELECT_
+%token SELECTALL_
+%token SELECTNONE_
+%token SHAPE_
+%token SHOW_
+%token SHOWTEXT_
+%token SKY_
+%token SKYFORMAT_
+%token SOURCE_
+%token STRIP_
+%token SYSTEM_
+%token TAG_
+%token TEMPLATE_
+%token UNDO_
+%token UPDATE_
+%token WIDTH_
+
+%token DS9_
+%token XML_
+%token CIAO_
+%token SAOTNG_
+%token PROS_
+%token SAOIMAGE_
+%token XY_
+
+%token CIRCLE_
+%token ELLIPSE_
+%token BOX_
+%token POLYGON_
+%token POINT_
+%token LINE_
+%token VECTOR_
+%token TEXT_
+%token RULER_
+%token COMPASS_
+%token PROJECTION_
+%token ANNULUS_
+%token PANDA_
+%token EPANDA_
+%token BPANDA_
+%token COMPOSITE_
+%token DIAMOND_
+%token CROSS_
+%token ARROW_
+%token BOXCIRCLE_
+
+%token -FORMAT_
+%token -SYSTEM_
+%token -SKY_
+
+%%
+
+#include yesno.trl
+#include font.trl
+#include coords.trl
+#include skyframe.trl
+#include skyformat.trl
+#include numeric.trl
+
+command : region
+ | region {yyclearin; YYACCEPT} STRING_
+ ;
+
+region : props {RegionCmdLoad}
+ | LOAD_ loadall props STRING_ {RegionCmdLoadFn $4 $2}
+# backward compatibility
+ | FILE_ loadall STRING_ {RegionCmdLoadFn $3 $2}
+ | SAVE_ STRING_ {RegionCmdSaveFn $2}
+ | LIST_ list
+ | EPSILON_ INT_ {PRegionCmdSet epsilon $2 MarkerEpsilon}
+ | SHOW_ yesno {RegionCmdSet show $2 MarkerShow}
+ | SHOWTEXT_ yesno {RegionCmdSet show,text $2 MarkerShowText}
+ | CENTROID_ centroid
+# backward compatibility
+ | AUTOCENTROID_ yesno {RegionCmdSet centroid,auto $2 MarkerCentroidAuto}
+ | GETINFO_ {MarkerInfo}
+ | MOVE_ move
+# backward compatibility
+ | MOVEFRONT_ {MarkerFront}
+# backward compatibility
+ | MOVEBACK_ {MarkerBack}
+ | SELECT_ select
+# backward compatibility
+ | SELECTALL_ {MarkerSelectAll}
+# backward compatibility
+ | SELECTNONE_ {MarkerSelectNone}
+ | DELETE_ delete
+# backward compatibility
+ | DELETEALL_ {MarkerDeleteAll}
+ | FORMAT_ format {RegionCmdSet format $2}
+ | SYSTEM_ coordsys {RegionCmdSet system $2}
+ | SYSTEM_ wcssys {RegionCmdSet system $2}
+# backward compatibility
+ | SYSTEM_ skyframe {RegionCmdSet system wcs; RegionCmdSet sky $2}
+ | SKY_ skyframe {RegionCmdSet sky $2}
+ | SKYFORMAT_ skyformat {RegionCmdSet skyformate $2}
+ | STRIP_ yesno {RegionCmdSet strip $2}
+ | DELIM_ delim {RegionCmdSet strip $2}
+ | SHAPE_ shape {RegionCmdSet shape $2}
+ | COLOR_ STRING_ {RegionCmdSet color $2 MarkerColor}
+ | WIDTH_ INT_ {RegionCmdSet width $2 MarkerWidth}
+ | FIXED_ yesno {RegionCmdSet fixed $2 [list MarkerProp fixed]}
+ | EDIT_ yesno {RegionCmdSet edit $2 [list MarkerProp edit]}
+ | ROTATE_ yesno {RegionCmdSet rotate $2 [list MarkerProp rotate]}
+ | DELETE_ yesno {RegionCmdSet delete $2 [list MarkerProp delete]}
+ | INCLUDE_ {RegionCmdSet include 1 [list MarkerProp include]}
+ | EXCLUDE_ {RegionCmdSet include 0 [list MarkerProp include]}
+ | SOURCE_ {RegionCmdSet source 1 [list MarkerProp source]}
+ | BACKGROUND_ {RegionCmdSet source 0 [list MarkerProp source]}
+ | GROUPS_ group # waj
+ | GROUP_ group # waj
+ | COPY_ {MarkerCopy}
+ | CUT_ {MarkerCut}
+ | PASTE_ coordsys {RegionCmdSet paste,system $2 MarkerPaste}
+ | PASTE_ wcssys {RegionCmdSet paste,system $2 MarkerPaste}
+# backward compatibility
+ | PASTE_ skyframe {RegionCmdSet paste,system wcs MarkerPaste}
+ | UNDO_ {MarkerUndo}
+ | COMPOSITE_ {CompositeCreate}
+ | DISSOLVE_ {CompositeDelete}
+ | TEMPLATE_ template # waj
+ | SAVETEMPLATE_ STRING_ # waj
+ | COMMAND_ STRING_ # waj
+ ;
+
+props : props prop
+ | prop
+ ;
+
+prop : -FORMAT_ format {RegionCmdSet load,format $2}
+ | -SYSTEM_ coordsys {RegionCmdSet load,system $2}
+ | -SYSTEM_ wcssys {RegionCmdSet load,system $2}
+# backward compatibility
+ | -SYSTEM_ skyframe {RegionCmdSet load,system wcs; RegionCmdSet load,sky $2}
+ | -SKY_ skyframe {RegionCmdSet load,sky $2}
+ ;
+
+loadall : {set _ 0}
+ | ALL_ {set _ 1}
+ ;
+
+list : {RegionCmdList}
+ | CLOSE_ {SimpleTextDestroy markertxt}
+ ;
+
+centroid : {MarkerCentroid}
+ | AUTO_ yesno {RegionCmdSet centroid,auto $2 MarkerCentroidAuto}
+ | RADIUS_ numeric {RegionCmdSet centroid,radius $2 MarkerCentroidRadius}
+ | INTERATION_ INT_ {RegionCmdSet centroid,iteration $2 MarkerCentroidInteration}
+ ;
+
+move : FRONT_ {MarkerFront}
+ | BACK_ {MarkerBack}
+ ;
+
+select : ALL_ {MarkerSelectAll}
+ | NONE_ {MarkerSelectNone}
+ | INVERT_ {MarkerSelectInvert}
+# backward compatibility
+ | GROUP_ STRING_ # waj
+;
+
+delete : ALL_ {MarkerDeleteAll}
+ | SELECT_ {MarkerDeleteSelect}
+ ;
+
+format : DS9_ {set _ ds9}
+ | XML_ {set _ xml}
+ | CIAO_ {set _ ciao}
+ | SAOTNG_ {set _ saotng}
+ | PROS_ {set _ pros}
+ | SAOIMAGE_ {set _ saoimage}
+ | XY_ {set _ xy}
+ ;
+
+shape : CIRCLE_
+ | ELLIPSE_
+ | BOX_
+ | POLYGON_
+ | point POINT_
+ | LINE_
+ | VECTOR_
+ | TEXT_
+ | RULER_
+ | COMPASS_
+ | PROJECTION_
+ | ANNULUS_
+ | ELLIPSE_ ANNULUS_
+ | BOX_ ANNULUS_
+ | PANDA_
+ | EPANDA_
+ | BPANDA_
+ | COMPOSITE_
+ ;
+
+point :
+ | CIRCLE_
+ | BOX_
+ | DIAMOND_
+ | CROSS_
+ | 'X'
+ | 'x'
+ | ARROW_
+ | BOXCIRCLE_
+ ;
+
+delim : NL_ {set _ 0}
+ | STRING_ {set _ 1}
+ | yesno {set _ $1}
+ ;
+
+template : STRING_
+ | STRING_ AT_ numeric numeric coordsys
+ | STRING_ AT_ numeric numeric wcssys
+ | STRING_ AT_ numeric numeric wcssys skyframe
+ ;
+
+group : NEW_
+ | STRING_ NEW_
+ | STRING_ UPDATE_
+ | STRING_ SELECT_
+ | STRING_ COLOR_ STRING_
+ | STRING_ COPY_
+ | STRING_ CUT_
+ | STRING_ DELETE_
+ | STRING_ FONT_
+ | STRING_ MOVE_ INT_ INT_
+ | STRING_ MOVEFRONT_
+ | STRING_ MOVEBACK_
+ | STRING_ PROPERTY_ property yesno
+ ;
+
+property : SELECT_ {set _ select}
+ | EDIT_ {set _ edit}
+ | MOVE_ {set _ move}
+ | ROTATE_ {set _ rotate}
+ | DELETE_ {set _ delete}
+ | FIXED_ {set _ fixed}
+ | INCLUDE_ {set _ include}
+ | SOURCE_ {set _ source}
+ ;
+
+%%
+
+proc region::yyerror {msg} {
+ variable yycnt
+ variable yy_current_buffer
+ variable index_
+
+ ParserError $msg $yycnt $yy_current_buffer $index_
+}