From c846ca88b1423a436ed8ea5b1207d564f1383042 Mon Sep 17 00:00:00 2001 From: William Joye Date: Fri, 9 Mar 2018 13:53:46 -0500 Subject: add block ds9 parser --- ds9/library/block.tcl | 13 ++++++++++++ ds9/library/source.tcl | 2 ++ ds9/parsers/blocklex.fcl | 22 +++++++++++++++++++ ds9/parsers/blockparser.tac | 51 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 88 insertions(+) create mode 100644 ds9/parsers/blocklex.fcl create mode 100644 ds9/parsers/blockparser.tac diff --git a/ds9/library/block.tcl b/ds9/library/block.tcl index d4135f8..e18f452 100644 --- a/ds9/library/block.tcl +++ b/ds9/library/block.tcl @@ -284,6 +284,19 @@ proc BlockBackupRGB {ch which} { proc ProcessBlockCmd {varname iname} { upvar $varname var + upvar $iname ii + + # we need to be realized + ProcessRealizeDS9 + + block::YY_FLUSH_BUFFER + block::yy_scan_string [lrange $var $ii end] + block::yyparse + incr ii [expr $block::yycnt-1] +} + +proc oProcessBlockCmd {varname iname} { + upvar $varname var upvar $iname i # we need to be realized diff --git a/ds9/library/source.tcl b/ds9/library/source.tcl index 552fa32..cdb5d6a 100644 --- a/ds9/library/source.tcl +++ b/ds9/library/source.tcl @@ -190,6 +190,8 @@ source $ds9(root)/library/xpa.tcl source $ds9(root)/library/binparser.tcl source $ds9(root)/library/binlex.tcl +source $ds9(root)/library/blockparser.tcl +source $ds9(root)/library/blocklex.tcl source $ds9(root)/library/dssesoparser.tcl source $ds9(root)/library/dssesolex.tcl source $ds9(root)/library/dsssaoparser.tcl diff --git a/ds9/parsers/blocklex.fcl b/ds9/parsers/blocklex.fcl new file mode 100644 index 0000000..272cecb --- /dev/null +++ b/ds9/parsers/blocklex.fcl @@ -0,0 +1,22 @@ +#tab blockparser.tab.tcl + +%{ +%} + +#include defs.fin + +%% + +close {return $CLOSE_} +fit {return $FIT_} +in {return $IN_} +lock {return $LOCK_} +match {return $MATCH_} +open {return $OPEN_} +out {return $OUT_} +to {return $TO_} + +#include yesno.fin +#include base.fin + +%% diff --git a/ds9/parsers/blockparser.tac b/ds9/parsers/blockparser.tac new file mode 100644 index 0000000..53a22ca --- /dev/null +++ b/ds9/parsers/blockparser.tac @@ -0,0 +1,51 @@ +%{ +%} + +#include yesno.tin +#include base.tin + +%start command + +%token CLOSE_ +%token FIT_ +%token IN_ +%token LOCK_ +%token MATCH_ +%token OPEN_ +%token OUT_ +%token TO_ + +%% + +#include yesno.trl +#include base.trl + +command : block + | block {yyclearin; YYACCEPT} CMD_ + ; + +block : CLOSE_ {BlockDestroyDialog} + | OPEN_ {BlockDialog} + | MATCH_ {MatchBlockCurrent} + | LOCK_ yesno {global block; set block(lock) $2; LockBlockCurrent} + | numeric {Block $1 $1} + | numeric numeric {Block $1 $2} + | IN_ {Block .5 .5} + | OUT_ {Block 2 2} + | TO_ blockTo + ; + +blockTo : numeric {global block; set block(factor) "$1 $1"; ChangeBlock} + | numeric numeric {global block; set block(factor) "$1 $2"; ChangeBlock} + | FIT_ {BlockToFit} + ; + +%% + +proc block::yyerror {msg} { + variable yycnt + variable yy_current_buffer + variable index_ + + ParserError $msg $yycnt $yy_current_buffer $index_ +} -- cgit v0.12