|
From: | Darcy Shen |
Subject: | Re: [Texmacs-dev] Case-insensitive search |
Date: | Sat, 23 Mar 2019 14:06:03 +0800 |
User-agent: | Zoho Mail |
Dear all,I have long wanted to implement a feature that is incredibly missing inTeXmacs: case-insensitive search. Below you will find the patches thatimplement it. Please test it extensively and if it is good to go, itmust be included in TeXmacs.Best regards,MardukPS There is a new preference in the Other tab that toggles case sensitivity.git-diff-c.patch-----------------diff --git a/TeXmacs-git/texmacs/src/src/Data/Tree/tree_search.cpp b/texmacs/src/src/Data/Tree/tree_search.cppindex 26df0cb..b2bef95 100644--- a/TeXmacs-git/texmacs/src/src/Data/Tree/tree_search.cpp+++ b/texmacs/src/src/Data/Tree/tree_search.cpp@@ -13,6 +13,7 @@#include "analyze.hpp"#include "boot.hpp"#include "drd_mode.hpp"+#include <locale>int search_max_hits= 1000000;bool blank_match_flag= false;@@ -20,6 +21,7 @@ bool initial_match_flag= false;bool partial_match_flag= false;bool injective_match_flag= false;bool cascaded_match_flag= false;+bool case_insensitive_match_flag= false;void search (range_set& sel, tree t, tree what, path p);bool match (tree t, tree what);@@ -46,6 +48,8 @@ initialize_search () {(get_user_preference ("allow-injective-match", "on") == "on");cascaded_match_flag=(get_user_preference ("allow-cascaded-match", "on") == "on");+ case_insensitive_match_flag=+ (get_user_preference ("case-insensitive-match", "off") == "on");}static void@@ -234,11 +238,21 @@ search_concat (tree t, tree what, int pos, int i,voidsearch_string (range_set& sel, string s, tree what, path p) {++ string source = string(N(s));++ if (case_insensitive_match_flag){+ for (int i = 0; i < N(s); i++)+ source[i] = std::tolower(s[i]);+ } else {+ source = s;+ }+if (is_atomic (what)) {string w= what->label;int pos= 0;while (pos < N(s)) {- int next= tm_search_forwards (w, pos, s);+ int next= tm_search_forwards (w, pos, source);if (next < 0 || next >= N(s)) break;merge (sel, simple_range (p * next, p * (next + N(w))));pos= next + N(w);git-diff-scheme.patch----------------------diff --git a/TeXmacs-git/texmacs/src/TeXmacs/progs/generic/generic-widgets.scm b/texmacs/src/TeXmacs/progs/generic/generic-widgets.scmindex 7214e5c..adf34d9 100644--- a/TeXmacs-git/texmacs/src/TeXmacs/progs/generic/generic-widgets.scm+++ b/texmacs/src/TeXmacs/progs/generic/generic-widgets.scm@@ -482,10 +482,12 @@(define (search-toolbar-search what)(let* ((u (current-buffer))- (aux (search-buffer)))+ (aux (search-buffer))+ (what-case (if (get-boolean-preference "case-insensitive-match")+ (string-downcase what) what)))(set-search-reference (cursor-path))(set-search-filter)- (buffer-set-body aux `(document ,what))+ (buffer-set-body aux `(document ,what-case))(buffer-set-master aux u)(set! search-window (current-window))(perform-search)))diff --git a/../TeXmacs-git/texmacs/src/TeXmacs/progs/texmacs/menus/preferences-widgets.scm b/texmacs/src/TeXmacs/progs/texmacs/menus/preferences-widgets.scmindex 360f4bb..bc86cb6 100644--- a/TeXmacs-git/texmacs/src/TeXmacs/progs/texmacs/menus/preferences-widgets.scm+++ b/texmacs/src/TeXmacs/progs/texmacs/menus/preferences-widgets.scm@@ -656,6 +656,9 @@(meti (hlist // (text "Program bracket selections"))(toggle (set-boolean-preference "prog:select brackets" answer)(get-boolean-preference "prog:select brackets")))+ (meti (hlist // (text "Case-insensitive search"))+ (toggle (set-boolean-preference "case-insensitive-match" answer)+ (get-boolean-preference "case-insensitive-match")))(assuming (qt-gui?) ; TODO: recode the dialogue in scheme(meti (hlist // (text "Use print dialogue"))(toggle (set-boolean-preference "gui:print dialogue" answer)_______________________________________________Texmacs-dev mailing list
[Prev in Thread] | Current Thread | [Next in Thread] |