/*********************************************************************** * This file is part of SpaceChart. * Copyright (C) 2001 Miguel Coca * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ***********************************************************************/ %{ #include "../include/starmap.h" #include "../include/star.h" #include "../include/star_selection.h" #include "rcparser_y.h" static void is_in_list( char class, const char *list, int *is ); %} %option yylineno %% #.*\n [ \t\r]+ \\\n /* Keybinding stuff */ \'.\' { yylval.key_press.mods = 0; yylval.key_press.key = yytext[1]; return KEY; } Ctrl { yylval.key_press.mods = GDK_CONTROL_MASK; return KEY_MOD; } Alt { yylval.key_press.mods = GDK_MOD1_MASK; return KEY_MOD; } Shift { yylval.key_press.mods = GDK_SHIFT_MASK; return KEY_MOD; } Escape { yylval.key_press.mods = 0; yylval.key_press.key = GDK_Escape; return KEY; } F1 { yylval.key_press.mods = 0; yylval.key_press.key = GDK_F1; return KEY; } F2 { yylval.key_press.mods = 0; yylval.key_press.key = GDK_F2; return KEY; } F3 { yylval.key_press.mods = 0; yylval.key_press.key = GDK_F3; return KEY; } F4 { yylval.key_press.mods = 0; yylval.key_press.key = GDK_F4; return KEY; } F5 { yylval.key_press.mods = 0; yylval.key_press.key = GDK_F5; return KEY; } F6 { yylval.key_press.mods = 0; yylval.key_press.key = GDK_F6; return KEY; } F7 { yylval.key_press.mods = 0; yylval.key_press.key = GDK_F7; return KEY; } F8 { yylval.key_press.mods = 0; yylval.key_press.key = GDK_F8; return KEY; } F9 { yylval.key_press.mods = 0; yylval.key_press.key = GDK_F9; return KEY; } F10 { yylval.key_press.mods = 0; yylval.key_press.key = GDK_F10; return KEY; } F11 { yylval.key_press.mods = 0; yylval.key_press.key = GDK_F11; return KEY; } F12 { yylval.key_press.mods = 0; yylval.key_press.key = GDK_F12; return KEY; } Return { yylval.key_press.mods = 0; yylval.key_press.key = GDK_Return; return KEY; } Page_Up { yylval.key_press.mods = 0; yylval.key_press.key = GDK_Page_Up; return KEY; } Page_Down { yylval.key_press.mods = 0; yylval.key_press.key = GDK_Page_Down; return KEY; } Insert { yylval.key_press.mods = 0; yylval.key_press.key = GDK_Insert; return KEY; } Home { yylval.key_press.mods = 0; yylval.key_press.key = GDK_Home; return KEY; } End { yylval.key_press.mods = 0; yylval.key_press.key = GDK_End; return KEY; } MoveUp { yylval.key_name = KEY_MOVE_UP; return KEYNAME; } MoveDown { yylval.key_name = KEY_MOVE_DOWN; return KEYNAME; } MoveLeft { yylval.key_name = KEY_MOVE_LEFT; return KEYNAME; } MoveRight { yylval.key_name = KEY_MOVE_RIGHT; return KEYNAME; } MoveFront { yylval.key_name = KEY_MOVE_FRONT; return KEYNAME; } MoveRear { yylval.key_name = KEY_MOVE_REAR; return KEYNAME; } LoadSettings { yylval.key_name = KEY_LOAD_SETTINGS; return KEYNAME; } SaveSettings { yylval.key_name = KEY_SAVE_SETTINGS; return KEYNAME; } RotateUp { yylval.key_name = KEY_ROT_UP; return KEYNAME; } RotateDown { yylval.key_name = KEY_ROT_DOWN; return KEYNAME; } RotateLeft { yylval.key_name = KEY_ROT_LEFT; return KEYNAME; } RotateRight { yylval.key_name = KEY_ROT_RIGHT; return KEYNAME; } OpenSettings { yylval.key_name = KEY_SETTINGS; return KEYNAME; } OpenStarSelection { yylval.key_name = KEY_STAR_SEL; return KEYNAME; } ToggleLinks { yylval.key_name = KEY_TOGGLE_LINKS; return KEYNAME; } ToggleLinkLabels { yylval.key_name = KEY_TOGGLE_LINK_LABELS; return KEYNAME; } ToggleStarLabels { yylval.key_name = KEY_TOGGLE_STAR_LABELS; return KEYNAME; } ReloadSettings { yylval.key_name = KEY_RELOAD_SETTINGS; return KEYNAME; } /* Everything else */ catalog return CATALOG; user_coords return USER_COORDS; north return NORTH; center return CENTER; view_radius return VIEW_RADIUS; max_link return MAX_LINK; show_links return SHOW_LINKS; show_link_labels return SHOW_LINK_LABELS; show_star_labels return SHOW_STAR_LABELS; labels_color return LABELS_COLOR; labels_font return LABELS_FONT; distance_unit return DISTANCE_UNIT; star_selection return STAR_SELECTION; star_rules return STAR_RULES; link_rules return LINK_RULES; pc { yylval.unit = DISTANCE_PARSECS; return UNIT; } ly { yylval.unit = DISTANCE_LIGHT_YEARS; return UNIT; } solid { yylval.style = GDK_LINE_SOLID; return STYLE; } dashed { yylval.style = GDK_LINE_DOUBLE_DASH; return STYLE; } [0-9]+|[0-9]*\.[0-9]+ { char *locale; locale = setlocale( LC_NUMERIC, "C" ); yylval.number = atof(yytext); setlocale( LC_NUMERIC, locale ); return NUM; } true { yylval.bool = 1; return BOOL; } false { yylval.bool = 0; return BOOL; } \[[OBAFGKMW]+\] { is_in_list( 'O', yytext, &(yylval.spectral_class_list.O) ); is_in_list( 'B', yytext, &(yylval.spectral_class_list.B) ); is_in_list( 'A', yytext, &(yylval.spectral_class_list.A) ); is_in_list( 'F', yytext, &(yylval.spectral_class_list.F) ); is_in_list( 'G', yytext, &(yylval.spectral_class_list.G) ); is_in_list( 'K', yytext, &(yylval.spectral_class_list.K) ); is_in_list( 'M', yytext, &(yylval.spectral_class_list.M) ); is_in_list( 'W', yytext, &(yylval.spectral_class_list.W) ); return SPECTRAL_CLASS_LIST; } \".*\" { int length; length = strlen(yytext); yylval.string = malloc( length-1 ); strncpy( yylval.string, yytext+1, length-2 ); yylval.string[length-2] = '\0'; return STRING; } \n return '\n'; . return yytext[0]; %% int yywrap( void ) { return 1; } int rcparser_init_lex( const char *filename ) { return (int) (yyin = fopen( filename, "r" )); } void is_in_list( char class, const char *list, int *is ) { int i; *is = 0; for( i = 0; list[i]; i++ ) if( list[i] == class ) *is = 1; }