summaryrefslogtreecommitdiff
path: root/gtk/css
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2019-03-23 03:27:56 +0100
committerBenjamin Otte <otte@redhat.com>2019-04-12 19:34:28 +0200
commit32e256e5abaa359ddb2a533e09921511ccc5d285 (patch)
tree7c7e0ed5453b012cb2418fcb2d335c96ae7ac9c3 /gtk/css
parentd4d46e812548a59a7280024d59b9aff79247fef3 (diff)
downloadgtk+-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.h1
-rw-r--r--gtk/css/gtkcsslocation.c74
-rw-r--r--gtk/css/gtkcsslocation.h43
-rw-r--r--gtk/css/gtkcsslocationprivate.h39
-rw-r--r--gtk/css/gtkcsstokenizer.c30
-rw-r--r--gtk/css/gtkcsstokenizerprivate.h12
-rw-r--r--gtk/css/meson.build2
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')