summaryrefslogtreecommitdiffstats
path: root/ds9/parsers/fitslex.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'ds9/parsers/fitslex.tcl')
-rw-r--r--ds9/parsers/fitslex.tcl319
1 files changed, 319 insertions, 0 deletions
diff --git a/ds9/parsers/fitslex.tcl b/ds9/parsers/fitslex.tcl
new file mode 100644
index 0000000..7126931
--- /dev/null
+++ b/ds9/parsers/fitslex.tcl
@@ -0,0 +1,319 @@
+package provide DS9 1.0
+
+######
+# Begin autogenerated fickle (version 2.1) routines.
+# Although fickle itself is protected by the GNU Public License (GPL)
+# all user-supplied functions are protected by their respective
+# author's license. See http://mini.net/tcl/fickle for other details.
+######
+
+namespace eval fits {
+ variable yylval
+
+ variable yytext {}
+ variable yyleng 0
+ variable yyin stdin
+ variable yyout stdout
+ variable yy_current_buffer {}
+
+ variable yylineno 1
+
+ variable index_ 0
+ variable done_ 0
+}
+
+# ECHO copies yytext to the scanner's output if no arguments are
+# given. The scanner writes its ECHO output to the yyout global
+# (default, stdout), which may be redefined by the user simply by
+# assigning it to some other channel.
+# -- from the flex(1) man page
+proc fits::ECHO {{s ""}} {
+ variable yytext
+ variable yyout
+
+ if {$s == ""} {
+ puts -nonewline $yyout $yytext
+ } else {
+ puts -nonewline $yyout $s
+ }
+}
+
+# YY_FLUSH_BUFFER flushes the scanner's internal buffer so that the
+# next time the scanner attempts to match a token, it will first
+# refill the buffer using YY_INPUT.
+# -- from the flex(1) man page
+proc fits::YY_FLUSH_BUFFER {} {
+ variable yy_current_buffer
+ variable index_
+ variable done_
+
+ set yy_current_buffer ""
+ set index_ 0
+ set done_ 0
+}
+
+# yyrestart(new_file) may be called to point yyin at the new input
+# file. The switch-over to the new file is immediate (any previously
+# buffered-up input is lost). Note that calling yyrestart with yyin
+# as an argument thus throws away the current input buffer and
+# continues scanning the same input file.
+# -- from the flex(1) man page
+proc fits::yyrestart {new_file} {
+ variable yyin
+
+ set yyin $new_file
+ YY_FLUSH_BUFFER
+}
+
+# The nature of how it gets its input can be controlled by defining
+# the YY_INPUT macro. YY_INPUT's calling sequence is
+# "YY_INPUT(buf,result,max_size)". Its action is to place up to
+# max_size characters in the character array buf and return in the
+# integer variable result either the number of characters read or the
+# constant YY_NULL (0 on Unix systems) to indicate EOF. The default
+# YY_INPUT reads from the global file-pointer "yyin".
+# -- from the flex(1) man page
+proc fits::YY_INPUT {buf result max_size} {
+ variable yyin
+
+ upvar $result ret_val
+ upvar $buf new_data
+ if {$yyin != ""} {
+ set new_data [read $yyin $max_size]
+ set ret_val [string length $new_data]
+ } else {
+ set new_data ""
+ set ret_val 0
+ }
+}
+
+# yy_scan_string sets up input buffers for scanning in-memory
+# strings instead of files. Note that switching input sources does
+# not change the start condition.
+# -- from the flex(1) man page
+proc fits::yy_scan_string {str} {
+ variable yy_current_buffer
+ variable yyin
+
+ append yy_current_buffer $str
+ set yyin ""
+}
+
+# unput(c) puts the character c back onto the input stream. It will
+# be the next character scanned.
+# -- from the flex(1) man page
+proc fits::unput {c} {
+ variable yy_current_buffer
+ variable index_
+
+ set s [string range $yy_current_buffer 0 [expr {$index_ - 1}]]
+ append s $c
+ set yy_current_buffer [append s [string range $yy_current_buffer $index_ end]]
+}
+
+# Returns all but the first n characters of the current token back to
+# the input stream, where they will be rescanned when the scanner
+# looks for the next match. yytext and yyleng are adjusted
+# appropriately.
+# -- from the flex(1) man page
+proc fits::yyless {n} {
+ variable yy_current_buffer
+ variable index_
+ variable yytext
+ variable yyleng
+
+ set s [string range $yy_current_buffer 0 [expr {$index_ - 1}]]
+ append s [string range $yytext $n end]
+ set yy_current_buffer [append s [string range $yy_current_buffer $index_ end]]
+ set yytext [string range $yytext 0 [expr {$n - 1}]]
+ set yyleng [string length $yytext]
+}
+
+# input() reads the next character from the input stream.
+# -- from the flex(1) man page
+proc fits::input {} {
+ variable yy_current_buffer
+ variable index_
+ variable done_
+
+ if {[string length $yy_current_buffer] - $index_ < 1024} {
+ set new_buffer ""
+ set new_buffer_size 0
+ if {$done_ == 0} {
+ YY_INPUT new_buffer new_buffer_size 1024
+ append yy_current_buffer $new_buffer
+ if {$new_buffer_size == 0} {
+ set done_ 1
+ }
+ }
+ if $done_ {
+ if {[string length $yy_current_buffer] - $index_ == 0} {
+ return {}
+ }
+ }
+ }
+ set c [string index $yy_current_buffer $index_]
+ incr index_
+ return $c
+}
+
+######
+# autogenerated yylex function created by fickle
+######
+
+# Whenever yylex() is called, it scans tokens from the global input
+# file yyin (which defaults to stdin). It continues until it either
+# reaches an end-of-file (at which point it returns the value 0) or
+# one of its actions executes a return statement.
+# -- from the flex(1) man page
+proc fits::yylex {} {
+ variable yylval
+
+ variable yytext
+ variable yylineno
+ variable yyleng
+ variable yy_current_buffer
+ variable yy_flex_debug
+
+ variable index_
+ variable done_
+ variable state_table_
+
+set STRING_ 257
+set MASK_ 258
+set NEW_ 259
+set SLICE_ 260
+
+ while {1} {
+ if {[string length $yy_current_buffer] - $index_ < 1024} {
+ if {$done_ == 0} {
+ set buffer_size 0
+ set new_buffer ""
+ YY_INPUT new_buffer buffer_size 1024
+ append yy_current_buffer $new_buffer
+ if {$buffer_size == 0 && \
+ [string length $yy_current_buffer] - $index_ == 0} {
+ set done_ 1
+ }
+ }
+ if $done_ {
+ if {[string length $yy_current_buffer] - $index_ == 0} {
+ break
+ }
+ }
+ }
+ set yyleng 0
+ set matched_rule -1
+ # rule 0: mask
+ if {[regexp -start $index_ -indices -line -nocase -- {\A(mask)} $yy_current_buffer match] > 0 && \
+ [lindex $match 1] - $index_ + 1 > $yyleng} {
+ set yytext [string range $yy_current_buffer $index_ [lindex $match 1]]
+ set yyleng [string length $yytext]
+ set matched_rule 0
+ }
+ # rule 1: new
+ if {[regexp -start $index_ -indices -line -nocase -- {\A(new)} $yy_current_buffer match] > 0 && \
+ [lindex $match 1] - $index_ + 1 > $yyleng} {
+ set yytext [string range $yy_current_buffer $index_ [lindex $match 1]]
+ set yyleng [string length $yytext]
+ set matched_rule 1
+ }
+ # rule 2: slice
+ if {[regexp -start $index_ -indices -line -nocase -- {\A(slice)} $yy_current_buffer match] > 0 && \
+ [lindex $match 1] - $index_ + 1 > $yyleng} {
+ set yytext [string range $yy_current_buffer $index_ [lindex $match 1]]
+ set yyleng [string length $yytext]
+ set matched_rule 2
+ }
+ # rule 3: \"[^\"]*\"
+ if {[regexp -start $index_ -indices -line -nocase -- {\A(\"[^\"]*\")} $yy_current_buffer match] > 0 && \
+ [lindex $match 1] - $index_ + 1 > $yyleng} {
+ set yytext [string range $yy_current_buffer $index_ [lindex $match 1]]
+ set yyleng [string length $yytext]
+ set matched_rule 3
+ }
+ # rule 4: \'[^\']*\'
+ if {[regexp -start $index_ -indices -line -nocase -- {\A(\'[^\']*\')} $yy_current_buffer match] > 0 && \
+ [lindex $match 1] - $index_ + 1 > $yyleng} {
+ set yytext [string range $yy_current_buffer $index_ [lindex $match 1]]
+ set yyleng [string length $yytext]
+ set matched_rule 4
+ }
+ # rule 5: \{[^\}]*\}
+ if {[regexp -start $index_ -indices -line -nocase -- {\A(\{[^\}]*\})} $yy_current_buffer match] > 0 && \
+ [lindex $match 1] - $index_ + 1 > $yyleng} {
+ set yytext [string range $yy_current_buffer $index_ [lindex $match 1]]
+ set yyleng [string length $yytext]
+ set matched_rule 5
+ }
+ # rule 6: \S+\S+
+ if {[regexp -start $index_ -indices -line -nocase -- {\A(\S+\S+)} $yy_current_buffer match] > 0 && \
+ [lindex $match 1] - $index_ + 1 > $yyleng} {
+ set yytext [string range $yy_current_buffer $index_ [lindex $match 1]]
+ set yyleng [string length $yytext]
+ set matched_rule 6
+ }
+ # rule 7: \s
+ if {[regexp -start $index_ -indices -line -nocase -- {\A(\s)} $yy_current_buffer match] > 0 && \
+ [lindex $match 1] - $index_ + 1 > $yyleng} {
+ set yytext [string range $yy_current_buffer $index_ [lindex $match 1]]
+ set yyleng [string length $yytext]
+ set matched_rule 7
+ }
+ # rule 8: .
+ if {[regexp -start $index_ -indices -line -nocase -- {\A(.)} $yy_current_buffer match] > 0 && \
+ [lindex $match 1] - $index_ + 1 > $yyleng} {
+ set yytext [string range $yy_current_buffer $index_ [lindex $match 1]]
+ set yyleng [string length $yytext]
+ set matched_rule 8
+ }
+ if {$matched_rule == -1} {
+ set yytext [string index $yy_current_buffer $index_]
+ set yyleng 1
+ }
+ incr index_ $yyleng
+ # workaround for Tcl's circumflex behavior
+ if {[string index $yytext end] == "\n"} {
+ set yy_current_buffer [string range $yy_current_buffer $index_ end]
+ set index_ 0
+ }
+ set numlines [expr {[llength [split $yytext "\n"]] - 1}]
+ switch -- $matched_rule {
+ 0 {
+return $MASK_
+ }
+ 1 {
+return $NEW_
+ }
+ 2 {
+return $SLICE_
+ }
+ 3 {
+set yylval [string range $yytext 1 end-1]; return $STRING_
+ }
+ 4 {
+set yylval [string range $yytext 1 end-1]; return $STRING_
+ }
+ 5 {
+set yylval [string range $yytext 1 end-1]; return $STRING_
+ }
+ 6 {
+set yylval $yytext; return $STRING_
+ }
+ 7 {
+# ignore whitespace
+ }
+ 8 {
+set yylval $yytext; return $yylval
+ }
+ default
+ { puts stderr "unmatched token: $yytext"; exit -1 }
+ }
+ incr yylineno $numlines
+ }
+ return 0
+}
+######
+# end autogenerated fickle functions
+######
+