summaryrefslogtreecommitdiffstats
path: root/lexer/theme-lexer.l
diff options
context:
space:
mode:
authorDave Davenport <DaveDavenport@users.noreply.github.com>2019-09-20 15:05:36 +0200
committerGitHub <noreply@github.com>2019-09-20 15:05:36 +0200
commit7c613f6a4ca4354165e2cab987d0db1e7ce32c5a (patch)
tree7cede72023c550462342a9eb13123580a6e5ddaa /lexer/theme-lexer.l
parentf28cf0207e7641890617e8b946977dc204e05ce2 (diff)
Issue893: Add support for @media in the theme format. (#1015)
* [Lexer] Add support for @media. Issue: #893 * [Theme] @media limit to px. * [Theme@Media] add *{} support. * [Theme@Media] Add support for monitor-id media. * [Theme@Media] Code cleanup. * [Theme@Media] Add min/max-aspect-ratio. * [Theme@Media] Remove some debug output Fixes: #893
Diffstat (limited to 'lexer/theme-lexer.l')
-rw-r--r--lexer/theme-lexer.l64
1 files changed, 60 insertions, 4 deletions
diff --git a/lexer/theme-lexer.l b/lexer/theme-lexer.l
index 4ebeff7f..50a2c4e7 100644
--- a/lexer/theme-lexer.l
+++ b/lexer/theme-lexer.l
@@ -239,6 +239,8 @@ C_COMMENT_OPEN "/*"
INCLUDE "@import"
THEME "@theme"
+MEDIA "@media"
+
CONFIGURATION (?i:configuration)
%x INCLUDE
@@ -250,6 +252,8 @@ CONFIGURATION (?i:configuration)
%x NAMESTR
%x SECTION
%x DEFAULTS
+%x MEDIA
+%x MEDIA_CONTENT
%%
%{
@@ -424,13 +428,13 @@ if ( queue == NULL ){
/* After Namestr/Classstr we want to go to state str, then to { */
<INITIAL,SECTION>{WHITESPACE}+ ; // ignore all whitespace
-<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT,PROPERTIES_LIST,PROPERTIES_VAR>{WHITESPACE}+ ; // ignore all whitespace
+<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT,PROPERTIES_LIST,PROPERTIES_VAR,MEDIA_CONTENT>{WHITESPACE}+ ; // ignore all whitespace
<SECTION>":" { g_queue_push_head ( queue, GINT_TO_POINTER (YY_START) ); BEGIN(PROPERTIES); return T_PSEP; }
<PROPERTIES>";" { BEGIN(GPOINTER_TO_INT ( g_queue_pop_head ( queue ))); return T_PCLOSE;}
<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>(true|false) { yylval->bval= g_strcmp0(yytext, "true") == 0; return T_BOOLEAN;}
-<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{PNNUMBER}\.{NUMBER}+ { yylval->fval = g_ascii_strtod(yytext, NULL); return T_DOUBLE;}
-<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{PNNUMBER} { yylval->ival = (int)g_ascii_strtoll(yytext, NULL, 10); return T_INT;}
+<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT,MEDIA_CONTENT>{PNNUMBER}\.{NUMBER}+ { yylval->fval = g_ascii_strtod(yytext, NULL); return T_DOUBLE;}
+<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT,MEDIA_CONTENT>{PNNUMBER} { yylval->ival = (int)g_ascii_strtoll(yytext, NULL, 10); return T_INT;}
<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{STRING} { yytext[yyleng-1] = '\0'; yylval->sval = g_strcompress(&yytext[1]); return T_STRING;}
<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>@{WORD} {
@@ -440,7 +444,7 @@ if ( queue == NULL ){
<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{EM} { return T_UNIT_EM; }
<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{CH} { return T_UNIT_CH; }
-<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{PX} { return T_UNIT_PX; }
+<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT,MEDIA_CONTENT>{PX} { return T_UNIT_PX; }
<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{PERCENT} { return T_PERCENT; }
<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{LS_SOLID} { return T_SOLID; }
<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{LS_DASH} { return T_DASH; }
@@ -619,6 +623,50 @@ if ( queue == NULL ){
yylloc->last_line ++;
};
+
+<INITIAL>{MEDIA} {
+ g_queue_push_head ( queue, GINT_TO_POINTER (YY_START) );
+ BEGIN(MEDIA);
+ return T_MEDIA;
+}
+
+<MEDIA>{S_T_PARENT_LEFT} {
+ g_queue_push_head ( queue, GINT_TO_POINTER (YY_START) );
+ BEGIN(MEDIA_CONTENT);
+ return T_PARENT_LEFT;
+}
+<MEDIA_CONTENT>{WORD} {
+ yylval->sval = g_strdup(yytext);
+ return T_STRING;
+}
+<MEDIA_CONTENT>":" {
+ return T_PSEP;
+}
+<MEDIA_CONTENT>{S_T_PARENT_RIGHT} {
+ int id = GPOINTER_TO_INT(g_queue_pop_head ( queue ));
+ BEGIN(id);
+ return T_PARENT_RIGHT;
+}
+<MEDIA>"\{" {
+ g_queue_push_head ( queue, GINT_TO_POINTER (YY_START) );
+ BEGIN(INITIAL);
+ return T_BOPEN;
+}
+
+<INITIAL>"\}" {
+ g_queue_pop_head ( queue );
+ BEGIN(GPOINTER_TO_INT(g_queue_pop_head ( queue )));
+ return T_BCLOSE;
+}
+<MEDIA>{WHITESPACE}+ ; // ignore all whitespace
+
+
+<MEDIA,MEDIA_CONTENT>. {
+ yytext[yyleng-1] = '\0';
+ fprintf(stderr,"found: |%s|\n", yytext);
+ return T_ERROR;
+}
+
/**
* If we just encounter a word, we assume it is a Widget name.
* This makes include,theme, configuration a reserved keyword.
@@ -630,9 +678,13 @@ if ( queue == NULL ){
return T_NAME_ELEMENT;
}
<INITIAL>. {
+ yytext[yyleng-1] = '\0';
+ fprintf(stderr,"initial found: |%s|\n", yytext);
return T_ERROR;
}
<SECTION>. {
+ yytext[yyleng-1] = '\0';
+ fprintf(stderr,"section found: |%s|\n", yytext);
return T_ERROR_SECTION;
}
<PROPERTIES_LIST,PROPERTIES_VAR>{WORD} {
@@ -646,9 +698,13 @@ if ( queue == NULL ){
}
<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT,PROPERTIES_LIST>. {
+ yytext[yyleng-1] = '\0';
+ fprintf(stderr,"prop found: |%s|\n", yytext);
return T_ERROR_PROPERTY;
}
<NAMESTR>. {
+ yytext[yyleng-1] = '\0';
+ fprintf(stderr,"namestr found: |%s|\n", yytext);
return T_ERROR_NAMESTRING;
}
%%