source: trunk/orbital/mesh-scanner.l @ 1428

Last change on this file since 1428 was 1428, checked in by sam, 9 years ago

orbital: allow hexadecimal colour values.

File size: 2.9 KB
Line 
1%{
2//
3// Orbital
4//
5// Copyright: (c) 2009-2012 Cédric Lecacheur <jordx@free.fr>
6//            (c) 2009-2012 Benjamin Huet <huet.benjamin@gmail.com>
7//            (c) 2012 Sam Hocevar <sam@hocevar.net>
8//
9
10#if defined HAVE_CONFIG_H
11#   include "config.h"
12#endif
13
14#include "core.h"
15#include "loldebug.h"
16
17using namespace lol;
18
19#include "../mesh-compiler.h"
20
21typedef orbital::MeshParser::token token;
22typedef orbital::MeshParser::token_type token_type;
23
24#ifndef YY_DECL
25#   define YY_DECL orbital::MeshParser::token_type \
26        orbital::MeshScanner::lex(orbital::MeshParser::semantic_type* yylval, \
27                                  orbital::MeshParser::location_type* yylloc)
28#endif
29
30#define yyterminate() return token::T_END
31#define YY_NO_UNISTD_H
32#define YY_USER_ACTION yylloc->columns(yyleng);
33%}
34
35%option c++ prefix="Mesh"
36%option batch yywrap nounput stack
37
38%%
39
40%{
41    /* reset location at the beginning of yylex() */
42    yylloc->step();
43%}
44
45fl    { return token::T_FLUSH; }
46irb   { return token::T_INITRB; }
47frb   { return token::T_FREERB; }
48
49sc    { return token::T_COLOR; }
50scb   { return token::T_BGCOLOR; }
51
52tx    { return token::T_TRANSLATEX; }
53ty    { return token::T_TRANSLATEY; }
54tz    { return token::T_TRANSLATEZ; }
55t     { return token::T_TRANSLATE; }
56rx    { return token::T_ROTATEX; }
57ry    { return token::T_ROTATEY; }
58rz    { return token::T_ROTATEZ; }
59tax   { return token::T_TAPERX; }
60tay   { return token::T_TAPERY; }
61taz   { return token::T_TAPERZ; }
62sx    { return token::T_SCALEX; }
63sy    { return token::T_SCALEY; }
64sz    { return token::T_SCALEZ; }
65s     { return token::T_SCALE; }
66mx    { return token::T_MIRRORX; }
67my    { return token::T_MIRRORY; }
68mz    { return token::T_MIRRORZ; }
69
70ac    { return token::T_CYLINDER; }
71ab    { return token::T_BOX; }
72ascb  { return token::T_SMOOTHCHAMFBOX; }
73afcb  { return token::T_FLATCHAMFBOX; }
74asph  { return token::T_SPHERE; }
75as    { return token::T_STAR; }
76aes   { return token::T_EXPANDEDSTAR; }
77ad    { return token::T_DISC; }
78at    { return token::T_TRIANGLE; }
79aq    { return token::T_QUAD; }
80acg   { return token::T_COG; }
81
82#[0-9a-f]{4} {
83        char buf[] = "0x____";
84        sprintf(buf + 2, "%s", yytext + 1);
85        yylval->fval = atof(buf);
86        return token::COLOR;
87      }
88[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)? {
89        yylval->fval = atof(yytext); return token::NUMBER; }
90-     { return token_type('-'); }
91,     { return token_type(','); }
92[.\n] { /* ignore everything else */ }
93
94%%
95
96orbital::MeshScanner::MeshScanner(char const *command)
97    : MeshFlexLexer(0, 0),
98      m_input(command)
99{
100}
101
102orbital::MeshScanner::~MeshScanner()
103{
104}
105
106int orbital::MeshScanner::LexerInput(char* buf, int max_size)
107{
108    buf[0] = m_input[0];
109    if (buf[0])
110        ++m_input;
111    return buf[0] ? 1 : 0;
112}
113
114#ifdef yylex
115#undef yylex
116#endif
117int MeshFlexLexer::yylex()
118{
119    std::cerr << "in MeshFlexLexer::yylex() !" << std::endl;
120    return 0;
121}
122
123int MeshFlexLexer::yywrap()
124{
125    return 1;
126}
127
Note: See TracBrowser for help on using the repository browser.