diff --git a/gtk/css/gtkcsstokenizer.c b/gtk/css/gtkcsstokenizer.c index 719358fd36..05879eae38 100644 --- a/gtk/css/gtkcsstokenizer.c +++ b/gtk/css/gtkcsstokenizer.c @@ -36,6 +36,9 @@ struct _GtkCssTokenizer const char *end; GtkCssLocation position; + + GtkCssLocation saved_position; + const char *saved_data; }; void @@ -1484,3 +1487,23 @@ gtk_css_tokenizer_read_token (GtkCssTokenizer *tokenizer, } } +void +gtk_css_tokenizer_save (GtkCssTokenizer *tokenizer) +{ + g_assert (!tokenizer->saved_data); + + tokenizer->saved_position = tokenizer->position; + tokenizer->saved_data = tokenizer->data; +} + +void +gtk_css_tokenizer_restore (GtkCssTokenizer *tokenizer) +{ + g_assert (tokenizer->saved_data); + + tokenizer->position = tokenizer->saved_position; + tokenizer->data = tokenizer->saved_data; + + gtk_css_location_init (&tokenizer->saved_position); + tokenizer->saved_data = NULL; +} diff --git a/gtk/css/gtkcsstokenizerprivate.h b/gtk/css/gtkcsstokenizerprivate.h index 83f245b2bc..95630b54ad 100644 --- a/gtk/css/gtkcsstokenizerprivate.h +++ b/gtk/css/gtkcsstokenizerprivate.h @@ -148,5 +148,8 @@ gboolean gtk_css_tokenizer_read_token (GtkCssTokenizer GtkCssToken *token, GError **error); +void gtk_css_tokenizer_save (GtkCssTokenizer *tokenizer); +void gtk_css_tokenizer_restore (GtkCssTokenizer *tokenizer); + G_END_DECLS