/***********************************************************************
* This file is part of SpaceChart.
* Copyright (C) 2001 Miguel Coca <e970095@zipi.fi.upm.es>
*
* 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;
}
syntax highlighted by Code2HTML, v. 0.9.1