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.
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:
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óng_strsplit()
y almacenando el resultado en la variablewords
.Ahora, para comparar cada palabra con la lista de palabras clave, puedes utilizar un bucle y la función
strcmp()
de la siguiente manera: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 arraypalabra_clave
antes de usarlos en el bucle.Espero que esto te ayude a lograr la funcionalidad de resaltado de sintaxis en tu aplicación.