diff options
author | William Joye <wjoye@cfa.harvard.edu> | 2018-04-06 21:20:41 (GMT) |
---|---|---|
committer | William Joye <wjoye@cfa.harvard.edu> | 2018-04-06 21:20:41 (GMT) |
commit | cf03e9e3151dd8897adb5183b7f236e87a2107c8 (patch) | |
tree | 407eb4edb93d0d16ef5c611f6fdf3158e2931b74 | |
parent | 11376f9238353b2c2fc2df9d1c42a622ed93278b (diff) | |
download | blt-cf03e9e3151dd8897adb5183b7f236e87a2107c8.zip blt-cf03e9e3151dd8897adb5183b7f236e87a2107c8.tar.gz blt-cf03e9e3151dd8897adb5183b7f236e87a2107c8.tar.bz2 |
add ds9 region parser
-rw-r--r-- | ds9/library/marker.tcl | 115 | ||||
-rw-r--r-- | ds9/library/source.tcl | 2 | ||||
-rw-r--r-- | ds9/parsers/regionlex.fcl | 115 | ||||
-rw-r--r-- | ds9/parsers/regionparser.tac | 310 |
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_ +} |