%option nounput %option yylineno %{ // // tikzparser.l // TikZiT // // Copyright 2010 Chris Heunen. All rights reserved. // // // This file is part of TikZiT. // // TikZiT 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 3 of the License, or // (at your option) any later version. // // TikZiT 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 TikZiT. If not, see . // #import #ifdef __APPLE__ #include "y.tab.h" #else #include "tikzparser.h" #endif extern char linebuff[500]; extern int lineno; extern int tokenpos; %} %% %\n /* ignore end of line */; \n.* { strncpy(linebuff, yytext+1, 500); linebuff[499] = 0; // ensure null-terminated lineno++; tokenpos = 0; yyless(1); } [ ]+ { tokenpos += yyleng; } /* ignore whitespace */; [\t]+ { tokenpos += 4*yyleng; } /* ignore whitespace */; \\begin { tokenpos += yyleng; return LATEXBEGIN; } \\end { tokenpos += yyleng; return LATEXEND; } \{tikzpicture\} { tokenpos += yyleng; return TIKZPICTURE; } \{pgfonlayer\} { tokenpos += yyleng; return PGFONLAYER; } \( { tokenpos += yyleng; return LEFTPARENTHESIS; } \) { tokenpos += yyleng; return RIGHTPARENTHESIS; } \[ { tokenpos += yyleng; return LEFTBRACKET; } \] { tokenpos += yyleng; return RIGHTBRACKET; } ; { tokenpos += yyleng; return SEMICOLON; } , { tokenpos += yyleng; return COMMA; } \. { tokenpos += yyleng; return FULLSTOP; } = { tokenpos += yyleng; return EQUALS; } \\draw { tokenpos += yyleng; return DRAW; } to { tokenpos += yyleng; return TO; } \\node { tokenpos += yyleng; return NODE; } \\path { tokenpos += yyleng; return PATH; } node { tokenpos += yyleng; return ALTNODE; } rectangle { tokenpos += yyleng; return RECTANGLE; } at { tokenpos += yyleng; return AT; } [0-9]+ { tokenpos += yyleng; yylval.nsstr=[NSString stringWithUTF8String:yytext]; return NATURALNUMBER; } (\-?[0-9]*\.[0-9]+)|(\-?[0-9]+) { tokenpos += yyleng; yylval.nsstr=[NSString stringWithUTF8String:yytext]; return REALNUMBER; } \\?[a-zA-Z<>\-\'][a-zA-Z<>\-\'0-9]* { //' tokenpos += yyleng; yylval.nsstr=[NSString stringWithUTF8String:yytext]; return LWORD; } \{ { NSMutableString *buf = [NSMutableString string]; unsigned int brace_depth = 1; unsigned int escape = 0; while (1) { char c = input(); // eof reached before closing brace if (c == '\0' || c == EOF) yyterminate(); if (escape) { escape = 0; } else if (c == '\\') { escape = 1; } else if (c == '{') { brace_depth++; } else if (c == '}') { brace_depth--; if (brace_depth == 0) break; } [buf appendFormat:@"%c", c]; } NSString *s = [buf copy]; yyleng += 1 + [buf length]; [s autorelease]; yylval.nsstr = s; tokenpos += yyleng; return DELIMITEDSTRING; } /* vi:ft=lex:noet:ts=4:sts=4:sw=4: */