From 80fcf2440ac675ecb86879f89c2cc7578585adeb Mon Sep 17 00:00:00 2001 From: William Joye Date: Mon, 16 Apr 2018 16:35:25 -0400 Subject: add ds9 save parser --- ds9/library/save.tcl | 23 ++++++++++++++ ds9/library/saveimage.tcl | 9 +++--- ds9/library/source.tcl | 2 ++ ds9/parsers/saveimageparser.tac | 20 ++++++------ ds9/parsers/savelex.fcl | 27 ++++++++++++++++ ds9/parsers/saveparser.tac | 68 +++++++++++++++++++++++++++++++++++++++++ 6 files changed, 135 insertions(+), 14 deletions(-) create mode 100644 ds9/parsers/savelex.fcl create mode 100644 ds9/parsers/saveparser.tac diff --git a/ds9/library/save.tcl b/ds9/library/save.tcl index 45999cf..a3fdad7 100644 --- a/ds9/library/save.tcl +++ b/ds9/library/save.tcl @@ -43,6 +43,14 @@ proc ProcessSaveCmd {varname iname} { # we need to be realized ProcessRealizeDS9 + global debug + if {$debug(tcl,parser)} { + save::YY_FLUSH_BUFFER + save::yy_scan_string [lrange $var $i end] + save::yyparse + incr i [expr $save::yycnt-1] + } else { + set format {} set fn [lindex $var $i] if {$fn == {}} { @@ -121,6 +129,21 @@ proc ProcessSaveCmd {varname iname} { FileLast savefitsfbox $fn Save $format $fn } +} + +proc SaveCmdLoad {format fn} { + FileLast savefitsfbox $fn + Save $format $fn +} + +proc SavefitsCmdSet {which value {cmd {}}} { + global savefits + + set savefits($which) $value + if {$cmd != {}} { + eval $cmd + } +} # Support diff --git a/ds9/library/saveimage.tcl b/ds9/library/saveimage.tcl index 53eed0b..45ac769 100644 --- a/ds9/library/saveimage.tcl +++ b/ds9/library/saveimage.tcl @@ -273,8 +273,8 @@ proc ProcessSaveImageCmd {varname iname} { } } -proc SaveImageCmdSet {which value {cmd {}}} { - global bin +proc SaveimageCmdSet {which value {cmd {}}} { + global saveimage set saveimage($which) $value if {$cmd != {}} { @@ -282,7 +282,7 @@ proc SaveImageCmdSet {which value {cmd {}}} { } } -proc SaveImageCmdLoad {format fn} { +proc SaveimageCmdLoad {format fn} { switch -- $format { fits {FileLast fitsfbox $fn} eps {FileLast epsfbox $fn} @@ -294,8 +294,9 @@ proc SaveImageCmdLoad {format fn} { SaveImage $fn $format } -proc SaveImageCmdMPEG {fn na} { +proc SaveimageCmdMPEG {fn na} { global movie + set movie(action) slice Movie $fn } diff --git a/ds9/library/source.tcl b/ds9/library/source.tcl index b0a4ce6..c4ffb23 100644 --- a/ds9/library/source.tcl +++ b/ds9/library/source.tcl @@ -250,6 +250,8 @@ 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/saveparser.tcl +source $ds9(root)/library/savelex.tcl source $ds9(root)/library/saveimageparser.tcl source $ds9(root)/library/saveimagelex.tcl source $ds9(root)/library/siaparser.tcl diff --git a/ds9/parsers/saveimageparser.tac b/ds9/parsers/saveimageparser.tac index 1e1fcb3..ba7c013 100644 --- a/ds9/parsers/saveimageparser.tac +++ b/ds9/parsers/saveimageparser.tac @@ -26,16 +26,16 @@ command : saveimage | saveimage {yyclearin; YYACCEPT} STRING_ ; -saveimage : STRING_ opts {SaveImageCmdLoad [ExtToFormat $1] $1} - | ext STRING_ opts {SaveImageCmdLoad $1 $2} +saveimage : STRING_ opts {SaveimageCmdLoad [ExtToFormat $1] $1} + | ext STRING_ opts {SaveimageCmdLoad $1 $2} # backward compatibilty - | ext opts STRING_ {SaveImageCmdLoad $1 $2} + | ext opts STRING_ {SaveimageCmdLoad $1 $2} # backward compatibilty | MPEG_ mpeg ; -mpeg : STRING_ {SaveImageCmdMPEG $1 1} - | STRING_ INT_ {SaveImageCmdMPEG $1 $2} +mpeg : STRING_ {SaveimageCmdMPEG $1 1} + | STRING_ INT_ {SaveimageCmdMPEG $1 $2} ; ext : FITS_ {set _ fits} @@ -47,11 +47,11 @@ ext : FITS_ {set _ fits} ; opts : - | NONE_ {SaveImageCmdSet tiff,compress none} - | JPEG_ {SaveImageCmdSet tiff,compress jpeg} - | PACKBITS_ {SaveImageCmdSet tiff,compress packbits} - | DEFLATE_ {SaveImageCmdSet tiff,compress deflate} - | numeric {SaveImageCmdSet jpeg,quality $1} + | NONE_ {SaveimageCmdSet tiff,compress none} + | JPEG_ {SaveimageCmdSet tiff,compress jpeg} + | PACKBITS_ {SaveimageCmdSet tiff,compress packbits} + | DEFLATE_ {SaveimageCmdSet tiff,compress deflate} + | numeric {SaveimageCmdSet jpeg,quality $1} ; %% diff --git a/ds9/parsers/savelex.fcl b/ds9/parsers/savelex.fcl new file mode 100644 index 0000000..80a7969 --- /dev/null +++ b/ds9/parsers/savelex.fcl @@ -0,0 +1,27 @@ +#tab saveparser.tab.tcl + +%{ +%} + +#include defs.fin + +%% + +fits {return $FITS_} +rgbimage {return $RGBIMAGE_} +rgbcube {return $RGBCUBE_} +mecube {return $MECUBE_} +mosaic {return $MOSAIC_} +mosaicwcs {return $MOSAICWCS_} +mosaicimage {return $MOSAICIMAGE_} +mosaicimagewcs {return $MOSAICIMAGEWCS_} +wcs {return $WCS_} + +image {return $IMAGE_} +table {return $TABLE_} +slice {return $SLICE_} + +#include numeric.fin +#include string.fin + +%% diff --git a/ds9/parsers/saveparser.tac b/ds9/parsers/saveparser.tac new file mode 100644 index 0000000..df6b801 --- /dev/null +++ b/ds9/parsers/saveparser.tac @@ -0,0 +1,68 @@ +%{ +%} + +#include numeric.tin +#include string.tin + +%start command + +%token FITS_ +%token RGBIMAGE_ +%token RGBCUBE_ +%token MECUBE_ +%token MOSAIC_ +%token MOSAICWCS_ +%token MOSAICIMAGE_ +%token MOSAICIMAGEWCS_ +%token WCS_ + +%token IMAGE_ +%token TABLE_ +%token SLICE_ + +%% + +#include numeric.trl + +command : save + | save {yyclearin; YYACCEPT} STRING_ + ; + +save : STRING_ opts {SaveCmdLoad [ExtToFormat $1] $1} + | format STRING_ opts {SaveCmdLoad $1 $2} + ; + +format : FITS_ {set _ fits} + | RGBIMAGE_ {set _ rgbimage} + | RGBCUBE_ {set _ rgbcube} + | MECUBE_ {set _ mecube} + | mosaic {set _ $1} + | mosaicimage {set _ $1} + ; + +mosaic : MOSAIC_ {set _ mosaic} + | MOSAIC_ WCS_ {set _ mosaic} + | MOSAICWCS_ {set _ mosaic} + ; + +mosaicimage : MOSAICIMAGE_ {set _ mosaicimage} + | MOSAICIMAGE_ WCS_ {set _ mosaicimage} + | MOSAICIMAGEWCS_ {set _ mosaicimage} + ; + +opts : {SavefitsCmdSet type image; SavefitsCmdSet mosaic 1} + | IMAGE_ {SavefitsCmdSet type image} + | TABLE_ {SavefitsCmdSet type table} + | SLICE_ {SavefitsCmdSet type slice} + | INT_ {SavefitsCmdSet mosaic $1} + ; + +%% + +proc save::yyerror {msg} { + variable yycnt + variable yy_current_buffer + variable index_ + + ParserError $msg $yycnt $yy_current_buffer $index_ +} -- cgit v0.12