es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

GTK TextBuffer, buscar palabras completas.

Estoy intentando comparar palabras aisladas en el GTK textview con una lista de palabras clave y no logro encontrar la forma de hacerlo. Estoy trabajando (aprendiendo) en C.

gchar word[][10] = {“auto”, “continue”, “enum”…

Estoy moviendo los iteradores palabra por palabra a través del buffer de texto, y luego tratando de obtener:

gtk_text_iter_get_text(&start, &end);

para terminar con word[1] como “auto” y los iteradores encontrando la palabra “auto” en el textview, pero no puedo encontrar una forma de compararlas para confirmar que sean iguales. Al intentar usar gtk_text_iter_forward_search() se resaltan cosas como la “auto” en automóvil.

He intentado usar ‘strcmp()’ pero siempre devuelve verdadero sin importar lo que haya en el text view.

Estoy trabajando en una especie de resaltado de sintaxis y puedo resaltar comentarios, comillas simples/dobles, secuencias de escape/transformación de formato y números, pero estoy atascado en cómo resaltar las palabras. Agradecería una ayuda para avanzar en la dirección correcta.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como estás tratando de comparar palabras aisladas en un GTK textview con una lista de palabras clave, una solución podría ser tokenizar primero el textview utilizando un espacio en blanco como delimitador y luego comparar cada palabra con la lista de palabras clave.

    Para tokenizar el textview, puedes utilizar la función g_strsplit de la biblioteca GLib. Aquí está un ejemplo de fragmento de código:

    GtkWidget *text_view; // asumiendo que este es el widget de tu textview de GTK
    GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view));
    
    GtkTextIter start, end;
    gtk_text_buffer_get_bounds(buffer, &start, &end);
    
    gchar *text = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
    gchar **words = g_strsplit(text, " ", -1);
    

    Aquí, primero obtenemos los límites del buffer y luego obtenemos el contenido del texto del buffer utilizando gtk_text_buffer_get_text(). También estamos dividiendo el texto en palabras utilizando la función g_strsplit() y almacenando el resultado en la variable words.

    Ahora, para comparar cada palabra con la lista de palabras clave, puedes utilizar un bucle y la función strcmp() de la siguiente manera:

    for (int i = 0; words[i] != NULL; i++) {
        for (int j = 0; j < numero_de_palabras_clave; j++) {
            if (strcmp(words[i], palabra_clave[j]) == 0) {
                // Se encontró una coincidencia, resalta la palabra aquí
            }
        }
    }
    

    Aquí, estamos utilizando bucles anidados para comparar cada palabra con la lista de palabras clave. Cuando se encuentra una coincidencia, puedes realizar la operación de resaltado en esa palabra.

    Ten en cuenta que necesitas definir la constante numero_de_palabras_clave y el array palabra_clave antes de usarlos en el bucle.

    Espero que esto te ayude a lograr la funcionalidad de resaltado de sintaxis en tu aplicación.

Comments are closed.