summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Joye <wjoye@cfa.harvard.edu>2018-05-17 18:28:03 (GMT)
committerWilliam Joye <wjoye@cfa.harvard.edu>2018-05-17 18:28:03 (GMT)
commite8ee5fa11878a7be31e5327b4d7abbecdfbad35f (patch)
tree2930e3962b4a032e25bbebd970686c5d09e53fb5
parent6cb5c6f14c66b5f21214cfc4aa3e08e1f113c856 (diff)
downloadblt-e8ee5fa11878a7be31e5327b4d7abbecdfbad35f.zip
blt-e8ee5fa11878a7be31e5327b4d7abbecdfbad35f.tar.gz
blt-e8ee5fa11878a7be31e5327b4d7abbecdfbad35f.tar.bz2
add ds9 urlfits parser
-rw-r--r--ds9/library/source.tcl2
-rw-r--r--ds9/library/url.tcl10
-rw-r--r--ds9/parsers/urlfitslex.fcl16
-rw-r--r--ds9/parsers/urlfitsparser.tac36
4 files changed, 63 insertions, 1 deletions
diff --git a/ds9/library/source.tcl b/ds9/library/source.tcl
index 2e72c37..9b358c5 100644
--- a/ds9/library/source.tcl
+++ b/ds9/library/source.tcl
@@ -352,6 +352,8 @@ source $ds9(root)/library/twomassparser.tcl
source $ds9(root)/library/twomasslex.tcl
source $ds9(root)/library/updateparser.tcl
source $ds9(root)/library/updatelex.tcl
+source $ds9(root)/library/urlfitsparser.tcl
+source $ds9(root)/library/urlfitslex.tcl
source $ds9(root)/library/viewparser.tcl
source $ds9(root)/library/viewlex.tcl
source $ds9(root)/library/vlaparser.tcl
diff --git a/ds9/library/url.tcl b/ds9/library/url.tcl
index 2643e32..8a65ab7 100644
--- a/ds9/library/url.tcl
+++ b/ds9/library/url.tcl
@@ -313,9 +313,16 @@ proc ProcessURLFitsCmd {varname iname} {
upvar $varname var
upvar $iname i
+ global debug
+ if {$debug(tcl,parser)} {
+ urlfits::YY_FLUSH_BUFFER
+ urlfits::yy_scan_string [lrange $var $i end]
+ urlfits::yyparse
+ incr i [expr $urlfits::yycnt-1]
+ } else {
+
set layer {}
set mode {}
-
switch -- [string tolower [lindex $var $i]] {
new {
incr i
@@ -333,4 +340,5 @@ proc ProcessURLFitsCmd {varname iname} {
LoadURLFits [lindex $var $i] $layer $mode
}
+}
diff --git a/ds9/parsers/urlfitslex.fcl b/ds9/parsers/urlfitslex.fcl
new file mode 100644
index 0000000..108d416
--- /dev/null
+++ b/ds9/parsers/urlfitslex.fcl
@@ -0,0 +1,16 @@
+#tab urlfitsparser.tab.tcl
+
+%{
+%}
+
+#include defs.fin
+
+%%
+
+mask {return $MASK_}
+new {return $NEW_}
+slice {return $SLICE_}
+
+#include string.fin
+
+%%
diff --git a/ds9/parsers/urlfitsparser.tac b/ds9/parsers/urlfitsparser.tac
new file mode 100644
index 0000000..bd1ac6c
--- /dev/null
+++ b/ds9/parsers/urlfitsparser.tac
@@ -0,0 +1,36 @@
+%{
+%}
+
+#include string.tin
+
+%start command
+
+%token MASK_
+%token NEW_
+%token SLICE_
+
+%%
+
+# XPA/SAMP only
+command : urlfits
+ ;
+
+urlfits: new STRING_ {LoadURLFits $2 {} {}}
+ | new MASK_ STRING_ {LoadURLFits $3 mask {}}
+ | new SLICE_ STRING_ {LoadURLFits $3 {} slice}
+ | new MASK_ SLICE_ STRING_ {LoadURLFits $4 mask slice}
+;
+
+new :
+ | NEW_ {CreateFrame}
+ ;
+
+%%
+
+proc urlfits::yyerror {msg} {
+ variable yycnt
+ variable yy_current_buffer
+ variable index_
+
+ ParserError $msg $yycnt $yy_current_buffer $index_
+}