keymap-dump: use consistent order set/latch/lock (style)
[platform/upstream/libxkbcommon.git] / src / xkbcomp / scanner.c
index 4e7d70b..1ce6137 100644 (file)
 #include "parser-priv.h"
 #include "scanner-utils.h"
 
-static void
-scanner_log(enum xkb_log_level level, struct scanner *s, const char *msg)
-{
-    xkb_log_cond_level(s->ctx, level, "%s:%d:%d: %s\n", s->file_name,
-                       s->token_line, s->token_column, msg);
-}
-
-int
-scanner_error(struct scanner *s, const char *msg)
-{
-    scanner_log(XKB_LOG_LEVEL_ERROR, s, msg);
-    return ERROR_TOK;
-}
-
-void
-scanner_warn(struct scanner *s, const char *msg)
-{
-    scanner_log(XKB_LOG_LEVEL_WARNING, s, msg);
-}
-
 static bool
 number(struct scanner *s, int64_t *out, int *out_tok)
 {
@@ -89,7 +69,7 @@ skip_more_whitespace_and_comments:
 
     /* Skip comments. */
     if (lit(s, "//") || chr(s, '#')) {
-        while (!eof(s) && !eol(s)) next(s);
+        skip_to_eol(s);
         goto skip_more_whitespace_and_comments;
     }
 
@@ -123,11 +103,13 @@ skip_more_whitespace_and_comments:
                 buf_append(s, next(s));
             }
         }
-        if (!buf_append(s, '\0') || !chr(s, '\"'))
-            return scanner_error(s, "unterminated string literal");
+        if (!buf_append(s, '\0') || !chr(s, '\"')) {
+            scanner_err(s, "unterminated string literal");
+            return ERROR_TOK;
+        }
         yylval->str = strdup(s->buf);
         if (!yylval->str)
-            return scanner_error(s, "scanner out of memory");
+            return ERROR_TOK;
         return STRING;
     }
 
@@ -135,10 +117,12 @@ skip_more_whitespace_and_comments:
     if (chr(s, '<')) {
         while (is_graph(peek(s)) && peek(s) != '>')
             buf_append(s, next(s));
-        if (!buf_append(s, '\0') || !chr(s, '>'))
-            return scanner_error(s, "unterminated key name literal");
+        if (!buf_append(s, '\0') || !chr(s, '>')) {
+            scanner_err(s, "unterminated key name literal");
+            return ERROR_TOK;
+        }
         /* Empty key name literals are allowed. */
-        yylval->sval = xkb_atom_intern(s->ctx, s->buf, s->buf_pos - 1);
+        yylval->atom = xkb_atom_intern(s->ctx, s->buf, s->buf_pos - 1);
         return KEYNAME;
     }
 
@@ -156,6 +140,7 @@ skip_more_whitespace_and_comments:
     if (chr(s, '+')) return PLUS;
     if (chr(s, '-')) return MINUS;
     if (chr(s, '*')) return TIMES;
+    if (chr(s, '/')) return DIVIDE;
     if (chr(s, '!')) return EXCLAM;
     if (chr(s, '~')) return INVERT;
 
@@ -164,27 +149,32 @@ skip_more_whitespace_and_comments:
         s->buf_pos = 0;
         while (is_alnum(peek(s)) || peek(s) == '_')
             buf_append(s, next(s));
-        if (!buf_append(s, '\0'))
-            return scanner_error(s, "identifier too long");
+        if (!buf_append(s, '\0')) {
+            scanner_err(s, "identifier too long");
+            return ERROR_TOK;
+        }
 
         /* Keyword. */
-        tok = keyword_to_token(s->buf);
+        tok = keyword_to_token(s->buf, s->buf_pos - 1);
         if (tok != -1) return tok;
 
         yylval->str = strdup(s->buf);
         if (!yylval->str)
-            return scanner_error(s, "scanner out of memory");
+            return ERROR_TOK;
         return IDENT;
     }
 
     /* Number literal (hexadecimal / decimal / float). */
     if (number(s, &yylval->num, &tok)) {
-        if (tok == ERROR_TOK)
-            return scanner_error(s, "malformed number literal");
+        if (tok == ERROR_TOK) {
+            scanner_err(s, "malformed number literal");
+            return ERROR_TOK;
+        }
         return tok;
     }
 
-    return scanner_error(s, "unrecognized token");
+    scanner_err(s, "unrecognized token");
+    return ERROR_TOK;
 }
 
 XkbFile *
@@ -192,7 +182,7 @@ XkbParseString(struct xkb_context *ctx, const char *string, size_t len,
                const char *file_name, const char *map)
 {
     struct scanner scanner;
-    scanner_init(&scanner, ctx, string, len, file_name);
+    scanner_init(&scanner, ctx, string, len, file_name, NULL);
     return parse(ctx, &scanner, map);
 }
 
@@ -202,7 +192,7 @@ XkbParseFile(struct xkb_context *ctx, FILE *file,
 {
     bool ok;
     XkbFile *xkb_file;
-    const char *string;
+    char *string;
     size_t size;
 
     ok = map_file(file, &string, &size);