summaryrefslogtreecommitdiff
path: root/src/lexer.l
diff options
context:
space:
mode:
authorclifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c>2010-02-27 22:30:36 (GMT)
committerclifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c>2010-02-27 22:30:36 (GMT)
commit955de4aa1b2100b8f9d0c9bd407d1cd127ed2212 (patch)
treed742bccb0cafe4590a8f2272268b38eba7af4e45 /src/lexer.l
parent738174847a7d78cba9c2b7eb6fb485da945363f1 (diff)
Clifford Wolf:
Added include<...> statement Prepared use<...> statement git-svn-id: http://svn.clifford.at/openscad/trunk@457 b57f626f-c46c-0410-a088-ec61d464b74c
Diffstat (limited to 'src/lexer.l')
-rw-r--r--src/lexer.l29
1 files changed, 28 insertions, 1 deletions
diff --git a/src/lexer.l b/src/lexer.l
index 5a5c0e9..24ec83b 100644
--- a/src/lexer.l
+++ b/src/lexer.l
@@ -67,7 +67,33 @@ extern const char *parser_source_path;
%%
-"<"[^ \t\n>]+">" {
+include[ \t\r\n>]*"<"[^ \t\r\n>]+">" {
+ QString filename(yytext);
+ filename.remove(QRegExp("^include[ \t\r\n>]*<"));
+ filename.remove(QRegExp(">$"));
+ QFileInfo finfo(QDir(parser_source_path), filename);
+ if (!finfo.exists()) {
+ finfo = QFileInfo(QDir(librarydir), filename);
+ }
+ handle_dep(finfo.absoluteFilePath());
+ yyin = fopen(finfo.absoluteFilePath().toLocal8Bit(), "r");
+ if (!yyin) {
+ PRINTA("WARNING: Can't open input file `%1'.", filename);
+ } else {
+ yypush_buffer_state(yy_create_buffer( yyin, YY_BUF_SIZE ));
+ BEGIN(INITIAL);
+ }
+}
+
+use[ \t\r\n>]*"<"[^ \t\r\n>]+">" {
+ QString filename(yytext);
+ filename.remove(QRegExp("^use[ \t\r\n>]*<"));
+ filename.remove(QRegExp(">$"));
+ parserlval.text = strdup(filename.toLocal8Bit());
+ return TOK_USE;
+}
+
+"<"[^ \t\r\n>]+">" {
char *filename = strdup(yytext+1);
filename[strlen(filename)-1] = 0;
QFileInfo finfo(QDir(parser_source_path), filename);
@@ -75,6 +101,7 @@ extern const char *parser_source_path;
finfo = QFileInfo(QDir(librarydir), filename);
}
+ PRINTF("WARNING: The use of implicit include is depricated. Use `include <filename>' instead.");
handle_dep(finfo.absoluteFilePath());
yyin = fopen(finfo.absoluteFilePath().toLocal8Bit(), "r");
if (!yyin) {
contact: Jan Huwald // Impressum