0

我正在尝试将 GTK textview 中隔离的单词与关键字列表进行比较,但似乎无法弄清楚如何做到这一点。我在 C 中工作(学习)。

gchar word[][10] = {"auto", "continue", "enum".....

我通过文本缓冲区逐字移动 iters,然后尝试

gtk_text_iter_get_text(&start,&end);

所以最终可以以 word[1] 作为“auto”,而迭代器在 textview 中找到“auto”这个词。但无法找到一种方法来比较它们以确认匹配。尝试使用 gtk_text_iter_forward_search() 会导致在自动移动设备中突出显示“自动”。

我已经尝试过'strcmp()',但无论文本视图中有什么,它总是返回 true。

我正在研究语法高亮之类的东西,并且有注释、单引号/双引号、转义序列/格式说明符和数字都能够突出显示,但我一直坚持在单词上突出显示,任何朝着正确方向的轻推都会受到赞赏。

4

1 回答 1

1

我通过检查文本编辑器是否在单词的开头和结尾找到了解决方案。

  while (1){
     
     if(gtk_text_iter_forward_search(&end, word[loop], GTK_TEXT_SEARCH_TEXT_ONLY,
                                                            &start, &end, &stop)){
        if (gtk_text_iter_starts_word(&start) && gtk_text_iter_ends_word(&end)){
           gtk_text_buffer_apply_tag(buffer, word_tag, &start, &end);
        }
        else{
           gtk_text_iter_forward_word_end(&end);
           gtk_text_buffer_remove_tag(buffer, word_tag, &start, &end);
        }
     }
     else
        break;
  }

在迭代 C 关键字数组的 for 循环中,所以现在如果我输入“auto”,它将突出显示,但如果我继续输入“automobile”,则删除文本标记。while 循环逐字扫描光标所在的行和上面的行。我只有一个月的时间学习 C 和 GTK,所以不是很先进,但也许发布我找到的解决方案会帮助其他正在学习的人。

于 2021-11-22T05:21:01.567 回答