From: Ben Pfaff Date: Thu, 11 Mar 2021 03:42:27 +0000 (-0800) Subject: Add syntax mode radio button to syntax editor window. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cef98fb5402c1128dd9ee75d133e16911c6b7441;p=pspp Add syntax mode radio button to syntax editor window. A number of users have reported problems with the syntax mode. I am not sure why. This should allow them to select the syntax mode they actually need to use, just in case. The default should be unchanged (it is still Auto). --- diff --git a/src/ui/gui/psppire-lex-reader.c b/src/ui/gui/psppire-lex-reader.c index dac318a838..f975fe4501 100644 --- a/src/ui/gui/psppire-lex-reader.c +++ b/src/ui/gui/psppire-lex-reader.c @@ -54,11 +54,14 @@ lex_gtk_text_buffer_reader_cast (struct lex_reader *r) struct lex_reader * -lex_reader_for_gtk_text_buffer (GtkTextBuffer *buffer, GtkTextIter start, GtkTextIter stop) +lex_reader_for_gtk_text_buffer (GtkTextBuffer *buffer, + GtkTextIter start, GtkTextIter stop, + enum lex_syntax_mode syntax_mode) { struct lex_gtk_text_buffer_reader *r = xmalloc (sizeof *r); lex_reader_init (&r->reader, &lex_gtk_text_buffer_reader_class); + r->reader.syntax = syntax_mode; r->buffer = buffer; g_object_ref (buffer); diff --git a/src/ui/gui/psppire-lex-reader.h b/src/ui/gui/psppire-lex-reader.h index 954d78c423..4da6844249 100644 --- a/src/ui/gui/psppire-lex-reader.h +++ b/src/ui/gui/psppire-lex-reader.h @@ -18,9 +18,11 @@ #define LEX_READER_H #include +#include "language/lexer/lexer.h" -struct lex_reader; - -struct lex_reader *lex_reader_for_gtk_text_buffer (GtkTextBuffer *buffer, GtkTextIter start, GtkTextIter stop); +struct lex_reader *lex_reader_for_gtk_text_buffer ( + GtkTextBuffer *buffer, + GtkTextIter start, GtkTextIter stop, + enum lex_syntax_mode); #endif diff --git a/src/ui/gui/psppire-syntax-window.c b/src/ui/gui/psppire-syntax-window.c index 3c48684835..6a84318ab5 100644 --- a/src/ui/gui/psppire-syntax-window.c +++ b/src/ui/gui/psppire-syntax-window.c @@ -197,7 +197,8 @@ editor_execute_syntax (const PsppireSyntaxWindow *sw, GtkTextIter start, GtkTextIter stop) { PsppireWindow *win = PSPPIRE_WINDOW (sw); - struct lex_reader *reader = lex_reader_for_gtk_text_buffer (GTK_TEXT_BUFFER (sw->buffer), start, stop); + struct lex_reader *reader = lex_reader_for_gtk_text_buffer ( + GTK_TEXT_BUFFER (sw->buffer), start, stop, sw->syntax_mode); lex_reader_set_file_name (reader, psppire_window_get_filename (win)); @@ -514,6 +515,24 @@ on_run_current_line (PsppireSyntaxWindow *se) +static void +on_syntax (GAction *action, GVariant *param, PsppireSyntaxWindow *sw) +{ + g_action_change_state (action, param); + GVariant *new_state = g_action_get_state (action); + + const gchar *what = g_variant_get_string (new_state, NULL); + if (0 == g_strcmp0 (what, "auto")) + sw->syntax_mode = LEX_SYNTAX_AUTO; + else if (0 == g_strcmp0 (what, "interactive")) + sw->syntax_mode = LEX_SYNTAX_INTERACTIVE; + else if (0 == g_strcmp0 (what, "batch")) + sw->syntax_mode = LEX_SYNTAX_BATCH; + else + g_warn_if_reached (); +} + + /* Append ".sps" to FILENAME if necessary. The returned result must be freed when no longer required. */ @@ -760,6 +779,7 @@ psppire_syntax_window_init (PsppireSyntaxWindow *window) NULL); window->encoding = NULL; + window->syntax_mode = LEX_SYNTAX_AUTO; window->cliptext = NULL; window->dispose_has_run = FALSE; @@ -950,6 +970,13 @@ psppire_syntax_window_init (PsppireSyntaxWindow *window) g_action_map_add_action (G_ACTION_MAP (window), G_ACTION (run_to_end)); } + { + GSimpleAction *act_syntax = g_simple_action_new_stateful ("syntax", G_VARIANT_TYPE_STRING, + g_variant_new_string ("auto")); + g_signal_connect (act_syntax, "activate", G_CALLBACK (on_syntax), window); + g_action_map_add_action (G_ACTION_MAP (window), G_ACTION (act_syntax)); + } + gtk_menu_shell_append (GTK_MENU_SHELL (menubar), create_windows_menu (GTK_WINDOW (window))); diff --git a/src/ui/gui/psppire-syntax-window.h b/src/ui/gui/psppire-syntax-window.h index 43dd1b914b..3d54681fb2 100644 --- a/src/ui/gui/psppire-syntax-window.h +++ b/src/ui/gui/psppire-syntax-window.h @@ -25,6 +25,8 @@ #include +#include "language/lexer/lexer.h" + G_BEGIN_DECLS #define PSPPIRE_SYNTAX_WINDOW_TYPE (psppire_syntax_window_get_type ()) @@ -48,10 +50,10 @@ struct _PsppireSyntaxWindow /* */ GtkSourceBuffer *buffer; /* The buffer which contains the text */ - struct lexer *lexer; /* Lexer to parse syntax */ gchar *encoding; /* File's encoding. */ GtkWidget *sb; guint text_context; + enum lex_syntax_mode syntax_mode; GtkPrintSettings *print_settings; GtkSourcePrintCompositor *compositor; diff --git a/src/ui/gui/syntax-editor.ui b/src/ui/gui/syntax-editor.ui index 7ed0420c15..49780048d1 100644 --- a/src/ui/gui/syntax-editor.ui +++ b/src/ui/gui/syntax-editor.ui @@ -123,6 +123,23 @@ win.run-to-end +
+ + A_uto Syntax + auto + win.syntax + + + _Interactive Syntax + interactive + win.syntax + + + _Batch Syntax + batch + win.syntax + +