diff options
author | Benjamin Otte <otte@redhat.com> | 2019-03-23 03:27:56 +0100 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2019-04-12 19:34:28 +0200 |
commit | 32e256e5abaa359ddb2a533e09921511ccc5d285 (patch) | |
tree | 7c7e0ed5453b012cb2418fcb2d335c96ae7ac9c3 /gtk/css | |
parent | d4d46e812548a59a7280024d59b9aff79247fef3 (diff) | |
download | gtk+-32e256e5abaa359ddb2a533e09921511ccc5d285.tar.gz |
css: Split GtkCssLocation into its own file
And make the struct public, so we can use it in signal handlers.
Diffstat (limited to 'gtk/css')
-rw-r--r-- | gtk/css/gtkcss.h | 1 | ||||
-rw-r--r-- | gtk/css/gtkcsslocation.c | 74 | ||||
-rw-r--r-- | gtk/css/gtkcsslocation.h | 43 | ||||
-rw-r--r-- | gtk/css/gtkcsslocationprivate.h | 39 | ||||
-rw-r--r-- | gtk/css/gtkcsstokenizer.c | 30 | ||||
-rw-r--r-- | gtk/css/gtkcsstokenizerprivate.h | 12 | ||||
-rw-r--r-- | gtk/css/meson.build | 2 |
7 files changed, 162 insertions, 39 deletions
diff --git a/gtk/css/gtkcss.h b/gtk/css/gtkcss.h index c68e6a45fe..343244c2c3 100644 --- a/gtk/css/gtkcss.h +++ b/gtk/css/gtkcss.h @@ -33,6 +33,7 @@ #include <gtk/css/gtkcssenums.h> #include <gtk/css/gtkcssenumtypes.h> #include <gtk/css/gtkcsserror.h> +#include <gtk/css/gtkcsslocation.h> #undef __GTK_CSS_H_INSIDE__ diff --git a/gtk/css/gtkcsslocation.c b/gtk/css/gtkcsslocation.c new file mode 100644 index 0000000000..4f47501b0b --- /dev/null +++ b/gtk/css/gtkcsslocation.c @@ -0,0 +1,74 @@ +/* GSK - The GIMP Toolkit + * Copyright (C) 2019 Benjamin Otte <otte@gnome.org> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "config.h" + +#include "gtkcsslocationprivate.h" + +/** + * GtkCssLocation: + * @bytes: number of bytes parsed since the beginning + * @chars: number of characters parsed since the beginning + * @lines: number of full lines that have been parsed + * If you want to display this as a line number, you + * need to add 1 to this. + * @line_bytes: Number of bytes parsed since the last line break + * @line_chars: Number of characters parsed since the last line + * break + * + * @GtkCssLocation is used to present a location in a file - or other + * source of data parsed by the CSS engine. + * + * The @bytes and @line_bytes offsets are meant to be used to + * programmatically match data. The @lines and @line_chars offsets + * can be used for printing the location in a file. + * + * Note that the @lines parameter starts from 0 and is increased + * whenever a CSS line break is encountered. (CSS defines the C character + * sequences "\r\n", "\r", "\n" and "\f" as newlines.) + * If your document uses different rules for line breaking, you might want + * run into problems here. + */ + +void +gtk_css_location_init (GtkCssLocation *location) +{ + memset (location, 0, sizeof (GtkCssLocation)); +} + +void +gtk_css_location_advance (GtkCssLocation *location, + gsize bytes, + gsize chars) +{ + location->bytes += bytes; + location->chars += chars; + location->line_bytes += bytes; + location->line_chars += chars; +} + +void +gtk_css_location_advance_newline (GtkCssLocation *location, + gboolean is_windows) +{ + gtk_css_location_advance (location, is_windows ? 2 : 1, is_windows ? 2 : 1); + + location->lines++; + location->line_bytes = 0; + location->line_chars = 0; +} + diff --git a/gtk/css/gtkcsslocation.h b/gtk/css/gtkcsslocation.h new file mode 100644 index 0000000000..f1ea3db50f --- /dev/null +++ b/gtk/css/gtkcsslocation.h @@ -0,0 +1,43 @@ +/* GSK - The GIMP Toolkit + * Copyright (C) 2011 Benjamin Otte <otte@gnome.org> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef __GTK_CSS_LOCATION_H__ +#define __GTK_CSS_LOCATION_H__ + +#if !defined (__GTK_CSS_H_INSIDE__) && !defined (GTK_CSS_COMPILATION) +#error "Only <gtk/css/gtkcss.h> can be included directly." +#endif + +#include <glib.h> + +G_BEGIN_DECLS + +typedef struct _GtkCssLocation GtkCssLocation; + +struct _GtkCssLocation +{ + gsize bytes; + gsize chars; + gsize lines; + gsize line_bytes; + gsize line_chars; +}; + + +G_END_DECLS + +#endif /* __GTK_CSS_LOCATION_H__ */ diff --git a/gtk/css/gtkcsslocationprivate.h b/gtk/css/gtkcsslocationprivate.h new file mode 100644 index 0000000000..46ed3c8056 --- /dev/null +++ b/gtk/css/gtkcsslocationprivate.h @@ -0,0 +1,39 @@ +/* + * Copyright © 2019 Benjamin Otte + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see <http://www.gnu.org/licenses/>. + * + * Authors: Benjamin Otte <otte@gnome.org> + */ + + +#ifndef __GTK_CSS_LOCATION_PRIVATE_H__ +#define __GTK_CSS_LOCATION_PRIVATE_H__ + +#include "gtkcsslocation.h" + +G_BEGIN_DECLS + +void gtk_css_location_init (GtkCssLocation *location); + +void gtk_css_location_advance (GtkCssLocation *location, + gsize bytes, + gsize chars); +void gtk_css_location_advance_newline (GtkCssLocation *location, + gboolean is_windows); + +G_END_DECLS + +#endif /* __GTK_CSS_LOCATION_PRIVATE_H__ */ + diff --git a/gtk/css/gtkcsstokenizer.c b/gtk/css/gtkcsstokenizer.c index 57cf6339a8..b956c86504 100644 --- a/gtk/css/gtkcsstokenizer.c +++ b/gtk/css/gtkcsstokenizer.c @@ -19,9 +19,9 @@ #include "gtkcsstokenizerprivate.h" -/* for error enum */ #include "gtkcssenums.h" #include "gtkcsserror.h" +#include "gtkcsslocationprivate.h" #include <math.h> #include <string.h> @@ -37,34 +37,6 @@ struct _GtkCssTokenizer GtkCssLocation position; }; -static void -gtk_css_location_init (GtkCssLocation *location) -{ - memset (location, 0, sizeof (GtkCssLocation)); -} - -static void -gtk_css_location_advance (GtkCssLocation *location, - gsize bytes, - gsize chars) -{ - location->bytes += bytes; - location->chars += chars; - location->line_bytes += bytes; - location->line_chars += chars; -} - -static void -gtk_css_location_advance_newline (GtkCssLocation *location, - gboolean is_windows) -{ - gtk_css_location_advance (location, is_windows ? 2 : 1, is_windows ? 2 : 1); - - location->lines++; - location->line_bytes = 0; - location->line_chars = 0; -} - void gtk_css_token_clear (GtkCssToken *token) { diff --git a/gtk/css/gtkcsstokenizerprivate.h b/gtk/css/gtkcsstokenizerprivate.h index 6adb492d37..8119da28e9 100644 --- a/gtk/css/gtkcsstokenizerprivate.h +++ b/gtk/css/gtkcsstokenizerprivate.h @@ -20,6 +20,8 @@ #include <glib.h> +#include <gtk/css/gtkcsslocation.h> + G_BEGIN_DECLS typedef enum { @@ -70,7 +72,6 @@ typedef enum { typedef union _GtkCssToken GtkCssToken; typedef struct _GtkCssTokenizer GtkCssTokenizer; -typedef struct _GtkCssLocation GtkCssLocation; typedef struct _GtkCssStringToken GtkCssStringToken; typedef struct _GtkCssDelimToken GtkCssDelimToken; @@ -106,15 +107,6 @@ union _GtkCssToken { GtkCssDimensionToken dimension; }; -struct _GtkCssLocation -{ - gsize bytes; - gsize chars; - gsize lines; - gsize line_bytes; - gsize line_chars; -}; - void gtk_css_token_clear (GtkCssToken *token); gboolean gtk_css_token_is_finite (const GtkCssToken *token); diff --git a/gtk/css/meson.build b/gtk/css/meson.build index 135b3a41fc..0dda25f6aa 100644 --- a/gtk/css/meson.build +++ b/gtk/css/meson.build @@ -1,4 +1,5 @@ gtk_css_public_sources = files([ + 'gtkcsslocation.c', 'gtkcsserror.c', ]) @@ -9,6 +10,7 @@ gtk_css_private_sources = files([ gtk_css_public_headers = files([ 'gtkcssenums.h', 'gtkcsserror.h', + 'gtkcsslocation.h', ]) install_headers(gtk_css_public_headers, 'gtkcss.h', subdir: 'gtk-4.0/gtk/css') |