summaryrefslogtreecommitdiffstats
path: root/tksao/frame/tnglex.L
diff options
context:
space:
mode:
Diffstat (limited to 'tksao/frame/tnglex.L')
-rw-r--r--tksao/frame/tnglex.L170
1 files changed, 170 insertions, 0 deletions
diff --git a/tksao/frame/tnglex.L b/tksao/frame/tnglex.L
new file mode 100644
index 0000000..7cd20e2
--- /dev/null
+++ b/tksao/frame/tnglex.L
@@ -0,0 +1,170 @@
+/* Copyright (C) 1999-2016
+ * Smithsonian Astrophysical Observatory, Cambridge, MA, USA
+ * For conditions of distribution and use, see copyright notice in "copyright"
+ */
+
+%option noyywrap
+%option caseless
+%option never-interactive
+%option c++
+
+%{
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+
+ #include "util.h"
+ #include "tngparser.H"
+
+ extern YYSTYPE* tnglval;
+ extern tngFlexLexer* tnglexx;
+%}
+
+%x DISCARD
+
+D [0-9]
+E [Ee][+-]?{D}+
+
+/* rules */
+
+%%
+
+<DISCARD>[\n] { // special case-- #\n
+ BEGIN INITIAL;
+ yyless(0); // put back the terminator
+ strcpy(tnglval->str,""); // feed a blank string
+ return STRING;
+ }
+
+<DISCARD>[^\n]* { // Discard reset of line
+ BEGIN INITIAL;
+ int ll = yyleng <(TNGBUFSIZE-1) ? yyleng:(TNGBUFSIZE-1);
+ strncpy(tnglval->str,yytext,ll);
+ tnglval->str[ll] = '\0';
+ return STRING;
+ }
+
+b1950 {return B1950_;}
+background {return BACKGROUND_;}
+box {return BOX_;}
+black {return BLACK_;}
+blue {return BLUE_;}
+circle {return CIRCLE_;}
+cyan {return CYAN_;}
+date {return DATE_;}
+debug {return DEBUG_;}
+degrees {return DEGREES_;}
+ellipse {return ELLIPSE_;}
+ecliptic {return ECLIPTIC_;}
+filename {return FILENAME_;}
+fk4 {return FK4_;}
+fk4-no-e {return FK4_NO_E_;}
+fk5 {return FK5_;}
+format {return FORMAT_;}
+galactic {return GALACTIC_;}
+green {return GREEN_;}
+helioecliptic {return HELIOECLIPTIC_;}
+hms {return HMS_;}
+icrs {return ICRS_;}
+j2000 {return J2000_;}
+lin[e] {return LINE_;}
+magenta {return MAGENTA_;}
+off {return OFF_;}
+on {return ON_;}
+physical {return PHYSICAL_;}
+pixels {return PIXELS_;}
+point {return POINT_;}
+polygon {return POLYGON_;}
+red {return RED_;}
+source {return SOURCE_;}
+supergalactic {return SUPERGALACTIC_;}
+text {return TEXT_;}
+version {return VERSION_;}
+white {return WHITE_;}
+yellow {return YELLOW_;}
+
+[+-]?{D}+ { // Integer
+ tnglval->integer = atoi(yytext);
+ return INT;
+ }
+
+[+-]?{D}+"."?({E})? |
+[+-]?{D}*"."{D}+({E})? { // Real Number
+ tnglval->real = atof(yytext);
+ return REAL;
+ }
+
+[+-]?{D}+"."?d |
+[+-]?{D}*"."{D}+d { // degrees
+ yytext[yyleng-1] = '\0';
+ tnglval->real = atof(yytext);
+ return ANGDEGREE;
+ }
+
+[+-]?{D}+:{D}+:{D}+"."? |
+[+-]?{D}+:{D}+:{D}*"."{D}+ { // Sexagesimal
+ int ll = yyleng <(TNGBUFSIZE-1)?yyleng:(TNGBUFSIZE-1);
+ strncpy(tnglval->str,yytext,ll);
+ tnglval->str[ll] = '\0';
+ return SEXSTR;
+ }
+
+\"[^\"\n]*\" |
+\'[^\'\n]*\' { // Quoted String
+ int ll = (yyleng-2)<(TNGBUFSIZE-1)?(yyleng-2):(TNGBUFSIZE-1);
+ strncpy(tnglval->str,yytext+1,yyleng-2); // skip the " "
+ tnglval->str[ll] = '\0'; // Remove the '"'
+ return STRING;
+ }
+
+\{[^\}\n]*\} { // Quoted String
+ int ll = (yyleng-2)<(TNGBUFSIZE-1)?(yyleng-2):(TNGBUFSIZE-1);
+ strncpy(tnglval->str,yytext+1,yyleng-2); // skip the '{'
+ tnglval->str[ll] = '\0'; // Remove the '}'
+ return STRING;
+ }
+
+[0-9A-Za-z]+ { // General String
+ int ll = yyleng <(TNGBUFSIZE-1) ? yyleng:(TNGBUFSIZE-1);
+ strncpy(tnglval->str,yytext,ll);
+ tnglval->str[ll] = '\0';
+ return STRING;
+ }
+
+[ \t]+ { // White Spaces
+ }
+
+\r\n { // windows line feed
+ return '\n';
+ }
+
+\\n { // fake line feed
+ return '\n';
+ }
+
+\n { // linefeed
+ return '\n';
+ }
+
+<<EOF>> { // eof
+ return EOF_;
+ }
+
+. { // Else, return the char
+ return yytext[0];
+ }
+
+%%
+
+void tngDiscard(int doit)
+{
+ if (tnglexx)
+ tnglexx->begin(DISCARD, doit);
+}
+
+void tngFlexLexer::begin(int which, int doit)
+{
+ BEGIN which;
+ if (doit)
+ yyless(0);
+}